Utilizza SQL per trovare stati specifici nelle tracce di Winscope Perfetto. Utilizza il visualizzatore della ricerca globale nell'interfaccia utente di Winscope per eseguire query e visualizzare i risultati tabulated:
Figura 1. Scheda del visualizzatore di ricerca.
Il visualizzatore di ricerca ti consente di scrivere ed eseguire query SQL personalizzate sulle tracce di Perfetto e di accedere alle query recenti e salvate. Winscope fornisce viste SQL specializzate per facilitare la ricerca delle tracce di SurfaceFlinger e Transactions.
Utilizza le seguenti convenzioni per tutte le visualizzazioni:
Per le colonne
property
eflat_property
:- I nomi delle proprietà sono in minuscolo, ad esempio
visible_region
daLayerProto
. Per rappresentare le proprietà nidificate viene utilizzata la notazione a punti, ad esempio
visible_region.rect
.I campi ripetuti in
property
sono distinti da parentesi quadre:Ad esempio, in 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, in 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 minuscolo, ad esempio
Per le colonne
value
eprevious_value
:- I valori booleani sono rappresentati da
'0'
(False
) o'1'
(True
).
- I valori booleani sono rappresentati da
Visualizzazioni SQL di SurfaceFlinger
I dati proto di SurfaceFlinger utilizzano i seguenti formati:
I dati del livello sono nel formato
LayerProto
.I dati della radice della gerarchia sono nel formato
LayersSnapshotProto
.
Per cercare i dati del livello, utilizza la visualizzazione sf_layer_search
. Questa vista include le seguenti colonne:
Colonna | Descrizione |
---|---|
state_id |
ID univoco 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 livello principale |
layer_name |
Nome livello |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Il nome della proprietà non 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 univoco della voce |
ts |
Timestamp della voce |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Il nome della proprietà non 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 fotogrammi 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 il livello
Taskbar
color.a
(alpha) cambia: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 le visualizzazioni con una serie di livelli valida:
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, ']') ), '%' )
Visualizzazione SQL delle transazioni
I dati proto delle transazioni utilizzano il formato
TransactionTraceEntry
.
Per cercare i dati delle transazioni, utilizza la visualizzazione transactions_search
. Questa visualizzazione include le seguenti colonne:
Colonna | Descrizione |
---|---|
state_id |
ID univoco 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 |
Il nome della proprietà non tiene conto dei campi ripetuti |
value |
Valore della proprietà in formato stringa |
Esempi di query
Trova il frame 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'
Individua il fotogramma in cui è stato aggiunto il livello
ImeContainer
:SELECT ts FROM transactions_search WHERE flat_property='added_layers.name' AND value='ImeContainer'
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: se disponibile, viene utilizzato il valore dell'ora di invio, altrimenti 0 |
transition_id |
ID transizione |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Il nome della proprietà non tiene conto dei campi ripetuti |
value |
Valore della proprietà in formato stringa |
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
Visualizza la visualizzazione SQL di ViewCapture
I dati proto di 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 univoco 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 |
Visualizza il nome del corso |
property |
Nome della proprietà che tiene conto dei campi ripetuti |
flat_property |
Il nome della proprietà non 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 quando SearchContainerView
si è spostato nella direzione y:
SELECT * FROM viewcapture_search
WHERE class_name LIKE '%SearchContainerView'
AND flat_property='translation_y'
AND value!=previous_value
Tabella SQL ProtoLog
I dati proto di 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 gruppo di log |
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
Quando utilizzi il riquadro a sinistra, viene avviata la ricerca dei traccianti. L'operazione richiede alcuni secondi. Durante l'avvio, la cronologia non è disponibile.
Dopo aver inizializzato la ricerca di tracce, scrivi una query 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 salvarla tra le sessioni.
Puoi accedere alle query salvate facendo clic sulla scheda Salvate nel riquadro a sinistra e alle query eseguite di recente facendo clic sulla scheda Recenti:
Figura 2. Riquadro sinistro del visualizzatore di ricerca.
Risultati
Tutte le query restituiscono risultati in tabella, visualizzati in una visualizzazione scorrevole con un comportamento interattivo simile a quello dei visualizzatori di tracce basati su log, come Transactions e ProtoLog:
Figura 3. Risultati del visualizzatore di ricerca.
Se la tabella risultante contiene una colonna ts
, i valori in quella colonna vengono interpretati come timestamp e aggiunti all'overlay della cronologia come nuova riga di voci. Fai clic su questa riga e utilizza i tasti Freccia sinistra e Freccia destra per spostarti tra le voci:
Figura 4. Cronologia delle ricerche.