Начиная с Android 13, HAL-компонент Hardware Composer (HWC) определён в AIDL . Версии HIDL от android.hardware.graphics.composer@2.1 до android.hardware.graphics.composer@2.4 устарели.
На этой странице описываются различия между HAL AIDL и HIDL для HWC, а также порядок реализации и тестирования HAL AIDL.
Поскольку AIDL предлагает преимущества , поставщики могут реализовать AIDL Composer HAL, начиная с Android 13, вместо версии HIDL. Подробнее см. в разделе «Реализация» .
Различия между HAL AIDL и HIDL
Новый HAL-компонент AIDL, названный android.hardware.graphics.composer3 , определён в IComposer.aidl . API аналогичен HAL-компоненту HIDL android.hardware.graphics.composer@2.4 , но включает следующие изменения:
Удаление быстрой очереди сообщений (FMQ) в пользу пакетируемых команд.
AIDL HAL определяет командный интерфейс на основе строго типизированных парцеллятивных типов вместо сериализованных команд через FMQ в HIDL. Это обеспечивает стабильный интерфейс для команд и более понятное описание того, как система интерпретирует полезную нагрузку команд.
Метод
executeCommands5 определен в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поля PresentTime в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 Composer HAL.
Эмуляторы Android включают в себя эталонную реализацию AIDL HWC HAL.
Тестирование
Чтобы протестировать реализацию, запустите VtsHalGraphicsComposer3_TargetTest .