这一篇我们介绍一下 IComposer 中的另一个比较重要的方法,通过注册监听 Hal 层实现监听驱动的关键动作。
在前面文章 SurfaceFlinger 的 init() 方法中,我们注册了一个 Callback 到 Hal 层中。最终通过 HIDL 调用到 Hal 层。
源码位置:/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
- void SurfaceFlinger::init() {
- ALOGI( "SurfaceFlinger's main thread ready to run. " "Initializing graphics H/W...");
- Mutex::Autolock _l(mStateLock);
- ……
- mCompositionEngine->setHwComposer(getFactory().createHWComposer(mHwcServiceName));
- mCompositionEngine->getHwComposer().setCallback(*this);
- ……
- ALOGV("Done initializing");
- }
这里通过 getHwComposer() 获取对应的 HWComposer 实例,然后调用 HWComposer 的 setCallback() 方法设置监听。
- HWComposer& SurfaceFlinger::getHwComposer() const {
- return mComposit