自 Android 13 起,Hardware Composer (HWC) HAL 的定義如下:
AIDL 和 HIDL 版本
android.hardware.graphics.composer@2.1
到
android.hardware.graphics.composer@2.4
已淘汰。
本頁面說明 AIDL 與 HIDL HAL 之間的差異 HWC 以及 AIDL HAL 的實作與測試。
由於 優勢 建議供應商將 AIDL 作曲家 HAL 已開始 Android 13,而非 HIDL 版本。詳情請參閱 導入一節。
AIDL 與 HIDL HAL 的差異
新的 AIDL 作曲家 HAL (名為 android.hardware.graphics.composer3
) 是
在 IComposer.aidl
中定義的。
這個程式庫公開了與 HIDL HAL 類似的 API
android.hardware.graphics.composer@2.4
,進行以下變更:
移除快速訊息佇列 (FMQ): 建議使用 parcelable 指令
AIDL HAL 會根據強類型輸入來定義指令介面 可包裝的型別,而不是 HIDL 中針對 FMQ 的序列化指令。這個 提供了穩定的指令介面,以及更容易理解的指令定義 指令酬載
executeCommands
方法定義於IComposerClient.aidl
為CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
其中每個指令都是
DisplayCommand.aidl
。 指令回應是強式輸入 parcelable,其定義如下:CommandResultPayload.aidl
。移除
IComposerClient.getClientTargetSupport
,因為此方法沒有有效的用戶端。以浮點值 (而非位元組) 表示顏色,以便更有效地對齊 Android 中的上方圖形堆疊 (如
ASurfaceTransaction_setColor
所定義)。新增控制 HDR 內容的新欄位。
在 AIDL HAL 中,混合 SDR/HDR 層堆疊支援流暢調暗 螢幕同時顯示 HDR 層時,形成 SDR 層。
LayerCommand
中的brightness
欄位 讓 SurfaceFlinger 指定每個層次的亮度,讓 HWC 調暗 顯示疊加內容的內容與伽瑪空間。ClientTargetPropertyWithBrightness
中的brightness
欄位 HWC 可指定用戶端組合的亮度空間,以及 指示RenderEngine
是否要調暗用戶端組成中的 SDR 層。dimmingStage
欄位可讓 HWC 設定RenderEngine
應調暗內容的時機。這個 包含供應商定義的ColorModes
,且可能偏好在 Gamma 中調暗 空間,以在其色彩管道中允許廠商定義的對比強化。在以下位置加入新的組合類型
DISPLAY_DECORATION
Composition.aidl
。部分裝置搭載專屬硬體,可將繪製的 Alpha 遮罩最佳化 螢幕呈現光滑圓角和凹口。搭載這類硬體的裝置必須 導入
IComposerClient.getDisplayDecorationSupport
這樣系統就會傳回新的DisplayDecorationSupport
結構DisplayDecorationSupport.aidl
。 這個結構描述了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 使用新功能和 API,而非 HIDL 版本。
參照導入 AIDL HWC HAL 已於 Android 模擬器中實作。
測試
如要測試實作結果,請執行 VtsHalGraphicsComposer3_TargetTest
。