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:
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
undflat_property
:- Eigenschaftsnamen werden in Snake Case geschrieben, z. B.
visible_region
vonLayerProto
. 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 Feldtop
beispielsweise durchvisible_region.rect[0].top
undvisible_region.rect[1].top
dargestellt.Wiederkehrende Felder in
flat_property
sind nicht unterscheidbar:In zwei Instanzen des wiederkehrenden Felds
visible_region.rect
wird das Feldtop
beispielsweise in beiden Instanzen durchvisible_region.rect.top
dargestellt.
- Eigenschaftsnamen werden in Snake Case geschrieben, z. B.
Für die Spalten
value
undprevious_value
:- Boolesche Werte werden durch
'0'
(False
) oder'1'
(True
) dargestellt.
- Boolesche Werte werden durch
SurfaceFlinger-SQL-Ansichten
Für SurfaceFlinger-Protodaten werden die folgenden Formate verwendet:
Die Ebenendaten haben das Format
LayerProto
.Die Daten des Hierarchie-Stammknotens haben das Format
LayersSnapshotProto
.
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
-Ebenecolor.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:
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“:
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:
Abbildung 4: Suchzeitachse