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

Начиная с Android 13, HAL Hardware Composer (HWC) определяется в AIDL , а версии HIDL от android.hardware.graphics.composer@2.1 до android.hardware.graphics.composer@2.4 считаются устаревшими.

На этой странице описаны различия между AIDL и HIDL HAL для HWC, а также реализация и тестирование AIDL HAL.

Из-за преимуществ, предлагаемых AIDL, поставщикам рекомендуется внедрить HAL композитора AIDL , начиная с Android 13, вместо версии HIDL. Дополнительную информацию смотрите в разделе «Реализация» .

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

Новый HAL композитора AIDL с именем android.hardware.graphics.composer3 определен в IComposer.aidl . It exposes an API similar to the HIDL HAL android.hardware.graphics.composer@2.4 with the following changes:

  • Удаление очереди быстрых сообщений (FMQ) в пользу пакетируемых команд.

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

    Метод executeCommands определяется в IComposerClient.aidl как

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

    где каждая команда представляет собой строго типизированный тип, определенный в DisplayCommand.aidl . Command responses are strongly typed parcelables defined in CommandResultPayload.aidl .

  • Removal of IComposerClient.getClientTargetSupport as there are no active clients for this method.

  • Представление цветов в виде чисел с плавающей запятой вместо байтов для лучшего согласования с верхним стеком графики в Android, как определено в ASurfaceTransaction_setColor .

  • Добавление новых полей для управления HDR-контентом.

    В AIDL HAL смешанные стеки слоев SDR/HDR поддерживают плавное затемнение слоев SDR, когда слой HDR одновременно отображается на экране.

    The brightness field in LayerCommand lets SurfaceFlinger specify a per-layer brightness, so that the HWC dims the layer's content in linear light space, as opposed to gamma space.

    Поле 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 .

    The expectedPresentTime field lets SurfaceFlinger set the expected present time to when the current content must be displayed on screen. Благодаря этой функции SurfaceFlinger заранее отправляет текущую команду реализации, позволяя ей конвейеризировать большую часть работы по композиции.

  • Добавление новых API для управления конфигурацией отображения загрузки.

    Используя BOOT_DISPLAY_CONFIG , поставщики могут указать, что поддерживается конфигурация отображения загрузки. Методы setBootDisplayConfig , clearBootDisplayConfig и getPreferredBootDisplayConfig используют BOOT_DISPLAY_CONFIG следующим образом:

    • Используя setBootDisplayConfig , платформа информирует поставщиков о конфигурации отображения времени загрузки. Поставщики должны кэшировать конфигурацию отображения загрузки и загружаться с этой конфигурацией при следующей перезагрузке. Если устройство не может загрузиться с этой конфигурацией, поставщик должен найти конфигурацию, соответствующую разрешению и частоте обновления этой конфигурации. Если такой конфигурации не существует, поставщику следует использовать предпочтительную конфигурацию дисплея.

    • ИспользуяclearBootDisplayConfig, платформа сообщает поставщикам о необходимости очистить конфигурацию экрана загрузки и загрузиться с clearBootDisplayConfig конфигурацией дисплея во время следующей перезагрузки.

    • Используя getPreferredBootDisplayConfig , платформа запрашивает предпочтительный режим загрузки поставщика.

    When the boot display configuration isn't supported, these methods return a value of UNSUPPORTED .

  • Добавление новых API для управления таймером простоя дисплея.

    • Using DISPLAY_IDLE_TIMER , vendors can specify that an inactivity timer is implemented by the vendor for this display. В режиме ожидания эта возможность изменяет частоту обновления на более низкое значение для экономии энергии. Платформа использует setIdleTimerEnabled для управления тайм-аутом таймера, а в некоторых случаях и для его отключения, чтобы предотвратить нежелательное переключение частоты обновления во время простоя.

    • Using the IComposerCallback.onVsyncIdle callback indicates to the platform that the display is idle and the vsync cadence has changed. The platform responds to this callback by resetting its vsync model. Он вызывает повторную синхронизацию vsync синхронизации в следующем кадре и изучает новую частоту vsync .

Выполнение

Поставщики не обязаны реализовывать AIDL HAL для Android 13. Однако им рекомендуется реализовать AIDL Composer HAL вместо версии HIDL, чтобы использовать новые функции и API.

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

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

Чтобы протестировать свою реализацию, запустите VtsHalGraphicsComposer3_TargetTest .

,

Starting in Android 13, the Hardware Composer (HWC) HAL is defined in AIDL and the HIDL versions ranging from android.hardware.graphics.composer@2.1 to android.hardware.graphics.composer@2.4 are deprecated.

На этой странице описаны различия между AIDL и HIDL HAL для HWC, а также реализация и тестирование AIDL HAL.

Из-за преимуществ, предлагаемых AIDL, поставщикам рекомендуется внедрить HAL композитора AIDL , начиная с Android 13, вместо версии HIDL. Дополнительную информацию смотрите в разделе «Реализация» .

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

Новый HAL композитора AIDL с именем 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);
    

    где каждая команда представляет собой строго типизированный тип, определенный в 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 должен затемнять контент. This accommodates vendor-defined ColorModes , which might prefer to dim in gamma space, to allow vendor-defined contrast enhancements in their color pipelines.

  • Addition of a new composition type DISPLAY_DECORATION in Composition.aidl for screen decorations.

    Некоторые устройства имеют специальное оборудование для оптимизации отрисовки альфа-маски, которая сглаживает закругленные углы и вырезы на дисплеях. Устройства с таким оборудованием должны реализовать IComposerClient.getDisplayDecorationSupport для возврата структуры DisplayDecorationSupport , как определено в новом DisplayDecorationSupport.aidl . Эта структура описывает перечисления PixelFormat и AlphaInterpretation , необходимые устройству. Upon this implementation, System UI marks the alpha mask layer as DISPLAY_DECORATION , a new composition type that takes advantage of the dedicated hardware.

  • Добавление нового поля expectedPresentTime в DisplayCommand.aidl .

    Поле expectedPresentTime позволяет SurfaceFlinger установить ожидаемое настоящее время, когда текущий контент должен отображаться на экране. Благодаря этой функции SurfaceFlinger заранее отправляет текущую команду реализации, позволяя ей конвейеризировать большую часть работы по композиции.

  • Добавление новых API для управления конфигурацией отображения загрузки.

    Используя BOOT_DISPLAY_CONFIG , поставщики могут указать, что поддерживается конфигурация отображения загрузки. Методы setBootDisplayConfig , clearBootDisplayConfig и getPreferredBootDisplayConfig используют BOOT_DISPLAY_CONFIG следующим образом:

    • Using setBootDisplayConfig , the framework informs vendors of the boot time display configuration. Поставщики должны кэшировать конфигурацию отображения загрузки и загружаться с этой конфигурацией при следующей перезагрузке. Если устройство не может загрузиться с этой конфигурацией, поставщик должен найти конфигурацию, соответствующую разрешению и частоте обновления этой конфигурации. Если такой конфигурации не существует, поставщику следует использовать предпочтительную конфигурацию дисплея.

    • ИспользуяclearBootDisplayConfig, платформа сообщает поставщикам о необходимости очистить конфигурацию экрана загрузки и загрузиться с clearBootDisplayConfig конфигурацией дисплея во время следующей перезагрузки.

    • Используя getPreferredBootDisplayConfig , платформа запрашивает предпочтительный режим загрузки поставщика.

    Если конфигурация отображения загрузки не поддерживается, эти методы возвращают значение UNSUPPORTED .

  • Добавление новых API для управления таймером простоя дисплея.

    • Используя DISPLAY_IDLE_TIMER , поставщики могут указать, что для этого дисплея поставщиком реализован таймер неактивности. В режиме ожидания эта возможность изменяет частоту обновления на более низкое значение для экономии энергии. Платформа использует setIdleTimerEnabled для управления таймаутом таймера, а в некоторых случаях и для его отключения, чтобы предотвратить нежелательное переключение частоты обновления во время простоя.

    • Использование обратного вызова IComposerCallback.onVsyncIdle указывает платформе, что дисплей находится в режиме ожидания и частота vsync синхронизации изменилась. Платформа отвечает на этот обратный вызов, сбросив свою модель vsync . Это заставляет vsync Resync на следующем кадре и изучает новую каденцию vsync .

Выполнение

Vendors aren't required to implement the AIDL HAL for Android 13. However, they're encouraged to implement the AIDL composer HAL instead of the HIDL version to use the new functionality and APIs.

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

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

Чтобы протестировать свою реализацию, запустите VtsHalGraphicsComposer3_TargetTest .

,

Starting in Android 13, the Hardware Composer (HWC) HAL is defined in AIDL and the HIDL versions ranging from android.hardware.graphics.composer@2.1 to android.hardware.graphics.composer@2.4 are deprecated.

На этой странице описаны различия между AIDL и HIDL HAL для HWC, а также реализация и тестирование AIDL HAL.

Из-за преимуществ, предлагаемых AIDL, поставщикам рекомендуется внедрить HAL композитора AIDL , начиная с Android 13, вместо версии HIDL. Дополнительную информацию смотрите в разделе «Реализация» .

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

Новый HAL композитора AIDL с именем 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);
    

    where each command is a strongly typed parcelable type defined in 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 , которые могут предпочесть затемнение в гамма-пространстве, чтобы обеспечить определяемое поставщиком улучшение контрастности в своих цветовых конвейерах.

  • Addition of a new composition type DISPLAY_DECORATION in Composition.aidl for screen decorations.

    Некоторые устройства имеют специальное оборудование для оптимизации отрисовки альфа-маски, которая сглаживает закругленные углы и вырезы на дисплеях. Устройства с таким оборудованием должны реализовать 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 , платформа информирует поставщиков о конфигурации отображения времени загрузки. Поставщики должны кэшировать конфигурацию отображения загрузки и загружаться с этой конфигурацией при следующей перезагрузке. Если устройство не может загрузиться с этой конфигурацией, поставщик должен найти конфигурацию, соответствующую разрешению и частоте обновления этой конфигурации. Если такой конфигурации не существует, поставщику следует использовать предпочтительную конфигурацию дисплея.

    • Using clearBootDisplayConfig , the framework informs the vendors to clear the boot display configuration, and boot in their preferred display config during the next reboot.

    • Using getPreferredBootDisplayConfig , the framework queries the vendor's preferred boot mode.

    When the boot display configuration isn't supported, these methods return a value of UNSUPPORTED .

  • Добавление новых API для управления таймером простоя дисплея.

    • Используя DISPLAY_IDLE_TIMER , поставщики могут указать, что для этого дисплея поставщиком реализован таймер неактивности. В режиме ожидания эта возможность изменяет частоту обновления на более низкое значение для экономии энергии. The platform uses setIdleTimerEnabled to control the timeout of the timer, and in some cases, to disable it in order to prevent undesired refresh rate switches when idle.

    • Использование обратного вызова IComposerCallback.onVsyncIdle указывает платформе, что дисплей находится в режиме ожидания и частота vsync синхронизации изменилась. The platform responds to this callback by resetting its vsync model. Он вызывает повторную синхронизацию vsync синхронизации в следующем кадре и изучает новую частоту vsync .

Выполнение

Поставщики не обязаны реализовывать AIDL HAL для Android 13. Однако им рекомендуется реализовать AIDL Composer HAL вместо версии HIDL, чтобы использовать новые функции и API.

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

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

Чтобы протестировать свою реализацию, запустите VtsHalGraphicsComposer3_TargetTest .