HWComposer
Vsync信号的产生有两种来源,一种是硬件,也就是显示模块产生;另外一种是软件模拟,因为目前基本都是硬件产生的,所以软件模拟的代码就没有分析的必要了。
接下来分析由硬件产生的vsync是怎么传到surfaceflinger的。
这个硬件源就是HWComposer,它一方面管理这composer的hal模块,composer模块是厂商定制UI合成的接口,通常不会直接操作HWComposer模块,而是通过surfaceflinger使用它;另一方面就是产生vsync信号。
在SurfaceFlinger_hwc1.cpp中的init方法中会构造HWComposer对象,
mHwc.reset(new HWComposer(this, *static_cast<HWComposer::EventHandler *>(this)));
HWComposer_hwc1.cpp的HWComposer的构造方法主要逻辑如下,
1,加载FB的hal模块,对应设备用framebuffer_device_t* mFbDev表示, 然后加载Hwc模块,对应的设备用struct hwc_composer_device_1* mHwc表示。
int fberr = loadFbHalModule();
loadHwcModule();
2, 注册硬件回调事件
if (mHwc->registerProcs) {
mCBContext->hwc = this;
mCBContext->procs.invalidate = &hook_invalidate;
mCBContext->procs.vsync = &hook_vsync;
•••
mHwc->registerProcs(mHwc, &mCBContext->procs);
loadFbHalModule方法逻辑如下,
1, 打开的硬件模块
hw_module_t const* module;
int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
2,调用硬件模块的open方法,打开指定的硬件设备
retu