Verfolgen Sie Fensterübergänge mit Winscope

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:

  1. Laden Sie die Android-Quelle herunter .
  2. Navigieren Sie zum Winscope-Ordner:

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

    npm install
    

    Um eine Liste der verfügbaren Befehle anzuzeigen, führen Sie Folgendes aus: npm run

  4. Erstellen Sie alle Produkt- und Testziele mit:

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

  1. Entwickleroptionen aktivieren .
  2. Wählen Sie unter Entwickleroptionen die Option Systemverfolgung aus.
  3. Aktivieren Sie Winscope-Traces sammeln .
  4. Unter Sonstiges :
    1. Aktivieren Sie Aufzeichnungen an Fehlerberichte anhängen .
    2. Aktivieren Sie Kachel „Schnelleinstellungen anzeigen“ .
  5. Navigieren Sie zu der Stelle, an der Sie den Fehler reproduzieren müssen.
  6. Um die Erfassung zu starten, öffnen Sie die Schnelleinstellungen und wählen Sie Trace aufzeichnen aus:

    quick_setting_winscope

    Abbildung 1. Schnelleinstellungsmenü mit Record Trace.

  7. Führen Sie nur die Schritte aus, die zur Reproduktion des Fehlers erforderlich sind .

  8. Um die Erfassung zu stoppen, öffnen Sie die Schnelleinstellungen und wählen Sie „Tracing beenden“ aus.

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

  1. Klicken Sie im Bildschirm „Traces sammeln“ auf „ADB-Proxy“ :

    capture_traces_winscope

    Abbildung 2. Erfassen Sie Spuren auf Winscope.

  2. Starten Sie den Winscope ADB Connect-Proxy, um Traces direkt von Ihrem Browser aus zu erfassen.

  3. Führen Sie den Befehl aus:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Um die Erfassung zu starten, wählen Sie im Bildschirm „Traces sammeln“ die Ziele und die Konfiguration aus und klicken Sie auf Trace starten :

    collect_traces_winscope

    Abbildung 3. Spuren auf Winscope sammeln.

  5. Um die Erfassung zu stoppen, klicken Sie auf Trace beenden :

    end_trace_winscope

    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“ :

dump-winscope

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:

  1. Laden Sie Ihre gespeicherten Spuren über das Bedienfeld rechts hoch. Sie können hochgeladene Spuren entfernen oder weitere Spuren hochladen.

    upload_traces_winscope

    Abbildung 6. Hochladen von Ablaufverfolgungen auf Winscope.

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

    view_traces_winscope

    Abbildung 7. Spuren auf Winscope anzeigen.

    Verwenden Sie zum Umbenennen die Benutzeroberfläche im obersten Bereich des FenstersNamen bearbeiten und laden Sie Ihre hochgeladene Ablaufverfolgung herunterdownload_trace oder um ein neues hochzuladen.

  3. 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 MaustasteArrow_left_time und rechtsArrow_right_time 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ößerungsfunktionzoom_in_time oder verkleinernzoom_out_time 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ärtspfeilArrow_up_time (untere rechte Ecke).

    time_nav_winscope

    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:

    expand_time_winscope

    Abbildung 9. Erweiterte Zeitleiste auf Winscope.

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

      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 hineinzoomenzoom_in_time und herauszoomenzoom_out_time zur besseren Kontrolle in die Schichten einarbeiten.
        • Der Reset-Knopfreset_sf (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.

      wm_trace

      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:

      transaction_trace

      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:

      protolog_trace

      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:

      transitions_trace

      Abbildung 14. Übergangsverfolgung auf Winscope.