SurfaceFlinger

Les dumps SurfaceFlinger fournissent un instantané de SurfaceFlinger à un moment précis. Les traces SurfaceFlinger présentent une séquence chronologique d'états qui fournissent des informations précieuses sur la façon dont une fenêtre apparaît à l'écran et déterminent quelle fenêtre reçoit les réponses tactiles à des emplacements spécifiques. Ces informations sont essentielles pour résoudre des problèmes tels que l'application ne répond pas à mon toucher ou j'ai constaté des scintillements en regardant une vidéo.

Le lecteur SurfaceFlinger de Winscope affiche ces informations pour les traces collectées en mode actif ou générées à partir de la trace des transactions lors de la création d'un rapport de bug (par défaut, la configuration Droidfood), ainsi que pour les dumps.

Pour en savoir plus sur la collecte de traces, consultez SurfaceFlinger (calques).

Analyse des traces SurfaceFlinger

Figure 1 : Analyse des traces SurfaceFlinger.

La partie gauche de l'écran affiche une vue 3D des calques. La vue "rects" tient compte des limites de calque, de l'ordre Z, de l'opacité, de la valeur Z relative et des angles arrondis.

Chips de hiérarchie

Le segment central de l'onglet affiche la hiérarchie des calques avec des chips pour obtenir plus d'informations, comme les relations parent-enfant entre les calques :

  • V : identifie les calques visibles.
  • RelZParent : identifie les calques avec un enfant RelZ.
  • RelZ : identifie les calques avec un RelZParent et les dessine dans l'ordre Z selon leur hiérarchie.
  • HWC : identifie les calques composés par le compositeur matériel.
  • GPU : identifie les couches composées par le GPU.

Sur la droite de l'écran, vous trouverez une liste de propriétés sélectionnées, ainsi qu'un dump de proto de toutes les propriétés de calque disponibles. Pour en savoir plus sur les fonctionnalités de la section "Vidage proto", consultez Propriétés.

Propriétés sélectionnées

Pour faciliter le débogage, le lecteur SurfaceFlinger fournit une liste de propriétés sélectionnées, en présentant les informations les plus couramment utilisées dans un format plus organisé :

Propriétés de SurfaceFlinger

Figure 2. Propriétés SurfaceFlinger.

Cette liste comprend les catégories suivantes :

Visibilité

Ce bloc contient des informations sur la visibilité du calque et une explication de la raison pour laquelle il n'est pas visible. Voici les sujets abordés :

Indicateurs : ils contrôlent la visibilité, par exemple HIDDEN et OPAQUE.

Raison de l'invisibilité : explication de la raison pour laquelle le calque ou la surface sont invisibles à l'écran, le cas échéant (par exemple, s'ils sont masqués par eux-mêmes ou par leur parent, ou s'ils n'ont pas de tampon à dessiner).

Masqué, partiellement masqué ou couvert :

  • Masquée : le calque actuel est considéré comme visible, mais un autre calque opaque est dessiné par-dessus, ce qui le rend invisible. La couche au-dessus de la couche Occluded est opaque, c'est-à-dire que son indicateur OPAQUE est défini, ou que le format de pixel ne contient pas de canal alpha ou qu'aucun canal alpha n'est défini sur la couche.
  • Partiellement masquée : la couche actuelle est partiellement visible, car la couche opaque dessinée au-dessus ne la recouvre pas entièrement. La couche située au-dessus de la couche Partiellement masqué est opaque, c'est-à-dire que l'indicateur OPAQUE est défini, ou que le format de pixel ne contient pas de canal alpha ou qu'aucun canal alpha n'est défini sur la couche.
  • Couche masquée : la couche actuelle est masquée, entièrement ou partiellement, par une couche non opaque et peut toujours être visible à l'écran. La couche au-dessus de la couche Couvert n'est pas opaque, c'est-à-dire que l'indicateur OPAQUE n'est pas défini ou que le format de pixel contient un canal alpha ou que le canal alpha est défini sur la couche. Toutefois, pour les traces SurfaceFlinger, un calque Couvert est affiché comme visible pour les calques situés sous SurfaceFlinger :

    Couche masquée sur SurfaceFlinger

    Figure 3. Calque couvert sur SurfaceFlinger.

Géométrie et effets

Cette section décrit la géométrie et les effets demandés et calculés pour le calque actuel.

La section Demandé affiche les propriétés définies sur le calque. En revanche, la section Calculé affiche les propriétés appliquées au calque. Cette distinction est due au fait que la géométrie et les effets sont transmis dans la hiérarchie et hérités des éléments parents.

Dans la figure 2, la couche demande que le rayon d'angle soit défini sur 0 px. Toutefois, l'un de ses calques parents définit le rayon d'angle sur 97,419 px, qui est la valeur appliquée :

Tampon

Les propriétés suivantes affichent des informations indiquant si le calque possède une mémoire tampon, sa taille et sa transformation.

  • Numéro de frame : nombre incrémentiel commençant à la création d'une application.
  • Frame de destination : permet de mettre à l'échelle le tampon en fonction des limites définies par le frame de destination.

Hiérarchie

Les propriétés suivantes décrivent comment la hiérarchie des calques est déterminée :

  • z-order : dans la hiérarchie des calques, l'ordre Z détermine le positionnement relatif d'un calque par rapport à ses frères et sœurs. Un calque dont la valeur Z est définie sur 0 est positionné au-dessus de son parent. Si plusieurs calques partagent la même valeur Z, celui dont l'ID est le plus élevé est placé au-dessus.
  • parent relatif : indique le calque parent relatif dans l'ordre Z. L'enfant n'hérite d'aucune propriété de son parent relatif, à l'exception du flag "hidden" (masqué).

Entrée

Les propriétés suivantes contiennent des informations sur la zone tactile et la mise au point :

  • Recadrer la zone tactile avec l'élément : utilisez les limites du calque pour recadrer la zone tactile.
  • Remplacer la zone tactile par le recadrage : utilisez le recadrage des calques actuels comme zone tactile.