Utilizza SQL per trovare stati specifici nelle tracce Winscope Perfetto. Utilizza il visualizzatore Ricerca globale nell'interfaccia utente di Winscope per eseguire query e visualizzare i risultati in formato tabellare:
Figura 1. Scheda Spettatori che hanno eseguito ricerche.
Il visualizzatore Ricerca ti consente di scrivere ed eseguire query SQL personalizzate sulle tracce Perfetto, nonché di accedere alle query recenti e salvate. Winscope fornisce viste SQL specializzate per facilitare la ricerca di tracce di SurfaceFlinger, Transazioni, Transizioni e ViewCapture.
Utilizza le seguenti convenzioni per tutte le visualizzazioni:
Per le colonne
property
eflat_property
:- I nomi delle proprietà sono in snake case, ad esempio
visible_region
daLayerProto
. La notazione con il punto rappresenta le proprietà nidificate, ad esempio,
visible_region.rect
.I campi ripetuti in
property
sono distinti con parentesi quadre:Ad esempio, all'interno di due istanze del campo ripetuto
visible_region.rect
, il campotop
è rappresentato davisible_region.rect[0].top
evisible_region.rect[1].top
.I campi ripetuti in
flat_property
non sono distinguibili:Ad esempio, all'interno di due istanze del campo ripetuto
visible_region.rect
, il campotop
è rappresentato davisible_region.rect.top
in entrambe le istanze.
- I nomi delle proprietà sono in snake case, ad esempio
Per le colonne
value
eprevious_value
, i valori booleani sono rappresentati da0
(False
) o1
(True
).
Winscope crea queste viste unendo i dati di tabelle specifiche della traccia con la
tabella args
di Perfetto.
Puoi eseguire query direttamente su queste tabelle. Nella tabella args
, le colonne key
, flat_key
e display_value
sono analoghe alle colonne della vista property
, flat_property
e value
rispettivamente.
args
tabella:
Colonna | Descrizione |
---|---|
arg_set_id |
Utilizzato per associare un insieme di argomenti |
flat_key |
Nome della proprietà dal messaggio proto, senza tenere conto dei campi ripetuti |
key |
Nome della proprietà dal messaggio proto, tenendo conto dei campi ripetuti |
value_type |
Tipo di valore della proprietà |
int_value |
Valore della proprietà se il tipo di valore è un numero intero |
string_value |
Valore della proprietà se il tipo di valore è una stringa |
real_value |
Valore della proprietà se il tipo di valore è reale |
display_value |
Valore della proprietà convertito in stringa |
Visualizzazioni SQL di SurfaceFlinger
I dati proto di SurfaceFlinger utilizzano questi formati:
I dati del livello sono nel formato
LayerProto
.I dati della radice della gerarchia sono nel formato
LayersSnapshotProto
.
Per cercare i dati dei livelli, utilizza la visualizzazione sf_layer_search
. Questa visualizzazione include le seguenti
colonne:
Colonna | Descrizione |
---|---|
state_id |
ID riga della voce a cui appartiene il livello |
ts |
Timestamp della voce a cui appartiene il livello |
layer_id |
ID livello |
parent_id |
ID livello del genitore |
layer_name |
Nome livello |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Nome della proprietà non che tiene conto dei campi ripetuti |
value |
Valore della proprietà in formato stringa |
previous_value |
Valore della proprietà della voce precedente in formato stringa |
Per cercare i dati della radice della gerarchia, utilizza la visualizzazione sf_hierarchy_root_search
. Questa
visualizzazione include le seguenti colonne:
Colonna | Descrizione |
---|---|
state_id |
ID riga della voce |
ts |
Timestamp della voce |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Nome della proprietà non che tiene conto dei campi ripetuti |
value |
Valore della proprietà in formato stringa |
previous_value |
Valore della proprietà della voce precedente in formato stringa |
Esempi di query
Trova tutti i frame in cui il livello
IME
ha limiti dello schermo validi:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'IME%' AND property='screen_bounds.bottom' AND value<='24000'
Trova tutti i fotogrammi in cui cambia il livello
Taskbar
color.a
(alpha):SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'Taskbar%' AND property='color.a' AND value!=previous_value
Trova tutti i frame in cui il limite inferiore di
Wallpaper
è minore o uguale a 2400:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name LIKE 'Wallpaper%' AND property='bounds.bottom' AND cast_int!(value) <= 2400
Elenca tutte le proprietà per i display con uno stack di livelli valido:
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, ']') ), '%' )
Trovare tutti i frame in cui è visibile il gesto di scorrimento indietro
SELECT DISTINCT STATE.ts FROM sf_layer_search STATE WHERE STATE.layer_name LIKE 'EdgeBackGestureHandler%'
Tabelle di dati
Le visualizzazioni SurfaceFlinger vengono create utilizzando le seguenti tabelle sottostanti.
surfaceflinger_layers_snapshot
:
Colonna | Descrizione |
---|---|
id |
ID riga per la voce |
ts |
Timestamp della voce |
arg_set_id |
ID utilizzato per associare le righe della tabella args a questa voce |
surfaceflinger_layer
:
Colonna | Descrizione |
---|---|
id |
ID riga per il livello |
snapshot_id |
ID riga della voce di surfaceflinger_layers_snapshot a cui appartiene il livello |
arg_set_id |
ID utilizzato per associare le righe della tabella args a questo livello |
Visualizzazione SQL delle transazioni
I dati proto delle transazioni utilizzano il formato
TransactionTraceEntry
.
Per cercare i dati di traccia delle transazioni, utilizza la visualizzazione transactions_search
. Questa visualizzazione
include le seguenti colonne:
Colonna | Descrizione |
---|---|
state_id |
ID riga della voce a cui appartiene la proprietà proto |
ts |
Timestamp della voce a cui appartiene la proprietà proto |
transaction_id |
ID transazione, se disponibile |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Nome della proprietà non che tiene conto dei campi ripetuti |
value |
Valore della proprietà in formato stringa |
Esempi di query
Trova il fotogramma in cui è stata applicata una transazione per modificare la posizione X del livello in -54.0:
SELECT ts, transaction_id, value FROM transactions_search WHERE flat_property='transactions.layer_changes.x' AND value='-54.0'
Trova il frame in cui è stato aggiunto il livello
ImeContainer
:SELECT ts FROM transactions_search WHERE flat_property='added_layers.name' AND value='ImeContainer'
Tabelle di dati
La visualizzazione SQL Transazioni viene creata utilizzando le seguenti tabelle sottostanti.
surfaceflinger_transactions
:
Colonna | Descrizione |
---|---|
id |
ID riga per la voce |
ts |
Timestamp della voce |
arg_set_id |
ID utilizzato per associare le righe della tabella args a questa voce |
vsync_id |
ID VSync associato a tutte le transazioni in questa voce |
android_surfaceflinger_transaction
:
Colonna | Descrizione |
---|---|
id |
ID riga per la transazione |
snapshot_id |
ID riga della voce di surfaceflinger_transactions a cui appartiene la transazione |
arg_set_id |
ID utilizzato per associare le righe della tabella args a questa transazione |
transaction_id |
ID transazione estratto dal messaggio proto |
pid |
PID transazione estratto dal messaggio proto |
uid |
UID transazione estratto dal messaggio proto |
layer_id |
ID del livello associato alla transazione, se applicabile |
display_id |
L'ID del display associato alla transazione, se applicabile |
flags_id |
ID utilizzato per recuperare i flag associati da android_surfaceflinger_transaction_flag |
transaction_type |
Tipo di transazione |
android_surfaceflinger_transaction_flag
:
Colonna | Descrizione |
---|---|
flags_id |
Corrisponde al valore di una riga in android_surfaceflinger_transaction |
flag |
Translated flag string |
Le singole transazioni vengono aggiunte alla tabella args da diversi formati di messaggi proto in base al tipo di transazione:
LAYER_ADDED
:LayerCreationArgs
formatLAYER_CHANGED
:LayerState
formatDISPLAY_ADDED
:DisplayState
formatDISPLAY_CHANGED
:DisplayState
formatLAYER_DESTROYED
: Nessun argomentoLAYER_HANDLE_DESTROYED
: Nessun argomentoDISPLAY_REMOVED
: Nessun argomentoNOOP
: Nessun argomento
Visualizzazione SQL delle transizioni
I dati proto delle transizioni utilizzano il formato
ShellTransition
.
Per cercare i dati sulle transizioni, utilizza la visualizzazione transitions_search
. Questa visualizzazione
include le seguenti colonne:
Colonna | Descrizione |
---|---|
ts |
Tempo di invio; viene ripristinato il tempo di invio, se disponibile, altrimenti 0 |
transition_id |
ID transizione estratto dal messaggio proto |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Nome della proprietà non che tiene conto dei campi ripetuti |
value |
UID transazione estratto dal messaggio proto |
Esempi di query
Trova le proprietà delle transizioni gestite da DefaultMixedHandler
:
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
Tabelle di dati
La visualizzazione Transizioni viene creata utilizzando le seguenti tabelle sottostanti.
window_manager_shell_transitions
:
Colonna | Descrizione |
---|---|
id |
ID riga per la transizione |
ts |
Tempo di invio; viene ripristinato il tempo di invio, se disponibile, altrimenti 0 |
transition_id |
ID transizione estratto dal messaggio proto |
arg_set_id |
ID utilizzato per associare le righe della tabella args a questa transizione |
transition_type |
Tipo di transizione tratto dal messaggio proto |
send_time_ns |
Tempo di invio della transizione dal messaggio proto |
dispatch_time_ns |
Tempo di invio della transizione estratto dal messaggio proto |
duration_ns |
Durata della transizione, se sono disponibili ora di inizio e di fine |
handler |
Gestore della transizione: recupera la traduzione da window_manager_shell_transition_handlers |
status |
Stato della transizione: played , merged o aborted |
flags |
Flag di transizione presi dal messaggio proto |
window_manager_shell_transition_handlers
:
Colonna | Descrizione |
---|---|
handler_id |
ID corrispondente al valore nella colonna handler di window_manager_shell_transitions |
handler_name |
Traduzione di stringhe |
android_window_manager_shell_transition_participants
:
Colonna | Descrizione |
---|---|
transition_id |
ID transizione estratto dal messaggio Proto non elaborato |
layer_id |
ID del partecipante al livello SurfaceFlinger |
window_id |
ID del partecipante al contenitore WindowManager |
Visualizzazione SQL ViewCapture
I dati proto ViewCapture utilizzano il formato
View
.
Per cercare i dati di ViewCapture, utilizza la visualizzazione viewcapture_search
. Questa visualizzazione
include le seguenti colonne:
Colonna | Descrizione |
---|---|
state_id |
ID riga dello stato a cui appartiene la visualizzazione |
ts |
Timestamp dello stato a cui appartiene la visualizzazione |
package_name |
Nome pacchetto |
window_name |
Nome della finestra |
class_name |
Visualizzare il nome del corso |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Nome della proprietà non che tiene conto dei campi ripetuti |
value |
Valore della proprietà in formato stringa |
previous_value |
Valore della proprietà dallo stato precedente in formato stringa |
Esempi di query
Trova tutti gli stati in cui SearchContainerView
si è spostato nella direzione Y:
SELECT * FROM viewcapture_search
WHERE class_name LIKE '%SearchContainerView'
AND flat_property='translation_y'
AND value!=previous_value
Tabelle di dati
La vista ViewCapture viene creata utilizzando le seguenti tabelle sottostanti.
android_viewcapture
:
Colonna | Descrizione |
---|---|
id |
ID riga per la voce |
ts |
Timestamp della voce |
arg_set_id |
ID utilizzato per associare le righe della tabella args a questa voce |
android_viewcapture_view
:
Colonna | Descrizione |
---|---|
id |
ID riga per la visualizzazione |
snapshot_id |
ID riga della voce di android_viewcapture a cui appartiene la visualizzazione |
arg_set_id |
ID utilizzato per associare le righe della tabella args a questa visualizzazione |
Tabella SQL ProtoLog
I dati proto ProtoLog utilizzano il formato
ProtoLogMessage
. Questa visualizzazione include le seguenti colonne:
Colonna | Descrizione |
---|---|
ts |
Timestamp del log |
level |
Log level (Livello di log) |
tag |
Tag di gruppo di logging |
message |
Messaggio di log |
stacktrace |
Analisi dello stack (se disponibile) |
location |
Posizione del codice da cui ha origine il messaggio |
Esempi di query
Trovare tutti i log con un messaggio contenente
transition
:SELECT ts, message, location FROM protolog WHERE message LIKE '%transition%'
Trova tutti i log che contengono ID transazione validi:
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, '%');
Esegui query
Puoi eseguire query di ricerca utilizzando il riquadro RICERCA GLOBALE a sinistra del visualizzatore Ricerca.
Quando interagisci per la prima volta con il riquadro GLOBAL SEARCH, la ricerca delle tracce viene inizializzata e Winscope crea le visualizzazioni SQL di assistenza. L'operazione richiede alcuni secondi. Durante l'inizializzazione della ricerca delle tracce, la cronologia non è disponibile.
Per avviare una query, scrivila nella casella di ricerca e fai clic su Esegui query di ricerca o premi Invio sulla tastiera per eseguirla.
Al termine, la tabella dei risultati viene visualizzata nel riquadro centrale. La query viene visualizzata sotto la casella di ricerca, con un campo per salvare la query tra le sessioni.
Puoi accedere alle query salvate facendo clic sulla scheda Salvate nel riquadro a sinistra e accedere alle query eseguite di recente facendo clic sulla scheda Recenti:
Figura 2. Riquadro a sinistra del visualizzatore di ricerca.
Risultati
Tutte le query restituiscono risultati tabulati, visualizzati in una visualizzazione scorrevole con un comportamento interattivo simile a quello dei visualizzatori di tracce basati sui log, ad esempio Transactions e ProtoLog:
Figura 3. Visualizzare i risultati della ricerca.
Se la tabella risultante contiene una colonna ts
, i valori in questa colonna vengono interpretati come timestamp e aggiunti alla sovrapposizione della cronologia come una nuova riga di voci. Fai clic su questa riga e utilizza i tasti freccia sinistra e destra per spostarti
tra le voci:
Figura 4. Cronologia delle ricerche.