從 Android 13 開始,硬體編寫工具 (HWC) HAL 會在 AIDL 中定義,android.hardware.graphics.composer@2.1
到 android.hardware.graphics.composer@2.4
的 HIDL 版本已淘汰。
本頁說明 HWC 的 AIDL 和 HIDL HAL 之間的差異,以及 AIDL HAL 的實作和測試。
由於 AIDL 提供優勢,因此建議供應商從 Android 13 開始實作 AIDL 作曲家 HAL,而非 HIDL 版本。詳情請參閱「實作」一節。
AIDL 和 HIDL HAL 的差異
新的 AIDL 編寫器 HAL (名為 android.hardware.graphics.composer3
) 已在 IComposer.aidl
中定義。它會公開類似於 HIDL HAL android.hardware.graphics.composer@2.4
的 API,並且具有以下變更:
移除快速訊息佇列 (FMQ),改用可分割的命令。
AIDL HAL 會根據強型別可分割類型定義指令介面,而非 HIDL 中透過 FMQ 的序列化指令。這可為指令提供穩定的介面,並提供更易讀的定義,說明如何解讀指令酬載。
executeCommands
方法在IComposerClient.aidl
中定義為CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
其中每個指令都是在
DisplayCommand.aidl
中定義的強型別可分割類型。指令回應是CommandResultPayload.aidl
中定義的強型別 parcelable。移除
IComposerClient.getClientTargetSupport
,因為這個方法沒有任何有效的用戶端。以浮點值而非位元組呈現顏色,以便與
ASurfaceTransaction_setColor
中定義的 Android 上層圖形堆疊相符。新增用於控制 HDR 內容的新欄位。
在 AIDL HAL 中,混合 SDR/HDR 層堆疊可在 HDR 層同時顯示在畫面上時,支援 SDR 層的無縫調光功能。
LayerCommand
中的brightness
欄位可讓 SurfaceFlinger 指定每個圖層的亮度,讓 HWC 在線性亮度空間中調暗圖層內容,而非在伽瑪空間中調暗。ClientTargetPropertyWithBrightness
中的brightness
欄位可讓 HWC 指定用戶端組合的亮度空間,並指示RenderEngine
是否要在用戶端組合中調暗 SDR 圖層。dimmingStage
欄位可讓 HWC 設定RenderEngine
應在何時調低內容亮度。這可支援供應商定義的ColorModes
,該值可能會在伽瑪空間中變暗,以便在顏色管道中允許供應商定義的對比強化功能。在
Composition.aidl
中新增可組合項類型DISPLAY_DECORATION
,用於畫面裝飾。部分裝置有專用硬體,可針對繪製的 Alpha 遮罩進行最佳化,讓螢幕上的圓角和缺口更為平滑。搭載這類硬體的裝置必須實作
IComposerClient.getDisplayDecorationSupport
,才能依照新DisplayDecorationSupport.aidl
的定義,傳回DisplayDecorationSupport
結構。這個結構描述裝置所需的PixelFormat
和AlphaInterpretation
列舉。在這個實作項目中,系統 UI 會將 Alpha 遮罩層標示為DISPLAY_DECORATION
,這是一種可充分利用專屬硬體的新組合類型。將新的
expectedPresentTime
欄位新增至DisplayCommand.aidl
。expectedPresentTime
欄位可讓 SurfaceFlinger 將預期的現在時間設為目前內容必須顯示在螢幕上的時間。有了這項功能,SurfaceFlinger 就能提前將呈現指令傳送至實作,讓其能管線更多合成作業。新增 API 以控制啟動螢幕設定。
供應商可以使用
BOOT_DISPLAY_CONFIG
指定支援的開機顯示設定。setBootDisplayConfig
、clearBootDisplayConfig
和getPreferredBootDisplayConfig
方法使用BOOT_DISPLAY_CONFIG
,如下所示:使用
setBootDisplayConfig
,架構會通知供應商啟動時間顯示設定。供應商必須在啟動顯示設定中快取,並在下次重新啟動時啟動此設定。如果裝置無法在這個設定中啟動,供應商必須找出與這個設定的解析度和更新率相符的設定。如果沒有這類設定,供應商應使用偏好的顯示設定。使用
clearBootDisplayConfig
,架構會通知供應商清除啟動螢幕設定,並在下次重新啟動時以供應商偏好的螢幕設定啟動。使用
getPreferredBootDisplayConfig
,架構會查詢供應商偏好的啟動模式。
如果不支援啟動顯示設定,這些方法會傳回
UNSUPPORTED
的值。新增 API 以控制螢幕閒置計時器。
供應商可以使用
DISPLAY_IDLE_TIMER
,指定供應商為此顯示器實作閒置計時器。在閒置時,這項功能會將更新率變更為較低的設定,以節省電力。平台會使用setIdleTimerEnabled
控制計時器的逾時時間,並在某些情況下停用該計時器,以免在閒置時發生不必要的螢幕更新率切換。使用
IComposerCallback.onVsyncIdle
回呼,可向平台指出螢幕處於閒置狀態,且vsync
節拍已變更。平台會回應此回呼,藉此重設vsync
模型。這會在下一個影格上強制重新同步vsync
,並學習新的vsync
節奏。
實作
廠商不必為 Android 13 實作 AIDL HAL。不過,建議您實作 AIDL 編寫器 HAL,而非 HIDL 版本,以便使用新功能和 API。
在 Android 模擬器中實作 AIDL HWC HAL 的參考實作項目。
測試
如要測試導入作業,請執行 VtsHalGraphicsComposer3_TargetTest
。