SurfaceFlinger-Dumps enthalten eine Momentaufnahme von SurfaceFlinger zu einem bestimmten Zeitpunkt. SurfaceFlinger-Traces enthalten eine chronologische Abfolge von Status, die wertvolle Einblicke in die Darstellung eines Fensters auf dem Bildschirm geben und bestimmen, welches Fenster an bestimmten Stellen Touch-Reaktionen erhält. Diese Informationen sind wichtig, um Probleme wie Die App reagiert nicht auf meine Berührung oder Beim Ansehen eines Videos ist ein Flackern aufgetreten zu beheben.
Im SurfaceFlinger-Viewer von Winscope werden diese Informationen für Traces angezeigt, die entweder im aktiven Modus oder aus dem Transaktions-Trace beim Erstellen eines Fehlerberichts (standardmäßig die Droidfood-Konfiguration) erfasst wurden, sowie für Dumps.
Weitere Informationen zur Trace-Erfassung finden Sie unter SurfaceFlinger (layers).
Abbildung 1: SurfaceFlinger-Trace-Analyse
Auf der linken Seite des Bildschirms sehen Sie eine 3D-Ansicht der Ebenen. In der Ansicht „Rechtecke“ werden die Ebenengrenzen, die Z-Ordnung, die Deckkraft, der relative Z-Wert und die abgerundeten Ecken berücksichtigt.
Hierarchie-Chips
Im mittleren Segment des Tabs wird die Ebenenhierarchie mit Chips für weitere Informationen angezeigt, z. B. die hierarchischen Beziehungen zwischen Ebenen:
- V: Gibt sichtbare Ebenen an.
- RelZParent: Gibt Ebenen mit einem RelZ-Untergeordneten an.
- RelZ: Gibt Ebenen mit einem RelZParent an, die in Z-Reihenfolge entsprechend ihrer Hierarchie gezeichnet werden.
- HWC: Gibt an, welche Ebenen vom Hardware Composer zusammengesetzt werden.
- GPU: Gibt an, welche Ebenen von der GPU zusammengesetzt werden.
Auf der rechten Seite des Bildschirms befindet sich eine Liste mit ausgewählten Eigenschaften sowie ein Proto-Dump aller verfügbaren Layereigenschaften. Weitere Informationen zu den Funktionen des Proto-Dump-Abschnitts finden Sie unter Properties (Attribute).
Ausgewählte Unterkünfte
Um das Debugging zu erleichtern, bietet der SurfaceFlinger-Viewer eine kuratierte Liste von Eigenschaften, in der die am häufigsten verwendeten Informationen in einem übersichtlicheren Format dargestellt 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:Mit diesen wird die Sichtbarkeit gesteuert, z. B. HIDDEN
und OPAQUE
.
Grund für Unsichtbarkeit:Eine Erklärung dafür, warum die Ebene oder Oberfläche auf dem Bildschirm nicht sichtbar ist, z. B. weil sie oder ihr übergeordnetes Element ausgeblendet ist oder kein Puffer zum Zeichnen vorhanden ist.
Verdeckt, teilweise verdeckt oder abgedeckt:
- Verdeckt:Die aktuelle Ebene wird als sichtbar berechnet, aber eine andere undurchsichtige Ebene wird darüber gezeichnet, wodurch die aktuelle Ebene unsichtbar wird. Die Ebene über der Ebene Verdeckt ist undurchsichtig. Das bedeutet, dass entweder das Flag
OPAQUE
gesetzt ist oder das Pixelformat keinen Alphakanal enthält oder kein Alphakanal für die Ebene festgelegt ist. - Teilweise verdeckt:Die aktuelle Ebene ist teilweise sichtbar, da die darüber gezeichnete undurchsichtige Ebene sie nicht vollständig abdeckt. Die Ebene über der Ebene Partially Occluded ist undurchsichtig. Das bedeutet, dass das Flag
OPAQUE
gesetzt ist oder das Pixelformat keinen Alphakanal enthält oder kein Alphakanal für die Ebene festgelegt ist. Verdeckt:Die aktuelle Ebene ist ganz oder teilweise von einer nicht deckenden Ebene verdeckt und möglicherweise noch auf dem Bildschirm sichtbar. Die Ebene über der Ebene Covered ist nicht undurchsichtig. Das heißt, das Flag
OPAQUE
ist nicht festgelegt oder das Pixelformat enthält Alpha oder Alpha ist auf der Ebene festgelegt. Bei SurfaceFlinger-Traces wird eine Covered-Ebene jedoch als sichtbar angezeigt, für Ebenen unter SurfaceFlinger:Abbildung 3: Abgedeckte Ebene auf SurfaceFlinger.
Geometrie und Effekte
In diesem Abschnitt werden die angeforderte und die berechnete Geometrie sowie 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 Attribute angezeigt, die auf die Ebene angewendet werden. Diese Unterscheidung ist erforderlich, weil Geometrie und Effekte in der Hierarchie weitergegeben und von übergeordneten Elementen übernommen werden.
In Abbildung 2 wird für die Ebene ein Eckenradius von 0 px angefordert. In einer der übergeordneten Ebenen wird der Eckenradius jedoch auf 97,419 px festgelegt.Das ist der angewendete Wert:
Puffer
Die folgenden Eigenschaften enthalten Informationen dazu, ob die Ebene einen Puffer hat, wie groß er ist und welche Transformation angewendet wird.
- Frame-Nummer:fortlaufende Nummer, die mit der Erstellung einer App beginnt.
- Ziel-Frame:Wird verwendet, um den Puffer auf die durch den Ziel-Frame definierten Grenzen zu skalieren.
Hierarchiediagramm
Die folgenden Attribute beschreiben, wie die Hierarchie der Ebenen bestimmt wird:
- Z-Reihenfolge:In der Hierarchie der Ebenen bestimmt die Z-Reihenfolge die relative Position einer Ebene im Verhältnis zu ihren gleichgeordneten Elementen. Eine Ebene mit dem Z-Wert 0 wird über der übergeordneten Ebene positioniert. Wenn mehrere Ebenen denselben Z-Wert haben, wird die Ebene mit der höheren Ebenen-ID oben platziert.
- Relatives übergeordnetes Element:Gibt die relative übergeordnete Ebene in der Z-Reihenfolge an. Das untergeordnete Element erbt keine Eigenschaften von seinem relativen übergeordneten Element, mit Ausnahme des Flags „Ausgeblendet“.
Eingabe
Die folgenden Eigenschaften enthalten Informationen zu berührbaren Bereichen und zum Fokus:
- Berührungsbereich mit Element zuschneiden:Mit den Ebenengrenzen wird der berührbare Bereich zugeschnitten.
- Berührungsbereich durch Zuschneiden ersetzen:Der Zuschneidebereich der aktuellen Ebene wird als berührbarer Bereich verwendet.