Google 致力于为黑人社区推动种族平等。查看具体举措
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

硬件作曲家HAL

硬件編輯器(HWC)HAL確定了使用可用硬件複合緩衝區的最有效方法。作為HAL,其實現是特定於設備的,通常由顯示硬件OEM完成。

當考慮覆蓋平面時,這種方法的價值很容易識別,該平面在顯示硬件而非GPU中組合了多個緩衝區。例如,以縱向的典型Android手機為例,狀態欄位於頂部,導航欄位於底部,而應用程序內容在其他位置。每層的內容在單獨的緩衝區中。您可以使用以下兩種方法之一來處理合成:

  • 將應用程序內容呈現到暫存緩衝區中,然後在其上方呈現狀態欄,頂部的導航欄,最後將暫存緩衝區傳遞給顯示硬件。
  • 將所有三個緩衝區傳遞給顯示硬件,並指示其從屏幕不同部分的不同緩衝區讀取數據。

後一種方法可以大大提高效率。

顯示處理器功能差異很大。覆蓋層的數量,無論是可以旋轉還是融合的層,都難以通過API來表達對位置和重疊的限制。為了適應這些選項,HWC執行以下計算:

  1. SurfaceFlinger為HWC提供了完整的圖層列表,並詢問:“您要如何處理?”
  2. HWC通過將每一層標記為設備或客戶端組成來進行響應。
  3. SurfaceFlinger負責所有客戶端,將輸出緩衝區傳遞給HWC,然後讓HWC處理其餘客戶端。

由於硬件供應商可以自定義定制決策代碼,因此有可能從每台設備中獲得最佳性能。

當屏幕上的任何內容都沒有變化時,覆蓋平面可能不如GL合成有效。當覆蓋內容具有透明像素並且混合了重疊的層時,尤其如此。在這種情況下,HWC可以請求對某些或所有層進行GLES合成,並保留複合緩衝區。如果SurfaceFlinger要求組合相同的緩衝區集,則HWC可以顯示以前組合的暫存緩衝區。這樣可以延長空閒設備的電池壽命。

Android設備通常支持四個覆蓋平面。嘗試合成比覆蓋層更多的層會導致系統對其中一些層使用GLES合成,這意味著應用程序使用的層數會對功耗和性能產生可衡量的影響。