1. 卡顿原理
卡顿,也就是掉帧。当UIView
被绘制时,cpu
执行drawrect
,通过context
将数据写入backingstore
。
当backingstore 写完后,通过 render server
交给gpu
去渲染,渲染的东西放到framebuffer里面,然后通过Video Controller交给monitor进行显示。说到底cpu
就是做绘制
的操作把内容放到缓存里,gpu
负责从缓存里读取数据然后渲染
到屏幕上。
最开始时,FrameBuffer
只有一个,这种情况下FrameBuffer的读取和刷新有很大的效率问题,如果gpu卡在那边,那么FrameBuffer接受不到消息,就会闲置。为了解决这个问题,引入了双缓存区
。即双缓冲机制。在这种情况下,GPU会预先渲染好一帧放入FrameBuffer,让视频控制器读取,当下一帧渲染好后,GPU会直接将视频控制器的指针指向第二个FrameBuffer。这时候,如果中间有的帧在一定时间内没有渲染完,那么就会被丢弃掉,转而去渲染下一个帧。这时候,就会出现卡顿。
这里采用了垂直同步信号机制来进行帧和帧的切换。当开启垂直同步后,GPU会等待显示器的VSync信号发出后,才进行新的一帧渲染和FrameBuffer更新。而目前iOS设备中采用的正是双缓存区+VSync