问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Android显示刷新机制:VSYNC与三重缓存机制详解

创作时间:
作者:
@小白创作中心

Android显示刷新机制:VSYNC与三重缓存机制详解

引用
CSDN
1.
https://blog.csdn.net/2401_89190695/article/details/144541580

在Android系统中,显示刷新机制是确保流畅用户体验的关键技术之一。本文将深入探讨VSYNC信号和三重缓存机制的工作原理,帮助开发者理解如何优化应用的渲染性能。

刷新率与帧率

为了理解APP是如何进行渲染的,我们需要了解手机硬件的工作原理,特别是刷新率和帧率的概念。

  1. 刷新率(Refresh Rate):代表了屏幕在一秒内刷新屏幕的次数,这取决于硬件的固定参数,例如60Hz。

  2. 帧率(Frame Rate):代表了GPU在一秒内绘制操作的帧数,例如30fps,60fps。

GPU会获取图形数据进行渲染,然后硬件负责把渲染后的内容呈现到屏幕上,它们两者不停地进行协作。

如果刷新率和帧率不相互协调工作,就会容易出现画面撕裂(Tearing)的现象,即画面上下两部分显示内容发生断裂,来自不同的两帧数据发生重叠。

Google的优化

从Android 4.1开始,谷歌引入了Project Butter(黄油计划),对Android Display系统进行了重构,引入了三个核心元素:VSYNC、Triple Buffer和Choreographer。

VSYNC信号

VSYNC(Vertical Synchronization)是一个古老的概念,也称为垂直同步。它指的是显卡的输出帧数和屏幕的垂直刷新率相同。在Android中,VSYNC信号是由屏幕(显示设备)产生的,并且以60fps的固定频率发送给Android系统,SurfaceFlinger接收这个信号。

当SurfaceFlinger接收到VSYNC信号后,会遍历其层列表,查找新的缓冲区。如果找到新的缓冲区,SurfaceFlinger会获取缓冲区;否则,会继续使用上一次获取的缓冲区。

使用VSYNC信号的效果

在没有VSYNC的情况下,如果CPU被占用,可能会导致丢帧。而使用VSYNC信号后,CPU会在新的一帧开始时立即处理显示内容,提升了渲染任务的优先级,优化了渲染性能。

但是,如果CPU/GPU的帧率小于Display的帧率,仍然会出现重复显示的情况。

Triple Buffer三重缓存机制

在双缓存机制中,UI总是先在Back Buffer中绘制,然后再和Front Buffer交换,渲染到显示设备中。理想情况下,这样一个刷新会在16ms内完成。

为了解决CPU空闲等待的问题,Android引入了三重缓存机制(Triple Buffer)。它利用CPU/GPU的空闲等待时间提前准备好数据,但不会立即使用。

虽然Triple Buffer可以提高渲染效率,但过多的缓存也会带来内存开销和数据失效等问题。因此,三个Buffer是最优选择。

总结

  • 刷新率(Refresh Rate):代表了屏幕在一秒内刷新屏幕的次数,这取决于硬件的固定参数,例如60Hz。
  • 帧率(Frame Rate):代表了GPU在一秒内绘制操作的帧数,例如30fps,60fps。
  • GPU会获取图形数据进行渲染,然后硬件负责把渲染后的内容呈现到屏幕上,它们两者不停地进行协作。
  • 如果刷新率和帧率不相互协调工作,就会容易出现画面撕裂(Tearing)的现象。
  • 从Android 4.1开始,谷歌在黄油计划中,引入了三个核心元素,即VSYNC、Triple Buffer和Choreographer。
  • VSYNC信号是由屏幕(显示设备)产生的,并且以60fps的固定频率发送给Android系统,Android系统中的SurfaceFlinger接收发送的VSYNC信号。VSYNC信号表明可对屏幕进行刷新而不会产生撕裂。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号