天天看點

Android圖形顯示系統——下層顯示4:圖層合成下(硬體合成器)硬體合成器-HwComposer

使用3d合成,需要大面積的像素混合計算和大量的記憶體傳輸(gpu讀寫graphicbuffer所需),對gpu和ddr來說是一個巨大的負擔。在gpu/ddr重度使用的場景(比如玩遊戲),會造成發熱、卡頓等。

為了提升性能,減少功耗,可以将合成這個過程交由另一個晶片完成,減輕gpu負擔。進一步,直接讓這個晶片連lcd,在lcd需要顯示某一行時線上合成。

hwcomposer便是這一個/多個專用合成晶片的驅動hal層。

驅動由內建晶片系統的廠商自行設計,但需要遵循一定的标準,這個标準就是android規定的hwcomposer接口。

hwcomposer的接口定義位于此檔案:

hardware/libhardware/include/hardware/hwcomposer.h

其中部分宏定義在:

hardware/libhardware/include/hardware/hwcomposer_defs.h

在surfaceflinger中,layer對應于window表示一個buffer循環體系,對hwcomposer而言,layer僅指代目前buffer,也即surfaceflinger中的layer的目前幀。

這裡面最難了解和最易出錯的是 sourcecrop、displayframe和visibleregion,在處理soc上的顯示問題時,這往往是首先考慮的因素:

Android圖形顯示系統——下層顯示4:圖層合成下(硬體合成器)硬體合成器-HwComposer

如圖所示,該layer的顯示區域部分被l2完全擋住,source crop 為該layer參與合成的範圍,display frame 為該layer合成的目标區域,visibleregion為該layer被擋住後,剩餘的可見區域集。

看完了這個結構體,上一篇

<a href="http://blog.csdn.net/jxt1234and2010/article/details/46057267">http://blog.csdn.net/jxt1234and2010/article/details/46057267</a>

所提到的adb shell dumpsys surfaceflinger 所得到的表格,各參數表示什麼意思自然一下就清楚了。

實體顯示屏表示連接配接實際的顯示儀器如lcd,目的是産生顯示效果,可以使用線上合成。

虛拟顯示屏表示目的是合成一個buffer,不需要理會這個buffer後續如何産生顯示效果,這時需要把所有圖層合成到指定的buffer上。這種情況下必須離線合成。典型場景是手機連wfd/hdmi,手機合成好的buffer通過wifi/hdmi傳輸到電視上顯示。

最後是device的函數指針定義

繼續閱讀