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