La HAL del compositor de hardware (HWC) determina la forma más eficiente de componer búferes con el hardware disponible. Como HAL, su implementación es específica del dispositivo y, por lo general, la realiza el OEM del hardware de visualización.
El valor de este enfoque es fácil de reconocer cuando considera los planos superpuestos , que componen múltiples búferes en el hardware de visualización en lugar de la GPU. Por ejemplo, considere un teléfono Android típico en orientación vertical, con la barra de estado en la parte superior, la barra de navegación en la parte inferior y el contenido de la aplicación en todas partes. El contenido de cada capa está en búferes separados. Puede manejar la composición usando cualquiera de los siguientes métodos:
- Representar el contenido de la aplicación en un búfer de borrador, luego representar la barra de estado sobre él, la barra de navegación encima de eso y finalmente pasar el búfer de borrador al hardware de visualización.
- Pasar los tres búferes al hardware de visualización e indicarle que lea datos de diferentes búferes para diferentes partes de la pantalla.
El último enfoque puede ser significativamente más eficiente.
Las capacidades del procesador de pantalla varían significativamente. La cantidad de superposiciones, si las capas se pueden rotar o combinar, y las restricciones de posicionamiento y superposición pueden ser difíciles de expresar a través de una API. Para adaptarse a estas opciones, el HWC realiza los siguientes cálculos:
- SurfaceFlinger proporciona a HWC una lista completa de capas y pregunta: "¿Cómo quiere manejar esto?"
- HWC responde marcando cada capa como composición de dispositivo o cliente.
- SurfaceFlinger se encarga de cualquier cliente, pasa el búfer de salida a HWC y deja que HWC maneje el resto.
Debido a que los proveedores de hardware pueden personalizar el código de toma de decisiones, es posible obtener el mejor rendimiento de cada dispositivo.
Los planos superpuestos pueden ser menos eficientes que la composición GL cuando no cambia nada en la pantalla. Esto es particularmente cierto cuando los contenidos superpuestos tienen píxeles transparentes y las capas superpuestas se mezclan. En tales casos, el HWC puede solicitar la composición GLES para algunas o todas las capas y retener el búfer compuesto. Si SurfaceFlinger solicita componer el mismo conjunto de búferes, el HWC puede mostrar el búfer temporal compuesto anteriormente. Esto puede mejorar la duración de la batería de un dispositivo inactivo.
Los dispositivos Android suelen admitir cuatro planos superpuestos. Intentar componer más capas que superposiciones hace que el sistema use la composición GLES para algunas de ellas, lo que significa que la cantidad de capas que usa una aplicación puede tener un impacto medible en el consumo de energía y el rendimiento.