HWComposer 分析

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
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值