1. 概述
一帧是如何显示的?
- 简单来说,SurfaceFlinger用于合成显示图层,再将其刷入到HWComposer封装的显示设备中就可以显示了
- 对于一帧内容,先等App UI画完了,SurfaceFlinger再出场对其进行合并渲染后放入framebuffer,最后整到屏幕上。
- 当显示驱动支持时,VSYNC由硬件定时发送到HWComposer中;否则HWComposer会新起一个线程模拟发送VSYNC信号,其原理也十分简单,就是定期唤起线程发送信号。
Surface跟Layer
- Layer是一个图层
- Surface实际显示在手机上的某一个图像,这个图像可能由多个Layer组成
Vsync-app 跟 Vsync-sf
- VSYNC-app用于控制APP绘制UI的节奏,其实就是SF中app-DispSyncSource根据自己需要,转发DispSync的sync信号。
- VSYNC-sf用于控制SF合成Layer的节奏,可以理解为sf对应的DispSyncSource发出的sync信号,再触发EventThread的回调并转换成事件写入写端,最后触发读端的回调MessageQueue::cb_eventReceiver(),SF开始合成显示图层
2. 流程
屏幕的刷新过程是每一行从左到右(行刷新,水平刷新,Horizontal Scanning),从上到下(屏幕刷新,垂直刷新,Vertical Scanning)。当整个屏幕刷新完毕,即一个垂直刷新周期完成,会有短暂的空白期,此时发出 VSync 信号。所以,VSync 中的 V 指的是垂直刷新中的垂直-Vertical。
Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,VSync是Vertical Synch

本文详细介绍了Android系统中一帧内容的显示流程,涉及SurfaceFlinger、VSync、双缓冲和三缓冲机制。VSync在16ms内触发UI渲染,避免掉帧问题。双缓冲可能导致画面重复,三缓冲则通过增加一个额外的GraphicBuffer减少等待时间,提高流畅性。
&spm=1001.2101.3001.5002&articleId=118407227&d=1&t=3&u=43dfef72110245488517fea880e44f32)
2634

被折叠的 条评论
为什么被折叠?



