A partir de Android 13, la HAL de Hardware Composer (HWC) se define en
AIDL y las versiones HIDL desde
De android.hardware.graphics.composer@2.1
a
android.hardware.graphics.composer@2.4
dejaron de estar disponibles.
En esta página, se describen las diferencias entre el AIDL y la HAL de HIDL de la HWC y la implementación y prueba de la HAL del AIDL.
Debido a la de ventajas que ofrece el AIDL se anima a los proveedores a implementar el Iniciando la HAL del compositor AIDL Android 13 en lugar de la versión HIDL Consulta la Implementación para obtener más información.
Diferencias entre las HAL del AIDL y las HAL de HIDL
La nueva HAL del compositor del AIDL, llamada android.hardware.graphics.composer3
, es
definido en IComposer.aidl
.
Expone una API similar a la HAL de HIDL
android.hardware.graphics.composer@2.4
con los siguientes cambios:
Eliminación de la cola de mensajes rápidos (FMQ) en a favor de comandos parcelables.
La HAL del AIDL define la interfaz de comandos en función los tipos parcelables a diferencia de los comandos serializados en FMQ en HIDL. Esta proporciona una interfaz estable para los comandos y una definición más legible de cómo se interpreta la carga útil del comando.
La
executeCommands
se define enIComposerClient.aidl
comoCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
donde cada comando es un tipo parcelable fuertemente definido que se define en
DisplayCommand.aidl
Las respuestas de comando son parcelables con tipado fuerte que se definen enCommandResultPayload.aidl
Se quitó
IComposerClient.getClientTargetSupport
porque no hay clientes activos para este método.Representación de colores como números de punto flotante en lugar de bytes para alinearse mejor con el pila de gráficos superiores en Android, como se define en
ASurfaceTransaction_setColor
Se agregaron campos nuevos para controlar el contenido HDR.
En la HAL del AIDL, las pilas combinadas de capas SDR/HDR admiten la atenuación continua de Capas de SDR cuando una capa HDR aparece simultáneamente en la pantalla.
El campo
brightness
enLayerCommand
permite que SurfaceFlinger especifique un brillo por capa, de modo que HWC atenúe la del espacio en el espacio luminoso lineal, en lugar del espacio gamma.El campo
brightness
enClientTargetPropertyWithBrightness
permite que el HWC especifique el espacio de brillo para la composición del cliente y para instruirRenderEngine
si se atenúan las capas de SDR en la composición del cliente.La
dimmingStage
permite que el HWC configure cuándoRenderEngine
debe atenuar el contenido. Esta admiteColorModes
definidos por el proveedor, que podrían preferir atenuar en gamma para permitir mejoras de contraste definidas por el proveedor en sus canalizaciones de color.Se agregó un nuevo tipo de composición
DISPLAY_DECORATION
enComposition.aidl
para la decoración de la pantalla.Algunos dispositivos tienen hardware dedicado para optimizar el dibujo suaviza las esquinas redondeadas y los cortes en pantallas. Los dispositivos con este tipo de hardware deben implementar
IComposerClient.getDisplayDecorationSupport
para mostrar una estructuraDisplayDecorationSupport
, como se define en el nuevoDisplayDecorationSupport.aidl
Esta estructura describe el objetoPixelFormat
yAlphaInterpretation
enums que requiere el dispositivo. Después de esta implementación, la IU del sistema marca el capa de máscara alfa comoDISPLAY_DECORATION
, un nuevo tipo de composición que aprovecha el hardware dedicado.Adición de un
expectedPresentTime
nuevo enDisplayCommand.aidl
.El campo
expectedPresentTime
permite que SurfaceFlinger establezca la el momento actual hasta el momento en que el contenido actual debe aparecer en pantalla. Con este SurfaceFlinger envía un comando de presentación a la implementación antes de lo que le permite canalizar más del trabajo de composición.Se agregaron nuevas APIs para controlar la configuración de la pantalla de inicio.
Con
BOOT_DISPLAY_CONFIG
, los proveedores pueden especificar que se admita la configuración de la pantalla de inicio. ElsetBootDisplayConfig
:clearBootDisplayConfig
, ygetPreferredBootDisplayConfig
usanBOOT_DISPLAY_CONFIG
de la siguiente manera:Con
setBootDisplayConfig
, el framework informa a los proveedores sobre la configuración de la pantalla de tiempo de inicio. Proveedores debe almacenarse en caché en la configuración de pantalla de inicio, y se iniciará con esta configuración el siguiente reiniciar. Si el dispositivo no puede iniciarse con esta configuración, el proveedor debe encontrar un que coincida con la resolución y la frecuencia de actualización de esta configuración. Si no existe existente, el proveedor debería usar su configuración de visualización preferida.Con
clearBootDisplayConfig
, el framework informa a los proveedores que borren la configuración de la pantalla de inicio en su configuración de visualización preferida durante el próximo reinicio.Con
getPreferredBootDisplayConfig
, el framework consulta el modo de inicio preferido del proveedor.
Cuando no se admite la configuración de la pantalla de inicio, estos métodos muestran un valor de
UNSUPPORTED
.Se agregaron nuevas APIs para controlar el temporizador de inactividad de la pantalla.
Con
DISPLAY_IDLE_TIMER
, los proveedores pueden especificar que el proveedor implemente un temporizador de inactividad para esta pantalla. Cuando está inactiva, esta función cambia la frecuencia de actualización a un menor para ahorrar energía. La plataforma usasetIdleTimerEnabled
para controlar el tiempo de espera del temporizador y, en algunos casos, para inhabilitarlo para evitar cambios de frecuencia de actualización no deseados cuando el dispositivo esté inactivo.Con
IComposerCallback.onVsyncIdle
La devolución de llamada le indica a la plataforma que la pantalla está inactiva y elvsync
cambió la cadencia. La plataforma responde a esta devolución de llamada restablecendo suvsync
. Fuerza una resincronización devsync
en el siguiente fotograma y aprende el nuevo Cadencia devsync
.
Implementación
Los proveedores no necesitan implementar la HAL del AIDL para Android 13. Sin embargo, se recomienda que implementes el AIDL HAL del compositor en lugar de la versión HIDL para usar la funcionalidad y las APIs nuevas.
Una implementación de referencia para la HAL de HWC del AIDL se implementa en emuladores de Android.
Prueba
Para probar tu implementación, ejecuta VtsHalGraphicsComposer3_TargetTest
.