美文网首页
VSync传递之 HWC -> SF

VSync传递之 HWC -> SF

作者: 大大世界 | 来源:发表于2016-06-02 12:11 被阅读893次

    HWC 简介

    HWC这个东西, 之前也是比较困扰我理解的东西, 一直想问个明白, 这东西是个啥, 具体有啥作用。

    surfaceflinger_bufferqueue.png
    看图扯淡下 hwc 设备, 可以想象成一个物理混合器, SF把多个Surface输出给hwchwc按照Surface的属性, 把多个Surface混合成一个Surface, 最后输出到Display. hwc.png

    代码层可以分为两部分去看:
    1: HWComposer 先从VSync的角度看, 这是SFhwc交互的一个桥梁。
    2: hwc_composer_device_1 物理设备与上层交互的接口。

    VSync初始化流程


    之前看代码的时候一直不是太喜欢看整个初始化流程, 只喜欢看关键调用流程, 这样看问题的话, 不容易理解的全面。 想了解VSync的整个运作流程, 其实看完初始化的流程再看VSync的响应流程, 就特别清晰明了。

    vsync.png

    关键看图中的红线
    SF初始化的时候, 先创建 HWComposer
    HWComposer是一个桥梁的作用, 具体由cb_context进行连接。

                mCBContext->hwc = this;
                mCBContext->procs.invalidate = &hook_invalidate;
                mCBContext->procs.vsync = &hook_vsync;
                if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_1))
                    mCBContext->procs.hotplug = &hook_hotplug;
                else
                    mCBContext->procs.hotplug = NULL;
                memset(mCBContext->procs.zero, 0, sizeof(mCBContext->procs.zero));
                mHwc->registerProcs(mHwc, &mCBContext->procs);
    

    代码逻辑其实就是红线部分, 把回调接口连接上。

    VSync响应流程


    流程就是蓝色线条。
    硬件产生信号, 最后传到SF

    相关文章

      网友评论

          本文标题:VSync传递之 HWC -> SF

          本文链接:https://www.haomeiwen.com/subject/kdvhdttx.html