HAL do Hardware Composer

A HAL do Hardware Composer (HWC) determina a maneira mais eficiente de combinar buffers com o hardware disponível. Como uma HAL, a implementação é específica do dispositivo e geralmente feita pelo OEM de hardware de tela.

O valor dessa abordagem é fácil de reconhecer quando você considera planos de sobreposição, que combinam vários buffers no hardware de exibição em vez da GPU. Por exemplo, considere um smartphone Android típico na orientação retrato, com a barra de status na parte de cima, a barra de navegação na parte de baixo e o conteúdo do app em todo o resto. O conteúdo de cada camada está em buffers separados. É possível processar a composição usando um dos seguintes métodos:

  • Renderizar o conteúdo do app em um buffer de trabalho, depois renderizar a barra de status sobre ele, a barra de navegação acima e, por fim, transmitir o buffer de trabalho ao hardware de exibição.
  • Passar todos os três buffers para o hardware de exibição e instruir a leitura de dados de buffers diferentes para diferentes partes da tela.

A última abordagem pode ser muito mais eficiente.

As capacidades do processador de tela variam muito. O número de sobreposições, a possibilidade de rotação ou combinação de camadas e as restrições de posicionamento e sobreposição podem ser difíceis de expressar por uma API. Para acomodar essas opções, o HWC realiza os seguintes cálculos:

  1. O SurfaceFlinger fornece ao HWC uma lista completa de camadas e pergunta: "Como você quer processar isso?"
  2. O HWC responde marcando cada camada como composição de dispositivo ou cliente.
  3. O SurfaceFlinger cuida de qualquer cliente, transmitindo o buffer de saída para o HWC, que processa o restante.

Como os fornecedores de hardware podem personalizar o código de tomada de decisões, é possível extrair a melhor performance de cada dispositivo.

Os planos de sobreposição podem ser menos eficientes do que a composição do GL quando nada na tela está mudando. Isso é especialmente verdadeiro quando os conteúdos de sobreposição têm pixels transparentes e as camadas sobrepostas são combinadas. Nesses casos, o HWC pode solicitar a composição do GLES para algumas ou todas as camadas e reter o buffer composto. Se o SurfaceFlinger pedir para compor o mesmo conjunto de buffers, o HWC poderá mostrar o buffer de scratch composto anteriormente. Isso pode melhorar a duração da bateria de um dispositivo inativo.

Os dispositivos Android geralmente oferecem suporte a quatro planos de sobreposição. A tentativa de compor mais camadas do que sobreposições faz com que o sistema use a composição GLES para algumas delas. Isso significa que o número de camadas usadas por um app pode ter um impacto mensurável no consumo de energia e no desempenho.