A partir de Android 13, el HAL del compositor de hardware (HWC) se define en AIDL y las versiones HIDL que van desde android.hardware.graphics.composer@2.1
hasta android.hardware.graphics.composer@2.4
están en desuso.
Esta página describe las diferencias entre AIDL y HIDL HAL para HWC y la implementación y prueba de AIDL HAL.
Debido a las ventajas que ofrece AIDL, se recomienda a los proveedores que implementen el compositor HAL de AIDL a partir de Android 13 en lugar de la versión HIDL. Consulte la sección Implementación para obtener más información.
Diferencias entre AIDL y HIDL HAL
El nuevo compositor AIDL HAL, denominado android.hardware.graphics.composer3
, se define en IComposer.aidl
. Expone una API similar a HIDL HAL android.hardware.graphics.composer@2.4
con los siguientes cambios:
Eliminación de Fast Message Queue (FMQ) en favor de comandos parcelables.
AIDL HAL define la interfaz de comando basada en tipos parcelables fuertemente tipados en contraposición a los comandos serializados sobre FMQ en HIDL. Esto proporciona una interfaz estable para los comandos y una definición más legible de cómo se interpreta la carga útil del comando.
El método
executeCommands
se define enIComposerClient.aidl
comoCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
donde cada comando es un tipo parcelable fuertemente tipado definido en
DisplayCommand.aidl
. Las respuestas de comando son parcelables fuertemente tipados definidos enCommandResultPayload.aidl
.Eliminación de
IComposerClient.getClientTargetSupport
ya que no hay clientes activos para este método.Representación de colores como flotantes en lugar de bytes para alinearse mejor con la pila de gráficos superior en Android como se define en
ASurfaceTransaction_setColor
.Adición de nuevos campos para controlar el contenido HDR.
En AIDL HAL, las pilas de capas mixtas SDR/HDR admiten la atenuación perfecta de las capas SDR cuando una capa HDR está simultáneamente en la pantalla.
El campo
brightness
enLayerCommand
permite a SurfaceFlinger especificar un brillo por capa, de modo que el HWC atenúa el contenido de la capa en un espacio de luz lineal, a diferencia del espacio gamma.El campo
brightness
enClientTargetPropertyWithBrightness
permite que el HWC especifique el espacio de brillo para la composición del cliente e indiqueRenderEngine
si debe atenuar las capas SDR en la composición del cliente.El campo
dimmingStage
permite que el HWC configure cuándoRenderEngine
debe atenuar el contenido. Esto se adapta aColorModes
definidos por el proveedor, que podrían preferir atenuarse en el espacio gamma, para permitir mejoras de contraste definidas por el proveedor en sus canales de color.Adición de un nuevo tipo de composición
DISPLAY_DECORATION
enComposition.aidl
para decoraciones de pantalla.Algunos dispositivos tienen hardware dedicado para optimizar el dibujo de la máscara alfa que suaviza las esquinas redondeadas y los recortes en las pantallas. Los dispositivos con dicho hardware deben implementar
IComposerClient.getDisplayDecorationSupport
para devolver una estructuraDisplayDecorationSupport
como se define en el nuevoDisplayDecorationSupport.aidl
. Esta estructura describe las enumeracionesPixelFormat
yAlphaInterpretation
requeridas por el dispositivo. Tras esta implementación, la interfaz de usuario del sistema marca la capa de máscara alfa comoDISPLAY_DECORATION
, un nuevo tipo de composición que aprovecha el hardware dedicado.Adición de un nuevo campo
expectedPresentTime
aDisplayCommand.aidl
.El campo
expectedPresentTime
permite a SurfaceFlinger establecer la hora presente esperada en la que se debe mostrar el contenido actual en la pantalla. Con esta característica, SurfaceFlinger envía un comando presente a la implementación con anticipación, lo que le permite canalizar más trabajo de composición.Adición de nuevas API para controlar la configuración de visualización de inicio.
Usando
BOOT_DISPLAY_CONFIG
, los proveedores pueden especificar que la configuración de pantalla de inicio sea compatible. Los métodossetBootDisplayConfig
,clearBootDisplayConfig
ygetPreferredBootDisplayConfig
usanBOOT_DISPLAY_CONFIG
de la siguiente manera:Utilizando
setBootDisplayConfig
, el marco informa a los proveedores sobre la configuración de visualización del tiempo de arranque. Los proveedores deben almacenar en caché la configuración de pantalla de inicio e iniciar en esta configuración en el próximo reinicio. Si el dispositivo no puede iniciarse en esta configuración, el proveedor debe encontrar una configuración que coincida con la resolución y la frecuencia de actualización de esta configuración. Si no existe dicha configuración, el proveedor debe utilizar su configuración de pantalla preferida.Al utilizar
clearBootDisplayConfig
, el marco informa a los proveedores que borre la configuración de la pantalla de inicio y arranque en su configuración de pantalla preferida durante el próximo reinicio.Usando
getPreferredBootDisplayConfig
, el marco consulta el modo de inicio preferido del proveedor.
Cuando la configuración de visualización de inicio no es compatible, estos métodos devuelven un valor de
UNSUPPORTED
.Adición de nuevas API para controlar el temporizador de inactividad de la pantalla.
Al utilizar
DISPLAY_IDLE_TIMER
, los proveedores pueden especificar que el proveedor implemente un temporizador de inactividad para esta pantalla. Cuando está inactiva, esta capacidad cambia la frecuencia de actualización a una configuración más baja para preservar la energía. La plataforma utilizasetIdleTimerEnabled
para controlar el tiempo de espera del temporizador y, en algunos casos, para deshabilitarlo para evitar cambios no deseados en la frecuencia de actualización cuando está inactivo.El uso de la devolución de llamada
IComposerCallback.onVsyncIdle
indica a la plataforma que la pantalla está inactiva y que la cadenciavsync
ha cambiado. La plataforma responde a esta devolución de llamada restableciendo su modelovsync
. Fuerza una resincronizaciónvsync
en el siguiente fotograma y aprende la nueva cadenciavsync
.
Implementación
Los proveedores no están obligados a implementar AIDL HAL para Android 13. Sin embargo, se les recomienda implementar el compositor AIDL HAL en lugar de la versión HIDL para utilizar la nueva funcionalidad y API.
Se implementa una implementación de referencia para AIDL HWC HAL en emuladores de Android.
Pruebas
Para probar su implementación, ejecute VtsHalGraphicsComposer3_TargetTest
.