Android Framework学习之vsync机制

VSync信号机制

HWComposer:硬件生成VSync信号

VSyncThread:软件生成VSync信号的线程。如果硬件没加载成功,这里用软件模拟生成VSync信号

VSync信号发生时,一方面会通知应用绘制UI,另一方面会通知SurfaceFlinger去对应用绘制完的图像进行合成,渲染。

VSync分发给app-EventThread和sf-EventThread时,各自加了一个不一样的偏移,这样就将分发错开了,避免同时进行抢占CPU。

EventHandler:硬件/软件产生VSync后会调用EventHandler,这个方法在this(SurfaceFlinger)里, 在这个方法里会继续分发给&mPrimaryDispSync, mPrimaryDispSyncl里有个工作线程,VSync信号会交给这个工作线程去分发,分发给mEventThread(分发给应用端的线程)和mSFEventThread(分发给SurfaceFlinger自己的线程)。

对应用端来说,VSync信号是在mEventThread线程分发的,但响应是在应用进程的Choreographer线程进行的。

对SurfaceFlinger来说,VSync信号是在mSFEventThread线程分发的,但响应是在SurfaceFlinger的主线程进行的

用来生成VSync信号

&hook_vsync:硬件产生vsync信号

VSyncThread(*this): 软件产生vsync信号

&hook_vsync 调用 vsync函数,

VSync信号来时会唤醒EventThread线程,EventThread通过注册到EventThread的connections分发出去(每个connection都有一对描述符:mSenderFd和mReceiverFd),EventThread发送时向mSenderFd写了一个数据,mReceiverFd就可以收到了。

你可能感兴趣的:(Android Framework学习之vsync机制)