Начиная с 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, поставщикам рекомендуется внедрять AIDL composer HAL, начиная с Android 13, вместо версии HIDL. Более подробную информацию см. в разделе «Внедрение» .
Различия между HAL AIDL и HIDL
Новый AIDL composer HAL, названный 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);
где каждая команда — это строго типизированный parcelable тип, определенный в
DisplayCommand.aidl
. Ответы команд — это строго типизированные parcelables, определенные в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
, требуемые устройством. После этой реализации System UI помечает слой альфа-маски какDISPLAY_DECORATION
, новый тип композиции, который использует преимущества выделенного оборудования.Добавление нового поля
expectedPresentTime
вDisplayCommand.aidl
.Поле
expectedPresentTime
позволяет SurfaceFlinger устанавливать ожидаемое настоящее время, когда текущий контент должен быть отображен на экране. С помощью этой функции SurfaceFlinger отправляет команду present реализации заранее, что позволяет ей выполнять большую часть работы по композиции.Добавление новых 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
.