更多关于Android渲染性能请点击这里


文章目录

  • 刷新频率和帧频
  • 图像撕裂
  • 双缓存技术
  • 垂直同步


刷新频率和帧频

理解VSYNC先要理解其他两个术语

  • 刷新频率:每秒内屏幕更新显示的次数以赫兹(Hz)表示,取决于硬件
  • 帧频:指GPU每秒可以绘制的帧数,例如:30帧每秒,60帧每秒

刷新频率和帧频同时工作从而在屏幕上显示图像,GPU获取数据并进行绘制,然后硬件会将其输出到屏幕上




手机Gpu频率上不去_垂直同步


图像撕裂

但问题来自于刷新频率和帧频不一定会以同样的频率出现,当帧率比刷新频率快时会出现一些视觉问题。



手机Gpu频率上不去_垂直同步_02


当你照相时拍了一张照片,旋转10度又拍了一张照片,这两张照片非常相似



手机Gpu频率上不去_垂直同步_03


现在将第二张图片剪开拼接在第一张上,衔接处会有明显的不同,这就是图像撕裂。



手机Gpu频率上不去_垂直同步_04


当刷新频率与帧率不同时,就会出现这种现象



手机Gpu频率上不去_垂直同步_05


图像卡在绘制某一帧时使用了内存的一部分,每一个新的帧都会覆盖上一层的帧,从顶端开释,每次输出一行数据。当屏幕刷新时,他不知道缓冲是从什么时候开始的,他从GPU中获取一帧,此时这一帧可能是未完成的帧

双缓存技术

这个问题的解决方案是双缓冲技术,实际上当GPU将一帧绘制到内存,也叫后台缓冲,它会将其复制到内存副区域,也叫帧缓存区。



手机Gpu频率上不去_手机Gpu频率上不去_06


当他绘制第二帧时,他会完成后台缓冲,帧缓存区不受影响,当屏幕刷新时,他会从并不处于绘制过程中的帧缓存区进行刷新,这就要用到VSYNC(垂直同步)



手机Gpu频率上不去_VSYNC_07


垂直同步

VSYNC 避免了在屏幕刷新时,把数据从后台缓冲区复制到帧缓冲区

帧率高于刷新频率是理想的,因为GPU刷新速度高于屏幕读取速度,这种情况下,当屏幕成功刷新后,GPU会垂直同步,等待下一次的屏幕刷新,这种情况下帧频会根据设备刷新频率进行捕捉



手机Gpu频率上不去_图像撕裂_08


但是如果屏幕刷新速度比你GPU绘制速度快,每次刷新都会按照同一帧进行。或者说屏幕会显示两次同样的GPU帧



手机Gpu频率上不去_图像撕裂_09


如果帧率高于刷新频率,但是突然下降了,用户就会看见流畅的动画突然出现了卡顿,然后剩余部分还是很流畅,通常称做闪避、打结、延迟或卡顿



手机Gpu频率上不去_垂直同步_10


我们的应用应该尽量避免突然地恶化,帧率要一直保证GPU能够迅速获取他要的数据,并且有时间在下一次屏幕刷新前进行绘制。

理解VSYNC仅仅是开始,打造高性能的Android应用提供极致的渲染性能请点击这里