Fensterübergänge mit Winscope verfolgen

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:

  1. Laden Sie die Android-Quelle herunter.
  2. Wechseln Sie zum Ordner „Winscope“:

    cd development/tools/winscope
    
  3. Installieren Sie Abhängigkeiten mit:

    npm install
    

    Führen Sie folgenden Befehl aus, um eine Liste der verfügbaren Befehle aufzurufen: npm run

  4. Erstellen Sie alle Produktions- und Testziele mithilfe von:

    npm run build:prod
    
  5. 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:

  1. Entwickleroptionen aktivieren
  2. Wählen Sie unter „Entwickleroptionen“ die Option System-Tracing aus.
  3. Aktivieren Sie WinScope-Traces erfassen.
  4. Unter Verschiedenes:
    1. Aktivieren Sie Aufzeichnungen an Fehlerberichte anhängen.
    2. Aktivieren Sie Schnelleinstellungen-Kachel anzeigen.
  5. Gehen Sie zu der Stelle, an der Sie den Fehler reproduzieren müssen.
  6. Öffnen Sie dazu die Schnelleinstellungen und wählen Sie Trace aufzeichnen aus:

    schnelle_einstellung_winscope

    Abbildung 1. Menü „Schnelleinstellung“ mit „Trace aufzeichnen“.

  7. Führen Sie nur die Schritte aus, die zum Reproduzieren des Fehlers erforderlich sind.

  8. Wenn Sie die Erfassung beenden möchten, öffnen Sie die Schnelleinstellungen und wählen Sie Tracing beenden aus.

  9. 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:

  1. Klicken Sie auf dem Bildschirm Traces erfassen auf ADB-Proxy:

    Erfassung_Traces_Winscope

    Abbildung 2: Erfassen Sie Traces in Winscope.

  2. Starten Sie den Winscope ADB Connect-Proxy, um Traces direkt über Ihren Browser zu erfassen.

  3. Führen Sie den folgenden Befehl aus:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Wählen Sie zum Starten der Erfassung auf dem Bildschirm Traces erfassen die Ziele und die Konfiguration aus und klicken Sie auf Trace starten:

    Collect_traces_winscope

    Abbildung 3 Erfassen Sie Traces in Winscope.

  5. Klicken Sie auf Aufzeichnung beenden, um die Aufzeichnung zu beenden:

    end_trace_winscope

    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:

Dump-Winscope

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) oder all (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:

  1. Laden Sie Ihre gespeicherten Traces über den Bereich rechts hoch. Sie können hochgeladene Traces entfernen oder weitere hochladen.

    upload_traces_winscope

    Abbildung 6 Laden Sie Traces in Winscope hoch.

  2. 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.

    View_traces_winscope

    Abbildung 7: Traces in Winscope ansehen.

    Verwenden Sie die Benutzeroberfläche im obersten Bereich des Fensters, um edit_nameumzubenennen und den hochgeladenen Trace Download-Traceherunterzuladen oder einen neuen hochzuladen.

  3. 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 Pfeil_Links_Zeit- und den rechten arrow_right_time-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 zoom_in_time oder zoom_out_time 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 arrow_up_time (unten rechts), um eine erweiterte Ansicht der Trace-Verteilung im Zeitverlauf aufzurufen.

    time_nav_winscope

    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:

    expand_time_winscope

    Abbildung 9: Erweiterte Zeitachse in Winscope

  4. 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: sf_trace

      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 heranZoom-Zeit bzw. herausZoom_out_timezoomen, um die Ebenen besser zu sehen.
        • Mit der Schaltfläche „Zurücksetzen“ reset_sf (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.

      wm_trace

      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:

      transaction_trace

      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:

      protolog-Trace

      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:

      transitions_trace

      Abbildung 14. Übergangs-Trace in Winscope.