Compositeur matériel HAL

Le HAL Hardware Composer (HWC) détermine le moyen le plus efficace de composer des tampons avec le matériel disponible. En tant que HAL, sa mise en œuvre 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 l'on considère les plans de superposition , qui composent plusieurs tampons dans le matériel d'affichage plutôt que dans le GPU. Par exemple, considérons 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 couche se trouve dans des tampons séparés. Vous pouvez gérer la composition à l’aide de l’une des méthodes suivantes :

  • Restituer le contenu de l'application dans un tampon de travail, puis afficher la barre d'état dessus, la barre de navigation par-dessus, et enfin 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 nettement plus efficace.

Les capacités du processeur d'affichage varient considérablement. Le nombre de superpositions, la possibilité de faire pivoter ou de fusionner les calques, ainsi que les restrictions de positionnement et de chevauchement, peuvent être difficiles à exprimer via une API. Pour prendre en compte ces options, le HWC effectue les calculs suivants :

  1. SurfaceFlinger fournit à HWC une liste complète de couches et demande : « Comment voulez-vous gérer cela ? »
  2. HWC répond en marquant chaque couche comme composition de périphérique ou de client.
  3. SurfaceFlinger s'occupe de n'importe quel client, en transmettant le tampon de sortie à HWC et laisse HWC gérer le reste.

Étant donné que 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 le contenu superposé comporte des pixels transparents et que les calques qui se chevauchent sont fusionnés. Dans de tels cas, le HWC peut demander la composition GLES pour tout ou partie des couches 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 la durée de vie de la batterie d'un appareil inactif.

Les appareils Android prennent généralement en charge quatre plans de superposition. Si vous tentez de composer plus de couches que de superpositions, le système utilise la composition GLES pour certaines d'entre elles, ce qui signifie que le nombre de couches utilisées par une application peut avoir un impact mesurable sur la consommation d'énergie et les performances.