Ricerca traccia

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:

scheda Visualizzatore della ricerca

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 e flat_property:

    • I nomi delle proprietà sono in snake case, ad esempio visible_region da LayerProto.
    • 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 campo top è rappresentato da visible_region.rect[0].top e visible_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 campo top è rappresentato da visible_region.rect.top in entrambe le istanze.

  • Per le colonne value e previous_value, i valori booleani sono rappresentati da 0 (False) o 1 (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:

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 format
  • LAYER_CHANGED: LayerState format
  • DISPLAY_ADDED: DisplayState format
  • DISPLAY_CHANGED: DisplayState format
  • LAYER_DESTROYED: Nessun argomento
  • LAYER_HANDLE_DESTROYED: Nessun argomento
  • DISPLAY_REMOVED: Nessun argomento
  • NOOP: 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:

riquadro a sinistra del visualizzatore della ricerca

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:

visualizzare i risultati della ricerca

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:

cronologia delle ricerche

Figura 4. Cronologia delle ricerche.