SurfaceFlinger-Dumps sind Snapshots von SurfaceFlinger zu einem bestimmten Zeitpunkt. SurfaceFlinger-Traces enthalten eine chronologische Abfolge von Status, die wertvolle Informationen dazu liefern, wie ein Fenster auf dem Bildschirm angezeigt wird, und bestimmen, welches Fenster an bestimmten Stellen Touch-Gesten empfängt. Diese Informationen sind wichtig, um Probleme zu beheben, z. B. wenn die App nicht auf meine Berührung reagiert oder das Bild beim Ansehen eines Videos flackert.
Der SurfaceFlinger-Betrachter von Winscope zeigt diese Informationen für Protokolle an, die entweder im aktiven Modus erfasst oder aus dem Transaktionsprotokoll generiert wurden, wenn ein Fehlerbericht erstellt wird (standardmäßig die Droidfood-Konfiguration), sowie für Dumps.
Weitere Informationen zur Trace-Erfassung finden Sie unter SurfaceFlinger (Ebenen).
Abbildung 1: SurfaceFlinger-Trace-Analyse
Auf der linken Seite des Bildschirms sehen Sie eine 3D-Ansicht der Ebenen. In der Ansicht „Rechtecke“ werden Ebenengrenzen, Z-Reihenfolge, Deckkraft, relative Z-Werte und abgerundete Ecken berücksichtigt.
Hierarchie-Chips
Im mittleren Bereich des Tabs wird die Ebenenhierarchie mit Chips für weitere Informationen wie die über-/untergeordneten Beziehungen zwischen Ebenen angezeigt:
- V: Gibt sichtbare Ebenen an.
- RelZParent: Identifiziert Ebenen mit einem untergeordneten RelZ.
- RelZ: Gibt Ebenen mit einem RelZParent an, die in Z-Reihenfolge als Hierarchie gezeichnet werden.
- HWC: Gibt Ebenen an, die vom Hardware-Composer erstellt wurden.
- GPU: Gibt Ebenen an, die von der GPU erstellt wurden.
Auf der rechten Seite des Bildschirms finden Sie eine Liste der ausgewählten Properties sowie einen Proto-Dump aller verfügbaren Ebeneneigenschaften. Weitere Informationen zu den Funktionen des Proto-Dump-Bereichs finden Sie unter Eigenschaften.
Ausgewählte Unterkünfte
Zum einfacheren Debuggen bietet der SurfaceFlinger-Viewer eine ausgewählte Liste von Properties, in der die am häufigsten verwendeten Informationen in einem übersichtlicheren Format präsentiert werden:
Abbildung 2: SurfaceFlinger-Eigenschaften
Diese Liste enthält die folgenden Kategorien.
Sichtbarkeit
Dieser Block enthält Informationen zur Sichtbarkeit der Ebene und eine Erklärung, warum sie nicht sichtbar ist. Er enthält:
Flags:Diese steuern die Sichtbarkeit, z. B. HIDDEN
und OPAQUE
.
Grund für die Unsichtbarkeit:Eine Erklärung dafür, warum die Ebene oder Oberfläche auf dem Bildschirm unsichtbar ist, z. B. weil sie von sich selbst oder ihrem übergeordneten Element verdeckt wird oder keinen Buffer zum Zeichnen hat.
Verdeckt, Teilweise verdeckt oder Bedeckt:
- Verdeckt:Die aktuelle Ebene wird als sichtbar berechnet, aber eine andere opake Ebene wird darüber gezeichnet, wodurch die aktuelle Ebene unsichtbar wird. Die Ebene über der Ebene Occluded ist undurchsichtig. Das bedeutet, dass entweder das
OPAQUE
-Flag gesetzt ist oder das Pixelformat kein Alpha enthält oder für die Ebene kein Alpha festgelegt ist. - Teilweise verdeckt:Die aktuelle Ebene ist teilweise sichtbar, da die darüber gezeichnete opake Ebene sie nicht vollständig bedeckt. Die Ebene über der Ebene Teilweise verdeckt ist opak, d. h., das Flag
OPAQUE
ist gesetzt oder das Pixelformat enthält kein Alpha oder es ist kein Alpha für die Ebene festgelegt. Verdeckt:Die aktuelle Ebene ist entweder vollständig oder teilweise von einer nicht opaken Ebene verdeckt und kann trotzdem auf dem Bildschirm sichtbar sein. Die Ebene über der Ebene Bedeckt ist nicht opak, d. h., das Flag
OPAQUE
ist nicht gesetzt oder das Pixelformat enthält Alpha oder Alpha ist auf der Ebene festgelegt. Bei SurfaceFlinger-Traces wird jedoch eine abgedeckte Ebene für Ebenen unter SurfaceFlinger angezeigt:Abbildung 3: Bedeckte Ebene in SurfaceFlinger.
Geometrie und Effekte
In diesem Abschnitt werden die angeforderte und berechnete Geometrie und die Effekte für die aktuelle Ebene beschrieben.
Im Bereich Angefordert werden die Eigenschaften angezeigt, die für die Ebene festgelegt werden. Im Abschnitt Berechnet werden dagegen die Eigenschaften angezeigt, die auf die Ebene angewendet werden. Diese Unterscheidung ist darauf zurückzuführen, dass Geometrie und Effekte in der Hierarchie weitergegeben und von übergeordneten Elementen übernommen werden.
In Abbildung 2 wird für die Ebene angegeben, dass der Eckenradius auf 0 Pixel gesetzt werden soll. Eine der übergeordneten Ebenen legt jedoch den Eckenradius auf 97, 419 px fest, was der angewendete Wert ist:
Puffer
Die folgenden Eigenschaften enthalten Informationen dazu, ob die Ebene einen Puffer hat, wie groß er ist und wie er transformiert wird.
- Frame-Nummer:Inkrementennummer, die beim Erstellen einer App beginnt.
- Zielfram: Wird verwendet, um den Puffer auf die vom Zielframe definierten Grenzen zu skalieren.
Hierarchiediagramm
Mit den folgenden Eigenschaften wird die Hierarchie der Ebenen bestimmt:
- Z-Reihenfolge:In der Ebenenhierarchie bestimmt die Z-Reihenfolge die relative Position einer Ebene im Verhältnis zu ihren Geschwistern. Eine Ebene mit einem Z-Wert von 0 wird über ihrer übergeordneten Ebene platziert. Wenn mehrere Ebenen denselben Z-Wert haben, wird die Ebene mit der höheren Ebenen-ID oben platziert.
- relative parent (relative übergeordnete Ebene): Gibt die relative übergeordnete Ebene in der Z-Reihenfolge an. Das untergeordnete Element übernimmt keine Properties von seinem übergeordneten Element, mit Ausnahme des Flags „ausgeblendet“.
Eingabe
Die folgenden Properties enthalten Informationen zu berührbaren Bereichen und zum Fokus:
- Touchbereich mit Element zuschneiden:Verwenden Sie die Ebenengrenzen, um den berührbaren Bereich zuzuschneiden.
- Touchbedienungsbereich durch Zuschnitt ersetzen:Verwenden Sie den Zuschnitt der aktuellen Ebenen als Touchbedienungsbereich.