Android性能优化系列--VSYNC
概念
- VSYNC, vertical synchronization
- Refresh Rate 屏幕一秒钟刷新的次数,由硬件决定,单位Hz,一般是60Hz
- Frame Rate GPU在一秒内绘制的帧数,单位fps(Frames per second)
具体解释
GPU获取图形数据进行绘制,硬件将绘制好的数据呈现在屏幕上,为了使画面在屏幕上流畅的显示,需要保持Frame Rate在60以上,也就是一次draw操作的时间不超过16.67ms。
Frame Rate与Refrash Rate不会总保持一致,如果GPU绘制速度大于屏幕刷新速度,就会出现截断现象,这是因为GPU使用一块内存绘制帧数据,新的图像帧会从上到下一行一行覆盖旧图像帧,当屏幕刷新时并不知道缓冲区现在的数据状态,这样就抓取了GPU中还没有绘制完的一帧数据。
解决方法是双缓冲技术(double buffering),GPU首先将帧数据写到back buffer中,然后把它拷贝到另一块区域frame buffer。当绘制下一帧时,数据先写到back buffer,屏幕刷新时,只从frame buffer中获取。如果GPU正在写back buffer,这时候来了刷新屏幕,VSYNC就会阻止这个拷贝过程。
VSYNC or vertical synchronization,will basically keep this copy operation from back buffer to frame buffer from happening if the screen is in the middle of refreshing from it.
当GPU的绘制速度小于屏幕刷新速度,也就是FrameRate < RefreshRate,就会在屏幕上看到卡顿现象。所以要尽量保证一帧的绘制时间小于16ms。