為配合主幹穩定開發模型,並確保生態系統的平台穩定性,我們將於 2026 年起,在第 2 季和第 4 季將原始碼發布至 AOSP。如要建構及貢獻 AOSP,建議使用 android-latest-release,而非 aosp-main。android-latest-release 資訊清單分支版本一律會參照推送至 AOSP 的最新版本。詳情請參閱「Android 開放原始碼計畫變更」一文。
Google uses AI technology to translate content into your preferred language. AI translations can contain errors.
硬件作曲家 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 (世界標準時間)。
[[["容易理解","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 (世界標準時間)。"],[],[]]