Le HAL du compositeur matériel (HWC) détermine la manière la 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. Par exemple, prenons l'exemple d'un téléphone Android typique en orientation 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 :
- Le contenu de l'application est rendu dans un tampon de travail, puis la barre d'état est rendue par-dessus, la barre de navigation par-dessus, et enfin le tampon de travail est transmis 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 capacités des processeurs d'affichage varient considérablement. Il peut être difficile d'exprimer le nombre de calques, la possibilité de les faire pivoter ou de les mélanger, ainsi que les restrictions de positionnement et de chevauchement à l'aide d'une API. Pour tenir compte de ces options, le HWC effectue les calculs suivants :
- SurfaceFlinger fournit à HWC une liste complète de calques et demande : "Comment voulez-vous gérer cela ?"
- HWC répond en marquant chaque couche comme composition de l'appareil ou du client.
- SurfaceFlinger s'occupe de tous les clients, en transmettant le tampon de sortie à HWC, et laisse HWC gérer le reste.
Comme les fournisseurs de matériel peuvent personnaliser 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 en superposition comportent des pixels transparents et que les calques qui se chevauchent sont mélangés. Dans ce cas, le HWC peut demander une composition GLES pour tout ou partie des calques et conserver le tampon composite. Si SurfaceFlinger demande de 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 sont généralement compatibles avec quatre plans de superposition. Si vous essayez de composer plus de calques que de calques de superposition, le système utilise la composition GLES pour certains d'entre eux. Cela signifie que le nombre de calques utilisés par une application peut avoir un impact mesurable sur la consommation d'énergie et les performances.