Sie können SQL verwenden, um bestimmte Status in Winscope Perfetto-Traces zu finden. Um Abfragen auszuführen und tabellarische Ergebnisse zu visualisieren, verwenden Sie den globalen Viewer Search in der Winscope-Benutzeroberfläche:
Abbildung 1: Viewer-Tab „Search“
Im Viewer Search 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-, Transaktions-, Übergangs- und ViewCapture-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
. Eine Punktnotation steht für verschachtelte Eigenschaften, 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.
In
value
- undprevious_value
-Spalten werden boolesche Werte durch0
(False
) oder1
(True
) dargestellt.
Winscope erstellt diese Ansichten, indem Daten aus sitzungsspezifischen Tabellen mit der Perfetto-Tabelle args
zusammengeführt werden.
Sie können diese Tabellen direkt abfragen. In der Tabelle args
entsprechen die Spalten key
, flat_key
und display_value
den Ansichtsspalten property
, flat_property
und value
.
args
-Tabelle:
Spalte | Beschreibung |
---|---|
arg_set_id |
Wird verwendet, um eine Reihe von Argumenten zu verknüpfen. |
flat_key |
Eigenschaftsname aus der Proto-Nachricht, wobei wiederkehrende Felder nicht berücksichtigt werden |
key |
Eigenschaftsname aus der Proto-Nachricht, unter Berücksichtigung wiederkehrender Felder |
value_type |
Eigenschaftswerttyp |
int_value |
Eigenschaftswert, wenn der Werttyp eine Ganzzahl ist |
string_value |
Eigenschaftswert, wenn der Werttyp ein String ist |
real_value |
Eigenschaftswert, wenn der Werttyp „real“ ist |
display_value |
Eigenschaftswert in String umgewandelt |
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
.
Um in Ebenendaten zu suchen, verwenden Sie die Ansicht sf_layer_search
. Diese Ansicht enthält die folgenden Spalten:
Spalte | Beschreibung |
---|---|
state_id |
Zeilen-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 |
Eigenschaftsname, der wiederkehrende Felder berücksichtigt |
flat_property |
Im Eigenschaftsnamen werden keine wiederkehrenden Felder berücksichtigt |
value |
Eigenschaftswert im Stringformat |
previous_value |
Eigenschaftswert aus dem vorherigen Eintrag im Stringformat |
Um nach Daten zu Hierarchie-Stammelementen zu suchen, verwenden Sie die Ansicht sf_hierarchy_root_search
. Diese Ansicht enthält die folgenden Spalten:
Spalte | Beschreibung |
---|---|
state_id |
Zeilen-ID des Eintrags |
ts |
Zeitstempel des Eintrags |
property |
Eigenschaftsname, der wiederkehrende Felder berücksichtigt |
flat_property |
Im Eigenschaftsnamen werden keine wiederkehrenden Felder berücksichtigt |
value |
Eigenschaftswert im Stringformat |
previous_value |
Eigenschaftswert 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'
Alle Frames finden, 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 Eigenschaften 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, ']') ), '%' )
Datentabellen
Die SurfaceFlinger-Ansichten werden mit den folgenden zugrunde liegenden Tabellen erstellt.
surfaceflinger_layers_snapshot
:
Spalte | Beschreibung |
---|---|
id |
Zeilen-ID für den Eintrag |
ts |
Zeitstempel des Eintrags |
arg_set_id |
ID, mit der Zeilen aus der Tabelle args mit diesem Eintrag verknüpft werden |
surfaceflinger_layer
:
Spalte | Beschreibung |
---|---|
id |
Zeilen-ID für die Ebene |
snapshot_id |
Zeilen-ID des Eintrags aus surfaceflinger_layers_snapshot , zu dem die Ebene gehört |
arg_set_id |
ID, mit der Zeilen aus der Tabelle args mit dieser Ebene verknüpft werden |
SQL-Ansicht „Transactions“
Die Proto-Transaktionsdaten haben das Format TransactionTraceEntry
.
Um in Transaktions-Trace-Daten zu suchen, verwenden Sie die Ansicht transactions_search
. Diese Ansicht enthält die folgenden Spalten:
Spalte | Beschreibung |
---|---|
state_id |
Zeilen-ID des Eintrags, zu dem die Proto-Eigenschaft gehört |
ts |
Zeitstempel des Eintrags, zu dem die Proto-Eigenschaft gehört |
transaction_id |
Transaktions-ID, falls verfügbar |
property |
Eigenschaftsname, der wiederkehrende Felder berücksichtigt |
flat_property |
Im Eigenschaftsnamen werden keine wiederkehrenden Felder berücksichtigt |
value |
Eigenschaftswert im Stringformat |
Beispielabfragen
Frame suchen, 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'
Frame suchen, in dem die
ImeContainer
-Ebene hinzugefügt wurde:SELECT ts FROM transactions_search WHERE flat_property='added_layers.name' AND value='ImeContainer'
Datentabellen
Die SQL-Ansicht „Transactions“ wird mit den folgenden zugrunde liegenden Tabellen erstellt.
surfaceflinger_transactions
:
Spalte | Beschreibung |
---|---|
id |
Zeilen-ID für den Eintrag |
ts |
Zeitstempel des Eintrags |
arg_set_id |
ID, mit der Zeilen aus der Tabelle args mit diesem Eintrag verknüpft werden |
vsync_id |
VSync-ID, die mit allen Transaktionen in diesem Eintrag verknüpft ist |
android_surfaceflinger_transaction
:
Spalte | Beschreibung |
---|---|
id |
Zeilen-ID für die Transaktion |
snapshot_id |
Zeilen-ID des Eintrags aus surfaceflinger_transactions , zu dem die Transaktion gehört |
arg_set_id |
ID, mit der Zeilen aus der Tabelle args mit dieser Transaktion verknüpft werden |
transaction_id |
Transaktions-ID aus der Proto-Nachricht |
pid |
Transaktions-PID aus der Proto-Nachricht |
uid |
Transaktions-UID aus der Proto-Nachricht |
layer_id |
ID der mit der Transaktion verknüpften Ebene, falls zutreffend |
display_id |
ID des Displays, das mit der Transaktion verknüpft ist, falls zutreffend |
flags_id |
ID, die zum Abrufen der zugehörigen Flags von android_surfaceflinger_transaction_flag verwendet wird |
transaction_type |
Transaktionstyp |
android_surfaceflinger_transaction_flag
:
Spalte | Beschreibung |
---|---|
flags_id |
Entspricht dem Wert in einer Zeile in android_surfaceflinger_transaction |
flag |
Übersetzter Flag-String |
Einzelne Transaktionen werden der args-Tabelle aus verschiedenen Proto-Nachrichtenformaten hinzugefügt, je nach Transaktionstyp:
LAYER_ADDED
:LayerCreationArgs
FormatLAYER_CHANGED
:LayerState
FormatDISPLAY_ADDED
:DisplayState
FormatDISPLAY_CHANGED
:DisplayState
FormatLAYER_DESTROYED
: Keine ArgumenteLAYER_HANDLE_DESTROYED
: Keine ArgumenteDISPLAY_REMOVED
: Keine ArgumenteNOOP
: Keine Argumente
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 |
Zeitpunkt der Auslösung; falls verfügbar, wird die Zeit des Sendens verwendet, andernfalls 0 |
transition_id |
Übergangs-ID aus der Proto-Nachricht |
property |
Eigenschaftsname, der wiederkehrende Felder berücksichtigt |
flat_property |
Im Eigenschaftsnamen werden keine wiederkehrenden Felder berücksichtigt |
value |
Transaktions-UID aus der Proto-Nachricht |
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
Datentabellen
Die Ansicht „Übergänge“ wird mit den folgenden zugrunde liegenden Tabellen erstellt.
window_manager_shell_transitions
:
Spalte | Beschreibung |
---|---|
id |
Zeilen-ID für den Übergang |
ts |
Zeitpunkt der Auslösung; falls verfügbar, wird der Zeitpunkt des Sendens verwendet, andernfalls 0 |
transition_id |
Übergangs-ID aus der Proto-Nachricht |
arg_set_id |
ID, mit der Zeilen aus der Tabelle args mit diesem Übergang verknüpft werden |
transition_type |
Übergangstyp aus Proto-Nachricht |
send_time_ns |
Zeitpunkt des Sendens der Übergangsnachricht, aus der Proto-Nachricht übernommen |
dispatch_time_ns |
Aus der Proto-Nachricht übernommene Zeit für den Übergang |
duration_ns |
Dauer des Übergangs, falls Start- und Endzeit verfügbar |
handler |
Übergangs-Handler: Übersetzung von window_manager_shell_transition_handlers abrufen |
status |
Status des Übergangs: played , merged oder aborted |
flags |
Übergangsflags aus der Proto-Nachricht |
window_manager_shell_transition_handlers
:
Spalte | Beschreibung |
---|---|
handler_id |
ID, die dem Wert in der Spalte handler von window_manager_shell_transitions entspricht |
handler_name |
Stringübersetzung |
android_window_manager_shell_transition_participants
:
Spalte | Beschreibung |
---|---|
transition_id |
Übergangs-ID aus der Roh-Proto-Nachricht |
layer_id |
ID des SurfaceFlinger-Ebenenteilnehmers |
window_id |
ID des WindowManager-Containerteilnehmers |
SQL-Ansicht „ViewCapture“
Für die ViewCapture-Proto-Daten wird das Format View
verwendet.
Verwenden Sie die Ansicht viewcapture_search
, um nach Daten zu ViewCapture zu suchen. Diese Ansicht enthält die folgenden Spalten:
Spalte | Beschreibung |
---|---|
state_id |
Zeilen-ID des Status, zu dem die Ansicht gehört |
ts |
Zeitstempel des Status, zu dem die Daten gehören |
package_name |
Paketname |
window_name |
Fenstername |
class_name |
Kursnamen ansehen |
property |
Eigenschaftsname, der wiederkehrende Felder berücksichtigt |
flat_property |
Im Eigenschaftsnamen werden keine wiederkehrenden Felder berücksichtigt |
value |
Eigenschaftswert im Stringformat |
previous_value |
Eigenschaftswert 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
Datentabellen
Die Ansicht „Ansichtsaufzeichnung“ wird mit den folgenden zugrunde liegenden Tabellen erstellt.
android_viewcapture
:
Spalte | Beschreibung |
---|---|
id |
Zeilen-ID für den Eintrag |
ts |
Zeitstempel des Eintrags |
arg_set_id |
ID, mit der Zeilen aus der Tabelle args mit diesem Eintrag verknüpft werden |
android_viewcapture_view
:
Spalte | Beschreibung |
---|---|
id |
Zeilen-ID für die Ansicht |
snapshot_id |
Zeilen-ID des Eintrags aus android_viewcapture , zu dem die Ansicht gehört |
arg_set_id |
ID, mit der Zeilen aus der Tabelle args mit dieser Ansicht verknüpft werden |
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
Sie können Suchanfragen über den Bereich GLOBALE SUCHE links im Suche-Viewer ausführen.
Wenn Sie zum ersten Mal mit dem Bereich GLOBALE SUCHE interagieren, wird die Trace-Suche initialisiert und Winscope erstellt die Hilfs-SQL-Ansichten. Das kann einige Sekunden dauern. Während der Trace-Suche wird die Zeitachse nicht angezeigt.
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 gibt es auch ein Feld, in dem Sie die Suchanfrage zwischen den 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: Im linken 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