硬件作曲家 HAL
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
Hardware Composer (HWC) HAL 確定使用可用硬件合成緩衝區的最有效方式。作為 HAL,它的實現是特定於設備的,通常由顯示硬件 OEM 完成。
當您考慮覆蓋平面時,這種方法的價值很容易識別,它在顯示硬件而不是 GPU 中合成多個緩衝區。例如,考慮一個典型的縱向 Android 手機,狀態欄在頂部,導航欄在底部,應用程序內容在其他地方。每層的內容都在單獨的緩衝區中。您可以使用以下任一方法處理合成:
- 將應用程序內容渲染到暫存緩衝區,然後在其上渲染狀態欄、導航欄,最後將暫存緩衝區傳遞給顯示硬件。
- 將所有三個緩衝區傳遞給顯示硬件,並指示它從屏幕不同部分的不同緩衝區讀取數據。
後一種方法可以顯著提高效率。
顯示處理器功能差異很大。疊加層的數量、層是否可以旋轉或混合,以及對定位和重疊的限制都很難通過 API 來表達。為了適應這些選項,HWC 執行以下計算:
- SurfaceFlinger 為 HWC 提供了完整的層列表,並詢問:“你想如何處理這個?”
- HWC 通過將每一層標記為設備或客戶端組合來響應。
- SurfaceFlinger 負責處理任何客戶端,將輸出緩衝區傳遞給 HWC,並讓 HWC 處理其餘部分。
由於硬件供應商可以定制決策代碼,因此可以從每台設備中獲得最佳性能。
當屏幕上沒有任何變化時,疊加平面的效率可能低於 GL 合成。當覆蓋內容具有透明像素並且混合了重疊圖層時尤其如此。在這種情況下,HWC 可以為部分或所有層請求 GLES 合成並保留合成的緩衝區。如果 SurfaceFlinger 要求合成同一組緩衝區,HWC 可以顯示之前合成的暫存緩衝區。這可以提高空閒設備的電池壽命。
Android 設備通常支持四個覆蓋平面。嘗試合成比疊加層更多的層會導致系統對其中的一些使用 GLES 合成,這意味著應用程序使用的層數會對功耗和性能產生可衡量的影響。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2022-06-06 (世界標準時間)。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"缺少我需要的資訊"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"過於複雜/步驟過多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"過時"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻譯問題"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/程式碼問題"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"容易理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"確實解決了我的問題"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u4e0a\u6b21\u66f4\u65b0\u6642\u9593\uff1a2022-06-06 (\u4e16\u754c\u6a19\u6e96\u6642\u9593)\u3002"}
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2022-06-06 (世界標準時間)。"]]