更多关于Android渲染性能请点击这里
文章目录
- 刷新频率和帧频
- 图像撕裂
- 双缓存技术
- 垂直同步
刷新频率和帧频
理解VSYNC先要理解其他两个术语
- 刷新频率:每秒内屏幕更新显示的次数以赫兹(Hz)表示,取决于硬件
- 帧频:指GPU每秒可以绘制的帧数,例如:30帧每秒,60帧每秒
刷新频率和帧频同时工作从而在屏幕上显示图像,GPU获取数据并进行绘制,然后硬件会将其输出到屏幕上
图像撕裂
但问题来自于刷新频率和帧频不一定会以同样的频率出现,当帧率比刷新频率快时会出现一些视觉问题。
当你照相时拍了一张照片,旋转10度又拍了一张照片,这两张照片非常相似
现在将第二张图片剪开拼接在第一张上,衔接处会有明显的不同,这就是图像撕裂。
当刷新频率与帧率不同时,就会出现这种现象
图像卡在绘制某一帧时使用了内存的一部分,每一个新的帧都会覆盖上一层的帧,从顶端开释,每次输出一行数据。当屏幕刷新时,他不知道缓冲是从什么时候开始的,他从GPU中获取一帧,此时这一帧可能是未完成的帧
双缓存技术
这个问题的解决方案是双缓冲技术,实际上当GPU将一帧绘制到内存,也叫后台缓冲,它会将其复制到内存副区域,也叫帧缓存区。
当他绘制第二帧时,他会完成后台缓冲,帧缓存区不受影响,当屏幕刷新时,他会从并不处于绘制过程中的帧缓存区进行刷新,这就要用到VSYNC(垂直同步)
垂直同步
VSYNC 避免了在屏幕刷新时,把数据从后台缓冲区复制到帧缓冲区
帧率高于刷新频率是理想的,因为GPU刷新速度高于屏幕读取速度,这种情况下,当屏幕成功刷新后,GPU会垂直同步,等待下一次的屏幕刷新,这种情况下帧频会根据设备刷新频率进行捕捉
但是如果屏幕刷新速度比你GPU绘制速度快,每次刷新都会按照同一帧进行。或者说屏幕会显示两次同样的GPU帧
如果帧率高于刷新频率,但是突然下降了,用户就会看见流畅的动画突然出现了卡顿,然后剩余部分还是很流畅,通常称做闪避、打结、延迟或卡顿
我们的应用应该尽量避免突然地恶化,帧率要一直保证GPU能够迅速获取他要的数据,并且有时间在下一次屏幕刷新前进行绘制。
理解VSYNC仅仅是开始,打造高性能的Android应用提供极致的渲染性能请点击这里