Winscope ist ein Webtool, mit dem Nutzer den Status verschiedener Systemdienste während und nach Animationen und Übergängen aufzeichnen, wiedergeben und analysieren können. Winscope zeichnet alle relevanten Systemdienststatus in einer Tracedatei auf. Wenn Sie die Winscope-UI mit der Trace-Datei verwenden, können Sie den Status dieser Dienste für jeden Animationsframe mit oder ohne Bildschirmaufzeichnung überprüfen. Dazu müssen Sie die Übergänge noch einmal abspielen, Schritt für Schritt ausführen und Fehler beheben.
Die Systemdienste, die Protokolle generieren, die in Winscope geladen werden können, sind:
- SurfaceFlinger
- WindowManager
- Logo: WMShell
- IME
- Werfer
Winscope Trace Viewer ausführen
Die Winscope-Analyse ist Teil der Dienste auf der Plattform. In diesem Abschnitt werden die Schritte zum Herunterladen, Erstellen und Ausführen der Winscope-Trace-Ansicht beschrieben.
So richten Sie Ihren PC für die Ausführung des Winscope-Tracers ein:
- Laden Sie die Android-Quelle herunter.
Wechseln Sie zum Ordner „Winscope“:
cd development/tools/winscope
Installieren Sie Abhängigkeiten mit:
npm install
Führen Sie folgenden Befehl aus, um eine Liste der verfügbaren Befehle aufzurufen:
npm run
Erstellen Sie alle Produktions- und Testziele mithilfe von:
npm run build:prod
So führen Sie Winscope aus:
npm run start
Traces erfassen
Sie können Traces auf dem Gerät, über Winscope oder über ADB-Befehle (Android Debug Bridge) erfassen.
Traces auf dem Gerät erfassen
Erfassen Sie Traces auf dem Gerät, um Daten zu erfassen, wenn Sie Fehler in Bezug auf Animationsprobleme melden. Mit dieser Methode werden alle UI-Traces aufgezeichnet, da die Konfiguration nicht angepasst werden kann.
Auf deinem Android-Gerät:
- Entwickleroptionen aktivieren
- Wählen Sie unter „Entwickleroptionen“ die Option System-Tracing aus.
- Aktivieren Sie WinScope-Traces erfassen.
- Unter Verschiedenes:
- Aktivieren Sie Aufzeichnungen an Fehlerberichte anhängen.
- Aktivieren Sie Schnelleinstellungen-Kachel anzeigen.
- Gehen Sie zu der Stelle, an der Sie den Fehler reproduzieren müssen.
Öffnen Sie dazu die Schnelleinstellungen und wählen Sie Trace aufzeichnen aus:
Abbildung 1. Menü „Schnelleinstellung“ mit „Trace aufzeichnen“.
Führen Sie nur die Schritte aus, die zum Reproduzieren des Fehlers erforderlich sind.
Wenn Sie die Erfassung beenden möchten, öffnen Sie die Schnelleinstellungen und wählen Sie Tracing beenden aus.
Sie können das erfasste Protokoll über eine der aufgeführten Optionen freigeben, z. B. Gmail, Drive oder BetterBug.
Traces über Winscope erfassen
Sie können Traces mit Winscope für die lokale Entwicklung und Fehlerbehebung erfassen. Winscope nutzt adb, das die Geräteverbindung über USB oder WLAN unterstützt.
In Winscope:
Klicken Sie auf dem Bildschirm Traces erfassen auf ADB-Proxy:
Abbildung 2: Erfassen Sie Traces in Winscope.
Starten Sie den Winscope ADB Connect-Proxy, um Traces direkt über Ihren Browser zu erfassen.
Führen Sie den folgenden Befehl aus:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Wählen Sie zum Starten der Erfassung auf dem Bildschirm Traces erfassen die Ziele und die Konfiguration aus und klicken Sie auf Trace starten:
Abbildung 3 Erfassen Sie Traces in Winscope.
Klicken Sie auf Aufzeichnung beenden, um die Aufzeichnung zu beenden:
Abbildung 4: Beenden Sie die Aufzeichnung in Winscope.
Während das Tool die Traces auf die Benutzeroberfläche von Winscope hochlädt, werden die Meldungen Abrufen und Protodateien parsen auf dem Bildschirm angezeigt.
Zustandsdump mit Winscope generieren
Wenn Sie mit Winscope einen Status-Dump erstellen möchten, wählen Sie auf dem Bildschirm Traces erfassen den Tab Dump aus und klicken Sie dann auf Dump-Status:
Abbildung 5: Dump-Status in Winscope.
Traces über ADB-Befehle erfassen
Führen Sie zuerst adb root
aus, bevor Sie die adb shell
-Befehle für jeden der folgenden Traces ausführen. Am Ende des Trace sind die Trace-Dateien in /data/misc/wmtrace
verfügbar. Informationen zum Kopieren einer Datei oder eines Verzeichnisses und ihrer Unterverzeichnisse von einem Gerät finden Sie unter Dateien von und auf ein Gerät kopieren.
Weitere Informationen finden Sie unter adb.
WindowManager-Traces
So erfassen Sie WindowManager-Traces:
Trace aktivieren:
adb shell wm tracing start
Trace deaktivieren:
adb shell wm tracing stop
Speichern Sie Logging-Daten in einer Datei, während Sie eine Trace-Erfassung ausführen:
adb shell wm tracing save-for-bugreport
Log-Trace einmal pro Frame:
adb shell wm tracing frame
Protokolliere jede Transaktion:
adb shell wm tracing transaction
Legen Sie die maximale Protokollgröße in KB fest:
adb shell wm tracing size
Trace-Status drucken:
adb shell wm tracing status
Legen Sie die Protokollebene auf
critical
(nur sichtbare Fenster mit reduzierten Informationen),trim
(alle Fenster mit reduzierten Informationen) oderall
(alle Fenster und Informationen) fest:adb shell wm tracing level
Protokoll
Die folgenden Befehle werden für das ProtoLog-System verwendet.
Im system_server
-Prozess:
Starten Sie ProtoLog:
adb shell cmd window logging start
ProtoLog stoppen:
adb shell cmd window logging stop
Aktivieren Sie ProtoLog für bestimmte Protokollgruppen:
adb shell cmd window logging enable [group...]
Deaktivieren Sie ProtoLog für bestimmte Protokollgruppen:
adb shell cmd window logging disable [group...]
Aktivieren Sie das Logcat-Logging für bestimmte Loggruppen:
adb shell cmd window logging enable-text [group...]
Deaktivieren Sie das Logcat-Logging für bestimmte Loggruppen:
adb shell cmd window logging disable-text [group...]
In WMShell:
ProtoLog starten:
adb shell dumpsys activity service SystemUIService WMShell
Übergangs-Tracking
Die folgenden Befehle werden für das Übergangs-Tracing verwendet:
Im system_server
-Prozess:
So starten Sie einen Trace:
adb shell cmd window shell tracing start
Trace beenden:
adb shell cmd window shell tracing stop
So starten Sie einen Trace in der WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
So beenden Sie eine Trace-Datei in der WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
Eingabemethoden-Editor
Die folgenden Befehle werden für das Tracing des Eingabemethoden-Editors (Input Method Editor, IME) verwendet:
Starten Sie die IME-Aufzeichnung für IM-Clients (Eingabemethoden), IMS (Eingabemethodendienst) und IMMS (Eingabemethodenverwaltungsdienst):
adb shell ime tracing start
Starten Sie das Tracing von IME-Clients, IMS und IMMS:
adb shell ime tracing stop
SurfaceFlinger-Ebenen
Beim SurfaceFlinger-Ebenen-Tracing wird Perfetto-Trace zur Erfassung verwendet. Weitere Informationen zur Konfiguration finden Sie unter Trace-Konfiguration.
Im folgenden Beispiel wird eine Konfiguration für das SurfaceFlinger-Ebenen-Tracing gezeigt:
unique_session_name: "surfaceflinger_layers_active"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
Im folgenden Beispiel wird ein Befehl zum Generieren von Tracings für SurfaceFlinger-Ebenen gezeigt:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
SurfaceFlinger-Transaktionen
Beim Transaktions-Tracing von SurfaceFlinger wird Perfetto-Trace zur Erfassung verwendet. Konfigurationsinformationen finden Sie unter Trace-Konfiguration.
Das folgende Beispiel zeigt eine Perfetto-Konfiguration für das aktive Tracing von SurfaceFlinger:
unique_session_name: "surfaceflinger_transactions_active"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
write_into_file: true
file_write_period_ms: 100
Im folgenden Beispiel wird eine Perfetto-Konfiguration für das kontinuierliche Tracing von SurfaceFlinger gezeigt:
unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_CONTINUOUS
}
}
}
Im folgenden Beispiel wird ein Befehl zum Generieren von Tracings für SurfaceFlinger-Transaktionen gezeigt:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Zustandsdump mit ADB generieren
Winscope liest einen Snapshot der WindowManager- und SurfaceFlinger-Status aus Fehlerberichten. In den Fehlerberichten werden die Status als separate Proto-Dateien im Ordner proto
gespeichert. Führen Sie die folgenden Befehle aus, um die Statusdumps mit adb zu generieren.
Für WindowManager:
adb exec-out dumpsys window --proto > window_dump.winscope
Für SurfaceFlinger:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
Traces analysieren
Zur Fehlerbehebung bei vorübergehenden und ungültigen Zuständen, die zu Animationen führen, aggregiert Winscope verschiedene Trace-Dateien, bietet eine Suche und Visualisierung über Frames und Zeitleisten und stellt protobuf-Nachrichten auf einheitliche Weise dar. Durch die Analyse von Protokollen in Winscope können Sie die genaue Ebene, den Frame und den Zustand des Auftretens des Bugs ermitteln.
Winscope verwenden
Wenn Sie Traces erfasst haben, analysieren Sie diese in Winscope:
Laden Sie Ihre gespeicherten Traces über den Bereich rechts hoch. Sie können hochgeladene Traces entfernen oder weitere hochladen.
Abbildung 6 Laden Sie Traces in Winscope hoch.
Klicken Sie auf Traces ansehen, um die hochgeladenen Traces zu visualisieren. Tabs für jede Spur werden oben im Fenster angezeigt. Wenn die hochgeladene Datei die relevanten Traces enthält, wird eine unverankerte Ansicht des Bildschirmaufzeichnungs-Trace über den Bildschirm gelegt.
Abbildung 7: Traces in Winscope ansehen.
Verwenden Sie die Benutzeroberfläche im obersten Bereich des Fensters, um umzubenennen und den hochgeladenen Trace herunterzuladen oder einen neuen hochzuladen.
Mit dem Zeitschieber unten im Fenster können Sie die Traces im Zeitverlauf ansehen. Für eine zusätzliche Zeitnavigation können Sie die folgenden Funktionen verwenden (siehe Abbildung 8):
- Verwenden Sie den Cursor (Zeitschieberegler), den linken - und den rechten -Pfeil im Uhrzeitanzeigefeld (untere linke Ecke) oder den Links- und Rechtspfeil auf Ihrer Tastatur, um zu einer bestimmten Zeit oder einem bestimmten Vorkommen zu wechseln.
- Wenn Sie ausgewählte farbcodierte Spuren auf der Zeitachse anzeigen möchten, verwenden Sie das Drop-down-Menü links neben dem Zeitschieber. Standardmäßig werden in der Zeitachse die letzten drei Traces angezeigt, die Sie auf den Trace-Tabs aufgerufen haben.
- Eine detaillierte Ansicht aller hochgeladenen Traces erhalten Sie, wenn Sie unter dem Zeitschieberegler das Tool zum Heranzoomen oder zum Heranzoomen verwenden oder auf der Tastatur scrollen. Mit der Schaltfläche „Zurücksetzen“ können Sie die Zoomstufe zurücksetzen.
- Klicken Sie auf den Aufwärtspfeil (unten rechts), um eine erweiterte Ansicht der Trace-Verteilung im Zeitverlauf aufzurufen.
Abbildung 8: Zeitnavigation in Winscope
Wählen Sie in der erweiterten Ansicht (Abbildung 9) bestimmte Zeiträume aus und heranzoomen Sie sie, um sie genauer zu untersuchen:
Abbildung 9: Erweiterte Zeitachse in Winscope
Wenn Sie die Informationen analysieren möchten, können Sie sich den Gerätestatus mit der Bildschirmaufzeichnung ansehen. Klicken Sie im oberen Bereich des Tools auf den entsprechenden Trace-Tab, um einen bestimmten Trace zu untersuchen.
Beim Surface Flinger-Trace zeigen drei Bereiche verschiedene Ansichten des Trace zu einem bestimmten Zeitraum an, wie in Abbildung 10 dargestellt:
Abbildung 10. Flinger-Trace der Oberfläche in Winscope
Ebenen: Eine 3D-Ansicht der Ebenen in rechteckigen Overlays. Mit den folgenden UI-Elementen werden die Rechtecke angepasst, um die grafischen Elemente in Bezug auf ihre Position, Größe, Transformation und Z-Reihenfolge zu rendern:
- Mit dem Schieberegler Drehung (oben links in der Ebenenansicht) können Sie die Ebenen mit Rechtecken drehen, um sie in den gewünschten Winkeln zu sehen.
- Mit dem Schieberegler Abstand (oben rechts in der Ebenenansicht) können Sie den Abstand zwischen den Ebenen anpassen, um die gewünschte zusammengesetzte Ansicht zu erstellen.
- Mit den Zoomtools (oben rechts in der Ebenenansicht) können Sie heran bzw. herauszoomen, um die Ebenen besser zu sehen.
- Mit der Schaltfläche „Zurücksetzen“ (oben rechts in der Ebenenansicht) werden die Kameraeinstellungen auf die ursprüngliche Ansicht zurückgesetzt.
- Ziehen Sie die Rechtecke, um besser heranzoomen zu können.
Hierarchie: Eine vollständige Hierarchie der Ebenen.
- Wenn Sie Nur sichtbar (oben rechts in der hierarchischen Ansicht) auswählen, werden unsichtbare Ebenen aus der Hierarchie ausgeblendet, um die Elemente auf dem Bildschirm besser zu visualisieren.
- Wenn Flach (oben rechts in der Hierarchieansicht) ausgewählt ist, wird die Hierarchie als flache Liste von Ebenen angezeigt.
- Unterschied einblenden (oben links in der Hierarchieansicht) wird nur ausgewählt, wenn es einen Statusübergang gibt. Wenn diese Option ausgewählt ist, vergleicht das Tool den aktuellen Status mit dem vorherigen. Neue Elemente werden grün, gelöschte Elemente rot und geänderte Elemente blau hervorgehoben.
Ansicht Eigenschaften: Eigenschaften der ausgewählten Ebene Der obere Bereich der Ansicht Properties enthält nur Informationen zu wichtigen Properties wie Sichtbarkeit, Geometrie und Puffer. Im unteren Bereich der Ansicht Properties finden Sie einen Proto Dump aller Properties.
- Das Kästchen Unterschiede anzeigen (links oben in der Ansicht „Properties“) funktioniert genauso wie in der Ansicht Hierarchie.
- Wenn Standardeinstellungen anzeigen (oben links in der Eigenschaftenansicht) ausgewählt ist, werden die Proto-Standardwerte des Proto-Dumps angezeigt.
Standardmäßig sind diese Werte nicht im Proto Dump aufgeführt. Die Standard-Proto-Werte stammen aus der Proto-Felddefinition.
Wenn für ein Proto-Feld kein nicht nullwertiger Standardwert festgelegt ist, werden die folgenden Standard-Proto-Werte angezeigt:
- Strings: Null
- Zahlen: 0
- Boolesche Werte: False
- Objekte: Null
Die Auswahl zwischen den drei Ansichten und der Bildschirmaufzeichnung ist synchronisiert. Das bedeutet, dass alle Spuren synchron aktualisiert werden, wenn Sie zu einem anderen Zeitpunkt springen. Wenn Sie die Eigenschaften für eine Ebene aufrufen möchten, klicken Sie in der Hierarchieansicht auf die Ebene oder in der Eigenschaftenansicht auf das entsprechende Rechteck. Ein lilafarbenes Rechteck weist darauf hin, dass dieser Ebene ein Blickverlauf zugeordnet ist. Durch Doppelklicken auf eine lilafarbene Ebene wechselt die Benutzeroberfläche zum entsprechenden Tab für Ansichts-Traces.
Für den Fenstermanager werden in drei Bereichen unterschiedliche Ansichten des Logs in einem bestimmten Zeitraum angezeigt, wie in Abbildung 11 dargestellt:
- Windows-Ansicht: 3D-Ansicht der Ebenen.
- Hierarchie: Eine vollständige Hierarchie der Ebenen.
- Die Ansicht Properties enthält einen Proto Dump aller Properties.
Die Auswahl zwischen den drei Ansichten und der Bildschirmaufzeichnung ist synchronisiert. Das bedeutet, dass alle Spuren synchron aktualisiert werden, wenn Sie zu einem anderen Zeitpunkt springen.
Abbildung 11. Window Manager-Trace in Winscope
Für Transaktionen-Traces werden die Transaktionen zwischen dem Oberflächen-Finger und dem Fenstermanager im Tabellenformat dargestellt, das anhand der angezeigten IDs, Typen und Texte durchsucht werden kann, zusammen mit einer Eigenschaftenansicht, die den Proto-Dump zeigt. Die Auswahl zwischen den beiden Ansichten und die Bildschirmaufzeichnung sind synchronisiert:
Abbildung 12 Transaktions-Trace in Winscope.
Bei ProtoLog-Traces werden die Informationen in Tabellenform dargestellt, die nach Tags, Quelldateien und Text durchsucht werden können:
Abbildung 13 ProtoLog-Trace in Winscope.
Bei Übergangs-Aufzeichnungen werden eine Liste der Übergänge mit ID, Typ, Sendezeit, Dauer und Status sowie die Eigenschaften des ausgewählten Übergangs angezeigt:
Abbildung 14. Übergangs-Trace in Winscope.