Le HAL du compositeur de matériel (HWC) détermine le moyen le plus efficace de composer des tampons avec le matériel disponible. En tant que HAL, son implémentation est spécifique à l'appareil et est généralement effectuée par l'OEM du matériel d'affichage.
La valeur de cette approche est facile à reconnaître lorsque vous considérez les plans de superposition, qui composent plusieurs tampons dans le matériel d'affichage plutôt que dans le GPU. Prenons l'exemple d'un téléphone Android typique en mode portrait, avec la barre d'état en haut, la barre de navigation en bas et le contenu de l'application partout ailleurs. Le contenu de chaque calque se trouve dans des tampons distincts. Vous pouvez gérer la composition à l'aide de l'une des méthodes suivantes:
- Afficher le contenu de l'application dans un tampon de travail, afficher la barre d'état au-dessus, la barre de navigation au-dessus, puis transmettre le tampon de travail au matériel d'affichage.
- Transmettre les trois tampons au matériel d'affichage et lui demander de lire les données de différents tampons pour différentes parties de l'écran.
Cette dernière approche peut être beaucoup plus efficace.
Les fonctionnalités des processeurs d'affichage varient considérablement. Le nombre de superpositions, la possibilité de faire pivoter ou de mélanger les calques, ainsi que les restrictions concernant le positionnement et la superposition peuvent être difficiles à exprimer via une API. Pour prendre en charge ces options, le contrôleur matériel effectue les calculs suivants:
- SurfaceFlinger fournit à HWC une liste complète des calques et demande : "Comment voulez-vous gérer cela ?"
- HWC répond en marquant chaque couche en tant que composition d'appareil ou de client.
- SurfaceFlinger s'occupe de tous les clients, transfère le tampon de sortie à HWC et laisse HWC gérer le reste.
Étant donné que les fournisseurs de matériel peuvent adapter le code de prise de décision, il est possible d'obtenir les meilleures performances de chaque appareil.
Les plans de superposition peuvent être moins efficaces que la composition GL lorsque rien ne change à l'écran. Cela est particulièrement vrai lorsque les contenus superposés comportent des pixels transparents et que les calques superposés sont mélangés. Dans ce cas, le HWC peut demander une composition GLES pour une partie ou la totalité des calques et conserver le tampon composite. Si SurfaceFlinger demande à composer le même ensemble de tampons, le HWC peut afficher le tampon de travail précédemment composé. Cela peut améliorer l'autonomie de la batterie d'un appareil inactif.
Les appareils Android acceptent généralement quatre plans de superposition. Si vous essayez de composer plus de calques que de superpositions, le système utilise la composition GLES pour certains d'entre eux. Par conséquent, le nombre de calques utilisés par une application peut avoir un impact mesurable sur la consommation d'énergie et les performances.