A partir de 27 de março de 2025, recomendamos usar android-latest-release
em vez de aosp-main
para criar e contribuir com o AOSP. Para mais informações, consulte Mudanças no AOSP.
HAL do Hardware Composer
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
A HAL do Hardware Composer (HWC) determina a maneira mais eficiente
de compor buffers com o hardware disponível. Como HAL, a
implementação é específica do dispositivo e geralmente é feita pelo OEM do hardware de exibição.
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, o HWC executa
os seguintes cálculos:
- O SurfaceFlinger fornece ao HWC uma lista completa de camadas e pergunta: "Como
você quer processar isso?"
- O HWC responde marcando cada camada como composição de dispositivo ou cliente.
- 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ão, é possível
extrair o melhor desempenho de cada dispositivo.
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 pedir para compor o 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 ocioso.
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.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-27 UTC."],[],[],null,["# Hardware Composer HAL\n\nThe Hardware Composer (HWC) HAL determines the most efficient\nway to composite buffers with the available hardware. As a HAL, its\nimplementation is device-specific and usually done by the display hardware OEM.\n\nThe value of this approach is easy to recognize when you consider *overlay\nplanes*, which composite multiple buffers in\nthe display hardware rather than the GPU. For example, consider a typical\nAndroid phone in portrait orientation, with the status bar on top, navigation\nbar at the bottom, and app content everywhere else. The contents for each layer\nare in separate buffers. You can handle composition using either of the\nfollowing methods:\n\n- Rendering the app content into a scratch buffer, then rendering the status bar over it, the navigation bar on top of that, and finally passing the scratch buffer to the display hardware.\n- Passing all three buffers to the display hardware and instructing it to read data from different buffers for different parts of the screen.\n\nThe latter approach can be significantly more efficient.\n\nDisplay processor capabilities vary significantly. The number of overlays,\nwhether layers can be rotated or blended, and restrictions on positioning and\noverlap can be difficult to express through an API. To accommodate these options, the HWC performs\nfollowing calculations:\n\n1. SurfaceFlinger provides HWC with a full list of layers and asks, \"How do you want to handle this?\"\n2. HWC responds by marking each layer as device or client composition.\n3. SurfaceFlinger takes care of any client, passing the output buffer to HWC, and lets HWC handle the rest.\n\nBecause hardware vendors can custom tailor decision-making code, it's possible\nto get the best performance out of every device.\n\nOverlay planes may be less efficient than GL composition when nothing on the\nscreen is changing. This is particularly true when overlay contents have\ntransparent pixels and overlapping layers are blended. In such cases,\nthe HWC can request GLES composition for some or all layers and retain\nthe composited buffer. If SurfaceFlinger asks to composite the same\nset of buffers, the HWC can show the previously composited scratch\nbuffer. This can improve the battery life of an idle device.\n\nAndroid devices typically support four overlay planes.\nAttempting to composite more layers than overlays causes the system to use GLES\ncomposition for some of them, meaning the number of layers used by an app can\nhave a measurable impact on power consumption and performance."]]