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就可以收到了。
网友评论