Начиная с Android 13, HAL Hardware Composer (HWC) определяется в AIDL , а версии HIDL от android.hardware.graphics.composer@2.1
до android.hardware.graphics.composer@2.4
считаются устаревшими.
На этой странице описаны различия между AIDL и HIDL HAL для HWC, а также реализация и тестирование AIDL HAL.
Из-за преимуществ , предлагаемых AIDL, поставщикам рекомендуется внедрить HAL композитора AIDL, начиная с Android 13, вместо версии HIDL. Дополнительную информацию смотрите в разделе «Реализация» .
Различия между AIDL и HIDL HAL
Новый HAL композитора AIDL с именем android.hardware.graphics.composer3
определен в IComposer.aidl
. Он предоставляет API, аналогичный HIDL HAL android.hardware.graphics.composer@2.4
, со следующими изменениями:
Удаление очереди быстрых сообщений (FMQ) в пользу пакетируемых команд.
AIDL HAL определяет командный интерфейс на основе строго типизированных типов, в отличие от сериализованных команд через FMQ в HIDL. Это обеспечивает стабильный интерфейс для команд и более удобочитаемое определение того, как интерпретируется полезная нагрузка команды.
Метод
executeCommands
определен вIComposerClient.aidl
какCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
где каждая команда представляет собой строго типизированный тип, определенный в
DisplayCommand.aidl
. Ответы на команды представляют собой строго типизированные объекты, определенные вCommandResultPayload.aidl
.Удаление
IComposerClient.getClientTargetSupport
, так как для этого метода нет активных клиентов.Представление цветов в виде чисел с плавающей запятой вместо байтов для лучшего согласования с верхним стеком графики в Android, как определено в
ASurfaceTransaction_setColor
.Добавление новых полей для управления HDR-контентом.
В AIDL HAL смешанные стеки слоев SDR/HDR поддерживают плавное затемнение слоев SDR, когда слой HDR одновременно отображается на экране.
Поле
brightness
вLayerCommand
позволяет SurfaceFlinger указать яркость для каждого слоя, так что HWC затемняет содержимое слоя в линейном световом пространстве, а не в гамма-пространстве.Поле
brightness
вClientTargetPropertyWithBrightness
позволяет HWC указать пространство яркости для композиции клиента и указатьRenderEngine
нужно ли затемнять слои SDR в композиции клиента.Поле
dimmingStage
позволяет HWC настроить, когдаRenderEngine
должен затемнять контент. Это учитывает определяемые поставщикомColorModes
, которые могут предпочесть затемнение в гамма-пространстве, чтобы обеспечить определяемое поставщиком улучшение контрастности в своих цветовых конвейерах.Добавлен новый тип композиции
DISPLAY_DECORATION
вComposition.aidl
для оформления экрана.Некоторые устройства имеют специальное оборудование для оптимизации отрисовки альфа-маски, которая сглаживает закругленные углы и вырезы на дисплеях. Устройства с таким оборудованием должны реализовать
IComposerClient.getDisplayDecorationSupport
для возврата структурыDisplayDecorationSupport
, как определено в новомDisplayDecorationSupport.aidl
. Эта структура описывает перечисленияPixelFormat
иAlphaInterpretation
, необходимые устройству. В этой реализации системный пользовательский интерфейс помечает слой альфа-маски как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
.
Выполнение
Поставщики не обязаны реализовывать AIDL HAL для Android 13. Однако им рекомендуется реализовать AIDL Composer HAL вместо версии HIDL, чтобы использовать новые функции и API.
Эталонная реализация AIDL HWC HAL реализована в эмуляторах Android.
Тестирование
Чтобы протестировать свою реализацию, запустите VtsHalGraphicsComposer3_TargetTest
.