Cette page explique ce qu'est la superposition, comment la diagnostiquer et comment la supprimer ou l'atténuer.
Lorsqu'une application dessine le même pixel plusieurs fois dans un seul frame, on parle de superposition. Les superpositions sont généralement inutiles et il est préférable de les supprimer. La superposition devient un problème de performances lorsqu'elle fait perdre du temps au GPU pour afficher des pixels qui ne contribuent pas à ce que l'utilisateur voit à l'écran.
À propos des superpositions
Une superposition désigne le dessin d'un pixel affiché plusieurs fois à l'écran dans un seul frame d'affichage. Par exemple, si plusieurs cartes d'interface sont empilées, chacune d'elles masque une partie de celle en dessous.
Toutefois, le système doit encore dessiner les parties cachées des cartes de la pile. En effet, les cartes empilées sont affichées selon l'algorithme du peintre, c'est-à-dire dans l'ordre initial. Cette séquence d'affichage permet au système d'appliquer une combinaison alpha appropriée à des objets translucides tels que des ombres.
Identifier les problèmes de superposition
La plate-forme propose les outils suivants pour vous aider à déterminer si les superpositions affectent les performances de votre application.
Outil de débogage de superposition GPU
L'outil de débogage de superposition GPU utilise un code couleur pour indiquer le nombre de fois où votre application dessine chaque pixel à l'écran. Plus ce nombre est élevé, plus il est probable que les superpositions affectent les performances de votre application.
Pour en savoir plus, consultez la section Visualiser la superposition GPU.
Outil de rendu GPU du profil
L'outil de rendu GPU du profil affiche le temps nécessaire à chaque étape du pipeline de rendu pour afficher un seul frame sous forme d'histogramme à faire défiler. La partie Traitement de chaque barre (en orange) indique à quel moment le système échange des tampons. Cette métrique fournit des indications importantes sur les superpositions.
Sur les GPU moins performants, le taux de remplissage disponible (la vitesse à laquelle le GPU peut remplir le tampon du frame) peut être assez faible. À mesure que le nombre de pixels requis pour dessiner un frame augmente, le GPU peut mettre plus de temps à traiter les nouvelles commandes et demander au reste du système d'attendre que le retard soit rattrapé. La barre Traitement montre que ce pic se produit lorsque le GPU est surchargé en essayant de dessiner des pixels aussi vite que possible. Ce pic de métrique peut aussi être causé par d'autres problèmes que le nombre brut de pixels. Par exemple, si l'outil de débogage de superposition GPU affiche une forte superposition et des pics de traitement, il y a probablement un problème de superposition.
Pour en savoir plus, consultez la section Profiler la vitesse du rendu GPU.
Corriger la superposition
Vous pouvez effectuer les opérations suivantes pour réduire ou supprimer les superpositions :
- Supprimer les arrière-plans inutiles dans les mises en page.
- Aplatir la hiérarchie des vues.
- Réduire la transparence.
Cette section détaille chacune de ces approches.
Supprimer les arrière-plans inutiles dans les mises en page
Par défaut, une mise en page n'a pas d'arrière-plan, ce qui signifie qu'elle n'affiche rien directement elle-même. Toutefois, lorsque les mises en page comportent des arrière-plans, elles peuvent contribuer à une superposition.
Vous pouvez améliorer les performances d'affichage en supprimant les arrière-plans inutiles. Un arrière-plan inutile peut ne pas être visible, car il est entièrement recouvert par tout ce que l'application dessine dessus. Par exemple, le système peut couvrir entièrement l'arrière-plan d'un parent lorsqu'il y superpose des vues enfants.
Pour savoir pourquoi vous avez des superpositions, examinez la hiérarchie dans l'outil d'inspection de la mise en page. Vous pouvez rechercher les arrière-plans non visibles par l'utilisateur et les supprimer. Vous pouvez supprimer les arrière-plans inutiles chaque fois que de nombreux conteneurs partagent une couleur d'arrière-plan commune. Vous pouvez définir l'arrière-plan de la fenêtre sur la couleur d'arrière-plan principale de votre application et laisser tous les conteneurs au-dessus sans valeur d'arrière-plan définie.
Aplatir la hiérarchie des vues
Les mises en page modernes vous permettent d'empiler et de superposer des vues pour produire un design élégant. Cependant, cela peut nuire aux performances en causant une superposition, en particulier dans les cas où chaque objet de vue empilé est opaque, forçant l'utilisateur à dessiner à la fois les pixels visibles et non visibles à l'écran.
Si vous rencontrez ce problème, vous pouvez améliorer les performances en optimisant votre hiérarchie des vues afin de réduire le nombre d'objets d'interface utilisateur qui se chevauchent. Pour savoir comment procéder, consultez la page Performances et hiérarchies des vues.
Réduire la transparence
Le rendu des pixels transparents à l'écran, également appelé rendu alpha, est un facteur clé de la superposition. Contrairement aux superpositions standards, dans lesquelles le système masque complètement les pixels tracés existants en dessinant des pixels opaques dessus, les objets transparents nécessitent d'abord de dessiner les pixels existants afin que l'équation de combinaison adéquate puisse se produire.
Les effets visuels, tels que les animations transparentes, les fondus et les ombres projetées, impliquent un certain degré de transparence et peuvent donc contribuer de manière significative à la superposition. Vous pouvez améliorer le superposition dans ces situations en réduisant le nombre d'objets transparents que vous affichez. Par exemple, vous pouvez obtenir du texte en gris en écrivant du texte noir dans un TextView
auquel est associé une valeur alpha translucide. Toutefois, vous pouvez obtenir le même effet avec de meilleures performances en dessinant le texte en gris.
Pour en savoir plus sur les coûts de performances imposés par la transparence tout au long du pipeline de dessin, regardez la vidéo Coûts cachés de la transparence.