android 8.0 Hwcomposer2 HIDL流程

在android O之后google为了更好的管理以及方便OTA的升级,加入了HIDL,将Android Framework和Hal进行分离
每个模块流程大致都一样,我主要从hwcomposer流程入手分析学习一下,本文没有涉及到HIDL的启动以及通讯,主要谈到hotplug的传递流程以及注册过程
首先看看hotplug的注册流程
查看framework native部分
frameworks\native\services\surfaceflinger\surfaceflinger.h头文件里面可以看到
我们目前使用的是hwc2,所以SurfaceFlinger 继承了ComposerCallback类

class SurfaceFlinger : public BnSurfaceComposer,
                       private IBinder::DeathRecipient,
#ifdef USE_HWC2
                       private HWC2::ComposerCallback
#else
                       private HWComposer::EventHandler
#endif

看看ComposerCallback这个类
在frameworks\native\services\surfaceflinger\DisplayHardware\hwc2.h中

class ComposerCallback {
 public:
    virtual void onHotplugReceived(int32_t sequenceId, hwc2_display_t display,
                                   Connection connection,
                                   bool primaryDisplay) = 0;
    virtual void onRefreshReceived(int32_t sequenceId,
                                   hwc2_display_t display) = 0;
    virtual void onVsyncReceived(int32_t sequenceId, hwc2_display_t display,
                                 int64_t timestamp) = 0;
    virtual ~ComposerCallback() = default;
};

在hwc2.h的头文件里面ComposerCallback 类中定义了,主要有同步,热拔插,刷新三个虚方法,目前猜测在surfaceflinger.cpp中应该会实现这三个方法,然而你的猜测是对的
frameworks\native\services\surfaceflinger\SurfaceFlinger.cpp

void SurfaceFlinger::onHotplugReceived(int32_t sequenceId,
        hwc2_display_t display, HWC2::Connection connection,
        bool primaryDisplay) {
    ALOGV("onHotplugReceived(%d, %" PRIu64 ", %s, %s)",
          sequenceId, display,
          connection == HWC2::Connection::Connected ?
                  "connected" : "disconnected",
          primaryDisplay ? "primary" : "external");
    ConditionalLock lock(mStateLock,
            std::this_thread::get_id() != mMainThreadId);
    if (primaryDisplay) {
        mHwc->onHotplug(display, connection);
        if (!mBuiltinDisplays[DisplayDevice::DISPLAY_PRIMARY].get()) {
            createBuiltinDisplayLocked(DisplayDevice::DISPLAY_PRIMARY);
        }
        createDefaultDisplayDevice();
    } else {
        if (sequenceId != mComposerSequenceId) {
            return;
        }
        if (mHwc->isUsingVrComposer()) {
            ALOGE("Ex
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值