HAL do Hardware Composer

A HAL do Hardware Composer (HWC) determina a maneira mais eficiente de compor buffers com o hardware disponível. Como uma HAL, a implementação é específica do dispositivo e geralmente é feita pelo OEM do hardware da 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 todos os outros lugares. 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 rascunho, depois renderizar a barra de status sobre ele, a barra de navegação acima disso e, por fim, transmitir o buffer de rascunho para o hardware de exibição.
  • Transmitir os três buffers para o hardware de exibição e instruí-lo a ler dados de diferentes buffers para diferentes partes da tela.

A segunda abordagem pode ser muito mais eficiente.

Os recursos do processador de exibição variam bastante. O número de sobreposições, se as camadas podem ser giradas ou mescladas, e as restrições de posicionamento e sobreposição podem ser difíceis de expressar por uma API. Para acomodar essas opções, a 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 e deixando que ele cuide do restante.

Como os fornecedores de hardware podem personalizar o código de tomada de decisões, é possível extrair o melhor desempenho de todos os dispositivos.

Os planos de sobreposição podem ser menos eficientes do que a composição GL quando nada na tela está mudando. Isso é especialmente verdadeiro quando o conteúdo da sobreposição tem pixels transparentes e as camadas sobrepostas são mescladas. Nesses casos, o HWC pode solicitar a composição GLES para algumas ou todas as camadas e reter o buffer composto. Se o SurfaceFlinger solicitar a composição do mesmo conjunto de buffers, o HWC poderá mostrar o buffer de rascunho 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. Tentar 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.