Ricerca traccia

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:

scheda visualizzatore di ricerca

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

    • I nomi delle proprietà sono in minuscolo, ad esempio visible_region da LayerProto.
    • 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 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, in 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).

Visualizzazioni SQL di SurfaceFlinger

I dati proto di SurfaceFlinger utilizzano i seguenti formati:

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:

riquadro sinistro del visualizzatore della ricerca

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:

risultati della visualizzazione della ricerca

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:

cronologia delle ricerche

Figura 4. Cronologia delle ricerche.