AIDL для аппаратного компоновщика HAL

Начиная с 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. Это обеспечивает стабильный интерфейс для команд и более понятное описание того, как система интерпретирует полезную нагрузку команд.

    Метод executeCommands 5 определен в 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 .