通过上一篇文章的分析,能够发现其实 registerCallback 在 HWC2On1Adapter(也是 hwc2_device_t)中做的事情仅仅只是把当前的方法指针和回调类型存储起来,同时让刚注册进来的监听消费掉还没有回调上去的消息。其实真正从硬件回调上来的地方其实是 HWC2On1Adapter::Callback 中的回调。他是在hwc_device_t 的 registerProcs 的时候注册进去的。
一、监听硬件调用
1、HWC2On1Adapter.cpp
源码位置:/hardware/interfaces/graphics/composer/2.1/utils/hwc2on1adapter/HWC2On1Adapter.cpp
HWC2On1Adapter::HWC2On1Adapter(hwc_composer_device_1_t* hwc1Device) : ……
{……mHwc1Device->registerProcs(mHwc1Device, static_cast<const hwc_procs_t*>(mHwc1Callbacks.get()));
}
这里通过 registerProcs() 方法调用对应的硬件接口。
2、hwcomposer.h
源码位置:/hardware/libhardware/include/hardware/hwcomposer.h
void (*registerProcs)(struct hwc_composer_device_1* dev, hwc_procs_t const* procs);
调用到 hwc_composer_device_1 设备的对应方法 hwc_registerProcs()。这里同样一 msm