VSync傳遞之 HWC -> SF

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容