Hardware Composer HAL 適用的 AIDL

自 Android 13 起,Hardware Composer (HWC) HAL 的定義如下: AIDL 和 HIDL 版本 android.hardware.graphics.composer@2.1android.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。 這個結構描述了 PixelFormatAlphaInterpretation 列舉的裝置所需的列舉。在此實作時,系統 UI 會標記 Alpha 遮罩圖層做為 DISPLAY_DECORATION 這是利用專屬硬體的新組合類型。

  • 新增 expectedPresentTime 新增至 DisplayCommand.aidl

    expectedPresentTime 欄位可讓 SurfaceFlinger 設定 才是目前內容必須顯示在畫面上的時間。使用這項 因此 SurfaceFlinger 會在 進而處理更多組合工作

  • 新增用於控制開機顯示設定的新 API。

    使用 BOOT_DISPLAY_CONFIG, 供應商可以指定系統支援開機顯示設定。 setBootDisplayConfigclearBootDisplayConfig、 和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