程序猿葵花宝典待学习Android

VSync传递之 SF

2016-06-13  本文已影响367人  大大世界

VSync 虚拟化

为了提高UI的响应速度, Android重新设计了VSync的相应逻辑。

Android 就是考虑到上面的这个假设, 设计了虚拟化的VSync.

Sync.png
DispSync接收到VSync之后, 先发给App然后过段时间再发给SF.

SF中传递线程关联方式

通过上面介绍了解到, SF 收到 HWC 传递过来的VSync, 先传递到 DispSyncThreadVSync分发线程), 然后分发给 EventThreadVSync处理线程)。

Vsync_process.png

看图中粉红色线部分:
1: EventThreadVSync处理线程)启动之后, 进入 threadLoop 循环, 调用 waitForEvent方法, 激活整个传递流程。
2: waitForEvent 调用 enableVSyncLocked
2-1:enableVSyncLocked 第一步把 EventThread 自己设置为 DispSyncSource 的回调。
2-2:DispSyncSource通过setVSyncEnabled把自己添加到 DispSync 的回调 mEventListeners中。

PSDispSyncDispSyncSource 的初始化都在SFinit中。 这里都比较简单, 画出来图就太多线了。

SF中VSync的传递

VsyncProcess.png

图中绿线部分, 接着上节传递的位置 onVSyncReceived

Vsync_thread.png

整个流程跟着箭头走比较清晰, 其中涉及到三次跨线程交互。

前两次都是通过 Condition 进行唤醒的, 最后一次通过的是本地套接字唤醒的。

上一篇 下一篇

猜你喜欢

热点阅读