Skip to content
阅读进度

VSync、Choreographer#doFrame 与每帧预算是什么关系? ​

返回 View 与显示链路 目录

标准回答 ​

每次显示刷新周期约为 1000 / 刷新率 毫秒:60Hz 约 16.67ms,90Hz 约 11.11ms,120Hz 约 8.33ms。Choreographer 在有待执行帧工作时响应 VSync 调度 doFrame,推进输入、动画和遍历等回调;CPU、GPU、合成协作完成帧,不能把整个周期都当成应用主线程可独占的预算。

通俗例子 ​

60Hz 相邻刷新约 16.7ms,120Hz 约 8.3ms。主线程某次执行 30ms,可能错过显示机会;实际流水线还包含 RenderThread、GPU 和合成。

深入解释 ​

**显示节拍怎么传到应用:**VSync 提供显示相关的节奏信号,Choreographer 在需要更新界面时协调输入、动画、遍历等帧回调。doFrame 是应用处理一帧工作的入口,不是屏幕已经显示的通知。

**为什么超过预算会卡:**60Hz 一次刷新间隔约 16.7ms,120Hz 约 8.3ms;应用、GPU 和合成还需按流水线完成工作。关键阶段错过截止时刻,画面就可能晚一轮或更多轮显示。

易混淆点 ​

不是每次 VSync 都必须产生新的应用画面,16ms 也不是所有屏幕的固定预算。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。