Trace-Suche

Mit SQL nach bestimmten Status in Winscope Perfetto-Traces suchen Verwenden Sie den globalen Suchanzeiger in der Winscope-Benutzeroberfläche, um Abfragen auszuführen und tabellarische Ergebnisse zu visualisieren:

Tab „Suche ansehen“

Abbildung 1: Tab „Suche“

Im Suchbetrachter können Sie benutzerdefinierte SQL-Abfragen für Perfetto-Traces schreiben und ausführen sowie auf aktuelle und gespeicherte Abfragen zugreifen. Winscope bietet spezielle SQL-Ansichten, die bei der Suche nach SurfaceFlinger- und Transaktions-Traces helfen.

Verwenden Sie für alle Ansichten die folgenden Konventionen:

  • Für die Spalten property und flat_property:

    • Eigenschaftsnamen werden in Snake Case geschrieben, z. B. visible_region von LayerProto.
    • Verschachtelte Properties werden mit einer Punktnotation dargestellt, z. B. visible_region.rect.

    • Wiederkehrende Felder in property werden durch eckige Klammern gekennzeichnet:

      In zwei Instanzen des wiederkehrenden Felds visible_region.rect wird das Feld top beispielsweise durch visible_region.rect[0].top und visible_region.rect[1].top dargestellt.

    • Wiederkehrende Felder in flat_property sind nicht unterscheidbar:

      In zwei Instanzen des wiederkehrenden Felds visible_region.rect wird das Feld top beispielsweise in beiden Instanzen durch visible_region.rect.top dargestellt.

  • Für die Spalten value und previous_value:

    • Boolesche Werte werden durch '0' (False) oder '1' (True) dargestellt.

SurfaceFlinger-SQL-Ansichten

Für SurfaceFlinger-Protodaten werden die folgenden Formate verwendet:

Verwenden Sie die Ansicht sf_layer_search, um in Ebenendaten zu suchen. Diese Ansicht enthält die folgenden Spalten:

Spalte Beschreibung
state_id Eindeutige ID des Eintrags, zu dem die Ebene gehört
ts Zeitstempel des Eintrags, zu dem die Ebene gehört
layer_id Ebenen-ID
parent_id Ebenen-ID des übergeordneten Elements
layer_name Ebenenname
property Property-Name, der wiederkehrende Felder berücksichtigt
flat_property Im Property-Namen werden keine wiederkehrenden Felder berücksichtigt
value Property-Wert im Stringformat
previous_value Property-Wert aus dem vorherigen Eintrag im Stringformat

Verwenden Sie die Ansicht sf_hierarchy_root_search, um nach Daten zu Hierarchie-Stammelementen zu suchen. Diese Ansicht enthält die folgenden Spalten:

Spalte Beschreibung
state_id Eindeutige ID des Eintrags
ts Zeitstempel des Eintrags
property Property-Name, der wiederkehrende Felder berücksichtigt
flat_property Im Property-Namen werden keine wiederkehrenden Felder berücksichtigt
value Property-Wert im Stringformat
previous_value Property-Wert aus dem vorherigen Eintrag im Stringformat

Beispielabfragen

  • Alle Frames finden, in denen die IME-Ebene gültige Bildschirmgrenzen hat:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'IME%'
      AND property='screen_bounds.bottom'
      AND value<='24000'
    
  • So finden Sie alle Frames, in denen sich die Taskbar-Ebene color.a (Alpha) ändert:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name like 'Taskbar%'
      AND property='color.a'
      AND value!=previous_value
    
  • Alle Frames finden, bei denen die untere Grenze von Wallpaper kleiner oder gleich 2.400 ist:

    SELECT ts, value, previous_value FROM sf_layer_search
      WHERE layer_name LIKE 'Wallpaper%'
      AND property='bounds.bottom'
      AND cast_int!(value) <= 2400
    
  • Liste aller Properties für Displays mit einem gültigen Ebenen-Stack auflisten:

    SELECT STATE.* FROM sf_hierarchy_root_search STATE_WITH_DISPLAY_ON
    INNER JOIN sf_hierarchy_root_search STATE
      ON STATE.state_id = STATE_WITH_DISPLAY_ON.state_id
      AND STATE_WITH_DISPLAY_ON.flat_property='displays.layer_stack'
      AND STATE_WITH_DISPLAY_ON.value!='4294967295'
      AND STATE.property LIKE CONCAT(
        SUBSTRING(
            STATE_WITH_DISPLAY_ON.property,
            0,
            instr(STATE_WITH_DISPLAY_ON.property, ']')
        ),
        '%'
      )
    

SQL-Ansicht „Transaktionen“

Die Proto-Transaktionsdaten haben das Format TransactionTraceEntry.

Verwenden Sie die Ansicht transactions_search, um in Transaktionsdaten zu suchen. Diese Ansicht enthält die folgenden Spalten:

Spalte Beschreibung
state_id Eindeutige ID des Eintrags, zu dem die Proto-Property gehört
ts Zeitstempel des Eintrags, zu dem die Proto-Property gehört
transaction_id Transaktions-ID (falls verfügbar)
property Property-Name, der wiederkehrende Felder berücksichtigt
flat_property Im Property-Namen werden keine wiederkehrenden Felder berücksichtigt
value Property-Wert im Stringformat

Beispielabfragen

  • Suchen Sie den Frame, in dem eine Transaktion angewendet wurde, um die Position der Ebene X in -54.0 zu ändern:

    SELECT ts, transaction_id, value FROM transactions_search
      WHERE flat_property='transactions.layer_changes.x'
      AND value='-54.0'
    
  • Suchen Sie den Frame, in dem die ImeContainer-Ebene hinzugefügt wurde:

    SELECT ts FROM transactions_search
      WHERE flat_property='added_layers.name'
      AND value='ImeContainer'
    

SQL-Ansicht für Übergänge

Die Proto-Daten für Übergänge werden im Format ShellTransition verwendet.

Verwenden Sie die Ansicht transitions_search, um nach Daten zu Übergängen zu suchen. Diese Ansicht enthält die folgenden Spalten:

Spalte Beschreibung
ts Versandzeit – fällt auf die Versandzeit zurück, falls verfügbar, andernfalls 0
transition_id Übergangs-ID
property Property-Name, der wiederkehrende Felder berücksichtigt
flat_property Im Property-Namen werden keine wiederkehrenden Felder berücksichtigt
value Property-Wert im Stringformat

Beispielabfragen

Eigenschaften von Übergängen finden, die vom DefaultMixedHandler verarbeitet werden:

  SELECT
    PROPS.ts,
    PROPS.transition_id,
    PROPS.property,
    PROPS.value
  FROM transitions_search HANDLER_MATCH
  INNER JOIN transitions_search PROPS
    ON HANDLER_MATCH.transition_id = PROPS.transition_id
  WHERE HANDLER_MATCH.property = 'handler'
    AND HANDLER_MATCH.value LIKE "%DefaultMixedHandler"
  ORDER BY PROPS.transition_id, PROPS.property

SQL-Ansicht „ViewCapture“

Für die ViewCapture-Protodaten wird das Format View verwendet.

Verwenden Sie die Ansicht viewcapture_search, um nach Daten zu Videoaufzeichnungen zu suchen. Diese Ansicht enthält die folgenden Spalten:

Spalte Beschreibung
state_id Die eindeutige ID des Bundeslandes, zu dem die Datenansicht gehört
ts Zeitstempel des Status, zu dem die Daten gehören
package_name Paketname
window_name Fenstername
class_name Kursnamen ansehen
property Property-Name, der wiederkehrende Felder berücksichtigt
flat_property Im Property-Namen werden keine wiederkehrenden Felder berücksichtigt
value Property-Wert im Stringformat
previous_value Property-Wert aus dem vorherigen Status im Stringformat

Beispielabfragen

Alle Status ermitteln, wenn sich SearchContainerView in y-Richtung bewegt:

  SELECT * FROM viewcapture_search
  WHERE class_name LIKE '%SearchContainerView'
    AND flat_property='translation_y'
    AND value!=previous_value

ProtoLog-SQL-Tabelle

Die ProtoLog-Protodaten haben das Format ProtoLogMessage. Diese Ansicht enthält die folgenden Spalten:

Spalte Beschreibung
ts Zeitstempel des Logs
level Protokollebene
tag Tag für die Protokollierungsgruppe
message Logeintrag
stacktrace Stacktrace (falls verfügbar)
location Codespeicherort, von dem die Nachricht stammt

Beispielabfragen

  • Alle Protokolle mit einer Nachricht finden, die transition enthält:

    SELECT ts, message, location FROM protolog
      WHERE message LIKE '%transition%'
    
  • So finden Sie alle Logs, die gültige Transaktions-IDs enthalten:

    CREATE PERFETTO VIEW valid_tx_ids AS
      SELECT DISTINCT transaction_id FROM transactions_search
      WHERE transaction_id IS NOT NULL AND transaction_id != '0';
    
    SELECT TRANS.transaction_id, message FROM valid_tx_ids TRANS
    INNER JOIN protolog LOGS
      ON LOGS.message LIKE CONCAT('%', TRANS.transaction_id, '%');
    

Abfragen ausführen

Wenn Sie den linken Bereich verwenden, wird die Suche nach Spuren gestartet. Das kann einige Sekunden dauern. Während der Vorgang läuft, ist die Zeitachse nicht verfügbar.

Nachdem die Suche nach Traces initialisiert wurde, geben Sie eine Suchanfrage in das Suchfeld ein und klicken Sie auf Suchanfrage ausführen oder drücken Sie die Eingabetaste, um die Suche auszuführen.

Wenn Sie fertig sind, wird die Ergebnistabelle im mittleren Bereich angezeigt. Ihre Suchanfrage wird unter dem Suchfeld angezeigt. Dort ist auch ein Feld zu sehen, in dem Sie die Suchanfrage zwischen Sitzungen speichern können.

Sie können auf gespeicherte Abfragen zugreifen, indem Sie im linken Bereich auf den Tab Gespeichert klicken. Auf kürzlich ausgeführte Abfragen greifen Sie über den Tab Letzte zu:

linker Bereich des Suchbetrachters

Abbildung 2: Linker Bereich der Suchansicht

Ergebnisse

Alle Abfragen geben tabellarische Ergebnisse zurück, die in einer scrollbaren Ansicht mit interaktivem Verhalten angezeigt werden, ähnlich wie bei den logbasierten Trace-Viewern wie „Transactions“ und „ProtoLog“:

Suchansicht – Ergebnisse

Abbildung 3: Ergebnisse in der Suchansicht

Wenn die resultierende Tabelle eine Spalte ts enthält, werden die Werte in dieser Spalte als Zeitstempel interpretiert und dem Zeitachsen-Overlay als neue Zeile mit Einträgen hinzugefügt. Klicken Sie auf diese Zeile und verwenden Sie die Links- und Rechtspfeiltasten, um zwischen den Einträgen zu wechseln:

Zeitachse der Suche

Abbildung 4: Suchzeitachse