在Android4.4中,对VSync机制的实现进行了一些修改,但是总体过程还是一样:
1. HWComposer将底层硬件产生的VSync报告给SurfaceFlinger
2. SurfaceFlinger将VSync又通知给EventThread线程。
3. EventThread收到VSync事件后,调用相应的回调函数。
总体来看,主要的修改有如下几点:
1. 引入了VSync Event Model,通过该模型,来充当VSync的事件源,它的VSync时间戳当然是基于硬件为参考的,具体实现在DispSync类中,它会周期性的调用注册到这个对象上的回调函数。
2. SurfaceFlinger新定义了一个DispSyncSource类,该类继承自VSyncSource和DispSync::Callback,实现了DispSync::Callback定义的回调接口onDispSyncEvent,在该接口里面,会调用注册到DispSyncSource的回调函数接口VSyncSource::Callback对象,并调用其实现的onVSyncEvent函数接口。
3. EventThread的主要改动是构造函数接受一个VSynSource的智能指针对象,其本身也实现了VSyncSource::Callback接口,即其本身也是一个VSyncSource::Callback对象。因为它会将自己注册给DispSyncSource