Winscope ist ein Webtool, mit dem Benutzer den Status mehrerer Systemdienste während und nach Animationen und Übergängen aufzeichnen, wiedergeben und analysieren können. Winscope zeichnet alle relevanten Systemdienstzustände in einer Trace-Datei auf. Wenn Sie die Winscope-Benutzeroberfläche mit der Ablaufverfolgungsdatei verwenden, können Sie den Status dieser Dienste für jeden Animationsrahmen mit oder ohne Bildschirmaufzeichnung überprüfen, indem Sie die Übergänge erneut abspielen, schrittweise durchlaufen und debuggen.
Folgende Systemdienste erzeugen Ablaufverfolgungen, die in Winscope geladen werden können:
- SurfaceFlinger
- Fenstermanager
- WMShell
- IME
- Startprogramm
Führen Sie den Winscope-Trace-Viewer aus
Die Winscope-Ablaufverfolgung ist Teil der Dienste auf der Plattform. In diesem Abschnitt werden die Schritte beschrieben, die zum Herunterladen, Erstellen und Ausführen des Winscope-Trace-Viewers erforderlich sind.
Befolgen Sie diese Schritte, um Ihren PC für die Ausführung des Winscope-Tracers einzurichten:
- Laden Sie die Android-Quelle herunter .
Navigieren Sie zum Winscope-Ordner:
cd development/tools/winscope
Installieren Sie Abhängigkeiten mit:
npm install
Um eine Liste der verfügbaren Befehle anzuzeigen, führen Sie Folgendes aus:
npm run
Erstellen Sie alle Produkt- und Testziele mit:
npm run build:prod
Führen Sie Winscope aus mit:
npm run start
Spuren erfassen
Sie können Ablaufverfolgungen auf dem Gerät , über Winscope oder über Android Debug Bridge (adb) -Befehle erfassen.
Erfassen Sie Spuren auf dem Gerät
Erfassen Sie Spuren auf dem Gerät, um Daten zu sammeln, wenn Sie Fehler bei Animationsproblemen melden. Mit dieser Methode werden alle UI-Traces aufgezeichnet, da die Konfiguration nicht angepasst werden kann.
Auf Ihrem Android-Gerät:
- Entwickleroptionen aktivieren .
- Wählen Sie unter Entwickleroptionen die Option Systemverfolgung aus.
- Aktivieren Sie Winscope-Traces sammeln .
- Unter Sonstiges :
- Aktivieren Sie Aufzeichnungen an Fehlerberichte anhängen .
- Aktivieren Sie Kachel „Schnelleinstellungen anzeigen“ .
- Navigieren Sie zu der Stelle, an der Sie den Fehler reproduzieren müssen.
Um die Erfassung zu starten, öffnen Sie die Schnelleinstellungen und wählen Sie Trace aufzeichnen aus:
Abbildung 1. Schnelleinstellungsmenü mit Record Trace.
Führen Sie nur die Schritte aus, die zur Reproduktion des Fehlers erforderlich sind .
Um die Erfassung zu stoppen, öffnen Sie die Schnelleinstellungen und wählen Sie „Tracing beenden“ aus.
Teilen Sie das erfasste Protokoll mit einer der aufgeführten Optionen, z. B. Gmail, Drive oder BetterBug.
Erfassen Sie Spuren über Winscope
Sie können Traces mit Winscope für die lokale Entwicklung und das Debuggen erfassen. Winscope verwendet adb , das Geräteverbindungen über USB oder WLAN unterstützt.
Auf Winscope:
Klicken Sie im Bildschirm „Traces sammeln“ auf „ADB-Proxy“ :
Abbildung 2. Erfassen Sie Spuren auf Winscope.
Starten Sie den Winscope ADB Connect-Proxy, um Traces direkt von Ihrem Browser aus zu erfassen.
Führen Sie den Befehl aus:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Um die Erfassung zu starten, wählen Sie im Bildschirm „Traces sammeln“ die Ziele und die Konfiguration aus und klicken Sie auf Trace starten :
Abbildung 3. Spuren auf Winscope sammeln.
Um die Erfassung zu stoppen, klicken Sie auf Trace beenden :
Abbildung 4. Ablaufverfolgung auf Winscope beenden.
Während das Tool die Ablaufverfolgungen auf die Benutzeroberfläche von Winscope hochlädt, werden die Meldungen „Fetching and Parsing Proto Files“ auf dem Bildschirm angezeigt.
Generieren Sie den Status-Dump mit Winscope
Um mit Winscope einen Status-Dump zu erstellen, wählen Sie im Bildschirm „Traces sammeln“ die Registerkarte „Dump“ und klicken Sie dann auf „Dump-Status“ :
Abbildung 5. Dump-Status auf Winscope.
Erfassen Sie Spuren über ADB-Befehle
Führen Sie adb root
, bevor Sie die adb shell
Befehle für jede der folgenden Spuren ausführen. Am Ende der Ablaufverfolgung stehen die Ablaufverfolgungsdateien in /data/misc/wmtrace
zur Verfügung. Informationen zum Kopieren einer Datei oder eines Verzeichnisses und seiner Unterverzeichnisse von einem Gerät finden Sie unter Dateien auf und von einem Gerät kopieren . Weitere Informationen finden Sie unter adb .
WindowManager-Traces
So erfassen Sie WindowManager-Spuren:
Trace aktivieren:
adb shell wm tracing start
Trace deaktivieren:
adb shell wm tracing stop
Speichern Sie Protokollierungsdaten in einer Datei, während Sie eine Trace-Erfassung ausführen:
adb shell wm tracing save-for-bugreport
Trace einmal pro Frame protokollieren:
adb shell wm tracing frame
Protokollieren Sie 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
Stellen Sie die Protokollebene auf
critical
“ (nur sichtbare Fenster mit reduzierten Informationen),trim
(alle Fenster mit reduzierten Informationen) oder „all
“ (alle Fenster und Informationen) ein:adb shell wm tracing level
ProtoLog
Die folgenden Befehle werden für das ProtoLog- System verwendet.
Im system_server
Prozess:
ProtoLog starten:
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 die Logcat- Protokollierung für bestimmte Protokollgruppen:
adb shell cmd window logging enable-text [group...]
Deaktivieren Sie die Logcat-Protokollierung für bestimmte Protokollgruppen:
adb shell cmd window logging disable-text [group...]
In WMShell:
ProtoLog starten:
adb shell dumpsys activity service SystemUIService WMShell
Übergangsverfolgung
Die folgenden Befehle werden für die Übergangsverfolgung verwendet:
Im system_server
Prozess:
Starten Sie einen Trace:
adb shell cmd window shell tracing start
Einen Trace stoppen:
adb shell cmd window shell tracing stop
Starten Sie einen Trace in WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
Stoppen Sie einen Trace in WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
Eingabemethoden-Editor
Die folgenden Befehle werden für die Ablaufverfolgung des Eingabemethoden-Editors (IME) verwendet:
Starten Sie die IME-Ablaufverfolgung für Input Method (IM)-Clients, Input Method Service (IMS) und Input Method Management Service (IMMS):
adb shell ime tracing start
Beginnen Sie mit der Verfolgung von IME-Clients, IMS und IMMS:
adb shell ime tracing stop
SurfaceFlinger-Schichten
Die SurfaceFlinger-Ebenenverfolgung verwendet Perfetto-Trace zur Erfassung. Konfigurationsinformationen finden Sie unter Trace-Konfiguration .
Sehen Sie sich das folgende Beispiel einer Konfiguration für die SurfaceFlinger-Ebenenverfolgung an:
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
}
}
}
Sehen Sie sich den folgenden Beispielbefehl an, um eine Ablaufverfolgung für SurfaceFlinger-Ebenen zu generieren:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
SurfaceFlinger-Transaktionen
Die SurfaceFlinger-Transaktionsverfolgung verwendet Perfetto-Trace zur Erfassung. Konfigurationsinformationen finden Sie unter Trace-Konfiguration .
Sehen Sie sich das folgende Beispiel einer Perfetto-Konfiguration für die aktive Ablaufverfolgung von SurfaceFlinger an:
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
Sehen Sie sich das folgende Beispiel einer Perfetto-Konfiguration für die kontinuierliche Verfolgung von SurfaceFlinger an:
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
}
}
}
Sehen Sie sich den folgenden Beispielbefehl an, um eine Ablaufverfolgung für SurfaceFlinger-Transaktionen zu generieren:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Erzeugen Sie einen Status-Dump mit adb
Winscope liest einen Snapshot der WindowManager- und SurfaceFlinger-Zustände aus Fehlerberichten. Die Fehlerberichte speichern die Zustände als separate Protodateien im proto
Ordner. Führen Sie die folgenden Befehle aus, um die Status-Dumps 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
Spuren analysieren
Um vorübergehende und ungültige Zustände zu debuggen, die Animationsprobleme verursachen, aggregiert Winscope verschiedene Trace-Dateien, bietet Suche und Visualisierung über Frames und Zeitleisten und präsentiert Protobuf-Meldungen auf kohärente Weise. Das Analysieren von Spuren in Winscope hilft dabei, die genaue Ebene, den Rahmen und den Status des Auftretens des Fehlers zu ermitteln.
Verwenden Sie Winscope
Wenn Sie Spuren erfasst haben, analysieren Sie die Spuren auf Winscope:
Laden Sie Ihre gespeicherten Spuren über das Bedienfeld rechts hoch. Sie können hochgeladene Spuren entfernen oder weitere Spuren hochladen.
Abbildung 6. Hochladen von Ablaufverfolgungen auf Winscope.
Klicken Sie auf Spuren anzeigen , um die hochgeladenen Spuren anzuzeigen. Im oberen Bereich des Fensters werden für jede Kurve Registerkarten angezeigt. Wenn die hochgeladene Datei die relevanten Spuren enthält, wird eine schwebende Ansicht der Bildschirmaufzeichnungsspur auf dem Bildschirm eingeblendet.
Abbildung 7. Spuren auf Winscope anzeigen.
Verwenden Sie zum Umbenennen die Benutzeroberfläche im obersten Bereich des Fensters und laden Sie Ihre hochgeladene Ablaufverfolgung herunter oder um ein neues hochzuladen.
Navigieren Sie mit dem Zeitschieberegler unten im Fenster durch die Spuren im Zeitverlauf. Für eine zusätzliche Zeitnavigation nutzen Sie die folgenden Funktionen, wie in Abbildung 8 dargestellt:
- Um zu einer bestimmten Zeit oder einem bestimmten Ereignis zu navigieren, verwenden Sie den Cursor (Zeitschieberegler) oder die linke Maustaste und rechts Pfeile im Zeitanzeigefeld (untere linke Ecke) oder die Links- und Rechtspfeile auf Ihrer Tastatur.
- Um ausgewählte farbcodierte Spuren auf der Zeitleiste anzuzeigen, verwenden Sie das Dropdown-Menü (links vom Zeitschieberegler). Standardmäßig werden die letzten drei über die Trace-Registerkarten angezeigten Traces auf der Zeitleiste angezeigt.
- Für eine detaillierte Ansicht aller hochgeladenen Spuren verwenden Sie die Vergrößerungsfunktion oder verkleinern Klicken Sie auf das Werkzeug (unter dem Zeitschieberegler) oder scrollen Sie auf Ihrer Tastatur. Verwenden Sie die Reset-Taste, um die Zoomstufe zurückzusetzen.
- Für eine erweiterte Ansicht der Trace-Verteilung im Zeitverlauf klicken Sie auf den Aufwärtspfeil (untere rechte Ecke).
Abbildung 8. Zeitnavigation in Winscope.
Wählen Sie in der erweiterten Ansicht (Abbildung 9) bestimmte Zeitrahmen aus und vergrößern Sie sie zur besseren Kontrolle:
Abbildung 9. Erweiterte Zeitleiste auf Winscope.
Um Spuren zu untersuchen, können Sie den Gerätezustand mit der Bildschirmaufzeichnung einsehen. Um eine bestimmte Ablaufverfolgung zu untersuchen, klicken Sie im oberen Bereich des Tools auf die entsprechende Ablaufverfolgungsregisterkarte.
Für die Surface Flinger- Spur zeigen drei Panels unterschiedliche Ansichten der Spur zu einem bestimmten Zeitraum an, wie in Abbildung 10 dargestellt:
Abbildung 10. Surface Flinger-Trace auf Winscope.
Ebenenansicht : Eine 3D-Ansicht der Ebenen in rechteckigen Überlagerungen. Die folgenden UI-Elemente passen die Rechtecke an, um die grafischen Elemente hinsichtlich ihrer Position, Größe, Transformation und Z-Reihenfolge darzustellen:
- Der Schieberegler „Rotation“ (oben links in der Ebenenansicht) dreht die geschichteten Rechtecke, um sie in ausgewählten Winkeln anzuzeigen.
- Der Schieberegler „Abstand“ (oben rechts in der Ebenenansicht) passt den Abstand zwischen den Ebenen an, um die ausgewählte zusammengesetzte Ansicht zu erstellen.
- Mit den Zoom-Werkzeugen (oben rechts in der Ebenenansicht) können Sie hineinzoomen und herauszoomen zur besseren Kontrolle in die Schichten einarbeiten.
- Der Reset-Knopf (oben rechts in der Ebenenansicht) stellt die Kameraeinstellungen auf die ursprüngliche Ansicht zurück.
- Ziehen Sie die Rechtecke, um ein besseres Zoomen zu ermöglichen.
Hierarchieansicht : Eine vollständige Hierarchie der Ebenen.
- Nur sichtbar (oben rechts in der Hierarchieansicht). Wenn diese Option ausgewählt ist, werden unsichtbare Ebenen aus der Hierarchie ausgeblendet, um die Visualisierung der Elemente auf dem Bildschirm zu erleichtern.
- Flach (oben rechts in der Hierarchieansicht) zeigt bei Auswahl die Hierarchie als flache Liste von Ebenen an.
- „Diff anzeigen“ (oben links in der Hierarchieansicht) ist nur ausgewählt, wenn ein Zustandsübergang vorliegt. Bei Auswahl vergleicht das Tool den aktuellen Status mit dem vorherigen. Ein neues Element wird grün hervorgehoben, ein gelöschtes Element wird rot hervorgehoben und ein geändertes Element wird blau hervorgehoben.
Eigenschaftenansicht : Eigenschaften der ausgewählten Ebene. Der obere Bereich der Eigenschaftenansicht enthält nur Informationen zu Schlüsseleigenschaften wie Sichtbarkeit , Geometrie und Puffer . Der untere Bereich der Eigenschaftenansicht enthält einen Proto-Dump aller Eigenschaften.
- Das Kontrollkästchen „Diff anzeigen“ (oben links in der Eigenschaftenansicht) verhält sich wie in der Hierarchieansicht .
- Standardwerte anzeigen (oben links in der Eigenschaftenansicht). Wenn diese Option ausgewählt ist, werden die Standard-Protowerte im Proto-Dump angezeigt. Standardmäßig werden diese Werte nicht im Proto Dump aufgeführt. Die Standard-Protowerte werden der Proto-Felddefinition entnommen. Wenn für ein Proto-Feld kein Standardwert ungleich Null festgelegt ist, werden folgende Standard-Proto-Werte angezeigt:
- Zeichenfolgen: Null
- Zahlen: 0
- Boolesche Werte: Falsch
- Objekte: Null
Die Auswahl zwischen den drei Ansichten und die Bildschirmaufzeichnung erfolgt synchronisiert, d. h. alle Traces werden synchron aktualisiert, wenn Sie zu einem anderen Zeitpunkt navigieren. Um die Eigenschaften einer Ebene anzuzeigen, wählen Sie die Ebene aus, indem Sie in der Hierarchieansicht darauf klicken oder in der Eigenschaftenansicht auf das entsprechende Rechteck klicken. Ein violettes Rechteck zeigt an, dass dieser Ebene eine Ansichtsspur zugeordnet ist. Wenn Sie auf eine violette Ebene doppelklicken, navigiert die Benutzeroberfläche, um zur entsprechenden Registerkarte „Ansichtsverfolgung“ zu wechseln.
Für die Window Manager- Ablaufverfolgung zeigen drei Panels unterschiedliche Ansichten der Ablaufverfolgung zu einem bestimmten Zeitraum an, wie in Abbildung 11 dargestellt:
- Windows- Ansicht: Eine 3D-Ansicht der Ebenen.
- Hierarchieansicht : Eine vollständige Hierarchie der Ebenen.
- Die Eigenschaftenansicht enthält einen Proto-Dump aller Eigenschaften.
Die Auswahl zwischen den drei Ansichten und die Bildschirmaufzeichnung erfolgt synchronisiert, d. h. alle Traces werden synchron aktualisiert, wenn Sie zu einem anderen Zeitpunkt navigieren.
Abbildung 11. Window Manager-Trace auf Winscope.
Bei Transaktionsablaufverfolgungen werden die Transaktionen zwischen Surface Flinger und Window Manager im Tabellenformat dargestellt, das nach den angezeigten IDs, Typ und Text durchsucht werden kann, zusammen mit einer Eigenschaftenansicht, die den Proto-Dump anzeigt. Auswahl zwischen den beiden Ansichten und die Bildschirmaufzeichnung wird synchronisiert:
Abbildung 12. Transaktionsverfolgung auf Winscope.
Für ProtoLog- Traces werden die Informationen in einem Tabellenformat dargestellt, das nach Tags, Quelldateien und Text durchsucht werden kann:
Abbildung 13. ProtoLog-Trace auf Winscope.
Für Übergangsspuren wird eine Liste von Übergängen mit ID, Typ, Sendezeit, Dauer und Status zusammen mit den Eigenschaften des ausgewählten Übergangs angezeigt:
Abbildung 14. Übergangsverfolgung auf Winscope.