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, начиная с Android 13, разработчики могут использовать HAL AIDL Composer вместо версии HIDL. Дополнительную информацию см. в разделе «Реализация» .

Различия между AIDL и HIDL HAL.

Новый компонент AIDL Composer HAL, получивший название android.hardware.graphics.composer3 , определен в IComposer.aidl . API аналогичен компоненту HIDL HAL android.hardware.graphics.composer@2.4 , но включает следующие изменения:

  • Замена быстрой очереди сообщений (FMQ) на команды, допускающие отправку по частям.

    В AIDL HAL интерфейс команд определяется на основе строго типизированных типов, допускающих разделение на части, вместо сериализованных команд по FMQ, используемых в HIDL. Это обеспечивает стабильный интерфейс для команд и более читабельное определение того, как система интерпретирует полезную нагрузку команды.

    Метод executeCommands 5 определен в IComposerClient.aidl :

    CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
    

    Каждая команда представляет собой строго типизированный объект типа Parcelable, определенный в файле DisplayCommand.aidl . Ответы на команды представляют собой строго типизированные объекты типа Parcelable, определенные в 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 Composer HAL.

В состав эмуляторов Android входит эталонная реализация AIDL HWC HAL.

Тестирование

Для проверки вашей реализации запустите VtsHalGraphicsComposer3_TargetTest .