Traccia le transizioni delle finestre utilizzando Winscope

Winscope è uno strumento Web che consente agli utenti di registrare, riprodurre e analizzare gli stati di diversi servizi di sistema durante e dopo le animazioni e le transizioni. Winscope registra tutti gli stati di servizio del sistema pertinenti in un file di traccia. Utilizzando l'interfaccia utente Winscope con il file di traccia, puoi controllare lo stato di questi servizi per ogni fotogramma di animazione, con o senza registrazione dello schermo, riproducendo, spostando ed effettuando il debug attraverso le transizioni.

I servizi di sistema che producono tracce caricabili in Winscope sono i seguenti:

  • SurfaceFlinger
  • Gestore finestre
  • WMShell
  • IME
  • Lanciatore

Eseguire il visualizzatore di tracce Winscope

Il tracciamento Winscope fa parte dei servizi presenti sulla piattaforma. In questa sezione vengono descritti i passaggi necessari per scaricare, creare ed eseguire il visualizzatore di tracce Winscope.

Seguire questi passaggi per configurare il PC per eseguire il tracciante Winscope:

  1. Scarica il sorgente Android .
  2. Passare alla cartella Winscope:

    cd development/tools/winscope
    
  3. Installa le dipendenze utilizzando:

    npm install
    

    Per visualizzare un elenco dei comandi disponibili, esegui: npm run

  4. Costruisci tutti gli obiettivi di produzione e test utilizzando:

    npm run build:all
    
  5. Esegui Winscope utilizzando:

    npm run start
    

Cattura tracce

Puoi acquisire tracce sul dispositivo , tramite Winscope o tramite i comandi Android Debug Bridge (adb) .

Cattura tracce sul dispositivo

Cattura tracce sul dispositivo per raccogliere dati durante l'archiviazione di bug per problemi di animazione. Tutte le tracce dell'interfaccia utente vengono registrate con questo metodo, poiché la configurazione non può essere personalizzata.

Sul tuo dispositivo Android:

  1. Abilita le opzioni sviluppatore .
  2. Seleziona Tracciamento del sistema in Opzioni sviluppatore .
  3. Abilita Raccogli tracce Winscope .
  4. Nella sezione Varie :
    1. Abilita Allega registrazioni alle segnalazioni di bug .
    2. Abilita Mostra riquadro Impostazioni rapide .
  5. Passare al punto in cui è necessario riprodurre il bug.
  6. Per avviare l'acquisizione, apri Impostazioni rapide e seleziona Registra traccia :

    quick_setting_winscope

    Figura 1. Menu di impostazione rapida con Traccia registrazione.

  7. Eseguire solo i passaggi necessari per riprodurre il bug.

  8. Per interrompere l'acquisizione, apri Impostazioni rapide e seleziona Interrompi traccia .

  9. Condividi il registro acquisito utilizzando una delle opzioni elencate, come Gmail, Drive o BetterBug.

Cattura tracce tramite Winscope

È possibile acquisire tracce utilizzando Winscope per lo sviluppo locale e il debug. Winscope utilizza adb , che supporta la connessione del dispositivo tramite USB o Wi-Fi.

Su Winscope:

  1. Nella schermata Raccogli tracce , fai clic su Proxy ADB :

    capture_traces_winscope

    Figura 2. Cattura tracce su Winscope.

  2. Avvia il proxy Winscope ADB Connect per acquisire tracce direttamente dal tuo browser.

  3. Esegui il comando:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Per avviare l'acquisizione, nella schermata Raccogli tracce selezionare le destinazioni e la configurazione e fare clic su Avvia traccia :

    collect_traces_winscope

    Figura 3. Raccogliere tracce su Winscope.

  5. Per interrompere l'acquisizione, fare clic su Termina traccia :

    end_trace_winscope

    Figura 4. Fine della traccia su Winscope.

Mentre lo strumento carica le tracce sull'interfaccia utente di Winscope, sullo schermo vengono visualizzati i messaggi di recupero e analisi dei file prototipo .

Genera il dump dello stato utilizzando Winscope

Per eseguire un dump dello stato utilizzando Winscope, nella schermata Raccogli tracce selezionare la scheda Dump e quindi fare clic su Dump state :

dump-winscope

Figura 5. Stato del dump su Winscope.

Cattura tracce tramite comandi adb

Esegui adb root prima di eseguire i comandi adb shell per ciascuna delle seguenti tracce. Al termine della traccia, i file di traccia sono disponibili in /data/misc/wmtrace . Per copiare un file o una directory e le relative sottodirectory da un dispositivo, consulta Copiare file da e verso un dispositivo . Vedi adb per ulteriori informazioni.

Tracce di WindowManager

Per acquisire le tracce di WindowManager:

  • Abilita traccia:

    adb shell wm tracing start
    
  • Disabilita traccia:

    adb shell wm tracing stop
    
  • Salvare i dati di registrazione su file durante l'esecuzione di un'acquisizione di traccia:

    adb shell wm tracing save-for-bugreport
    
  • Registra la traccia una volta per frame:

    adb shell wm tracing frame
    
  • Registra ogni transazione:

    adb shell wm tracing transaction
    
  • Imposta la dimensione massima del registro (in KB):

    adb shell wm tracing size
    
  • Stato della traccia di stampa:

    adb shell wm tracing status
    
  • Imposta il livello di registro su critical (solo finestre visibili con informazioni ridotte), trim (tutte le finestre con informazioni ridotte) o all (tutte le finestre e le informazioni):

    adb shell wm tracing level
    

ProtoLog

I seguenti comandi vengono utilizzati per il sistema ProtoLog .

Nel processo system_server :

  • Avvia ProtoLog:

    adb shell cmd window logging start
    
  • Arresta ProtoLog:

    adb shell cmd window logging stop
    
  • Abilita ProtoLog per determinati gruppi di log:

    adb shell cmd window logging enable [group...]
    
  • Disabilita ProtoLog per determinati gruppi di log:

    adb shell cmd window logging disable [group...]
    
  • Abilita la registrazione Logcat per determinati gruppi di log:

    adb shell cmd window logging enable-text [group...]
    
  • Disabilita la registrazione Logcat per determinati gruppi di log:

    adb shell cmd window logging disable-text [group...]
    

In WMShell:

  • Avvia ProtoLog:

    adb shell dumpsys activity service SystemUIService WMShell
    

Tracciamento della transizione

I seguenti comandi vengono utilizzati per il tracciamento delle transizioni:

Nel processo system_server :

  • Avvia una traccia:

    adb shell cmd window shell tracing start
    
  • Interrompi una traccia:

    adb shell cmd window shell tracing stop
    
  • Avvia una traccia in WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
    
  • Interrompi una traccia in WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
    

Editor del metodo di input

I comandi seguenti vengono utilizzati per la traccia IME (Input Method Editor):

  • Avviare l'analisi IME per i client Input Method (IM), Input Method Service (IMS) e Input Method Management Service (IMMS):

    adb shell ime tracing start
    
  • Inizia a tracciare client IME, IMS e IMMS:

    adb shell ime tracing stop
    

Strati di SurfaceFlinger

Il tracciamento dei livelli di SurfaceFlinger utilizza la traccia Perfetto per l'acquisizione. Vedere Configurazione traccia per informazioni sulla configurazione.

Vedi il seguente esempio di configurazione per il tracciamento dei livelli SurfaceFlinger:

unique_session_name: "surfaceflinger_layers_active"
buffers: {
    size_kb: 63488
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.layers"
        surfaceflinger_layers_config: {
            mode: MODE_ACTIVE
            trace_flags: TRACE_FLAG_INPUT
            trace_flags: TRACE_FLAG_COMPOSITION
            trace_flags: TRACE_FLAG_HWC
            trace_flags: TRACE_FLAG_BUFFERS
            trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
        }
    }
}

Vedi il seguente comando di esempio per generare la traccia per i livelli SurfaceFlinger:

adb shell -t perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

Transazioni di SurfaceFlinger

La traccia delle transazioni SurfaceFlinger utilizza la traccia Perfetto per l'acquisizione. Vedere Configurazione traccia per informazioni sulla configurazione.

Vedi il seguente esempio di configurazione Perfetto per la traccia attiva di SurfaceFlinger:

unique_session_name: "surfaceflinger_transactions_active"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_ACTIVE
        }
    }
}
write_into_file: true
file_write_period_ms: 100

Vedi il seguente esempio di configurazione Perfetto per la traccia continua di SurfaceFlinger:

unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_CONTINUOUS
        }
    }
}

Consulta il seguente comando di esempio per generare la traccia per le transazioni SurfaceFlinger:

    adb shell perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

Genera dump dello stato utilizzando adb

Winscope legge un'istantanea degli stati di WindowManager e SurfaceFlinger dalle segnalazioni di bug. Le segnalazioni di bug memorizzano gli stati come file proto separati all'interno della cartella proto . Per generare i dump dello stato utilizzando adb, esegui i seguenti comandi.

Per WindowManager:

adb exec-out dumpsys window --proto > window_dump.winscope

Per SurfaceFlinger:

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope

Analizzare le tracce

Per eseguire il debug di stati transitori e non validi che causano problemi di animazione, Winscope aggrega diversi file di traccia, fornisce ricerca e visualizzazione su fotogrammi e sequenze temporali e presenta messaggi protobuf in modo coerente. L'analisi delle tracce in Winscope aiuta a identificare l'esatto livello, fotogramma e stato in cui si è verificato il bug.

Usa Winscope

Dopo aver catturato le tracce , analizza le tracce su Winscope:

  1. Carica le tue tracce salvate utilizzando il pannello a destra. Puoi rimuovere le tracce caricate o caricare più tracce.

    upload_traces_winscope

    Figura 6. Caricare le tracce su Winscope.

  2. Fare clic su Visualizza tracce per visualizzare le tracce caricate. Le schede per ciascuna traccia vengono visualizzate nel pannello superiore della finestra. Se il file caricato contiene le tracce rilevanti, sullo schermo viene sovrapposta una vista mobile della traccia della registrazione dello schermo.

    view_traces_winscope

    Figura 7. Visualizza le tracce su Winscope.

    Utilizzare l'interfaccia utente nel pannello più in alto della finestra per rinominaremodifica nome e scarica la traccia caricatadownload_traccia o per caricarne uno nuovo.

  3. Navigare tra le tracce nel tempo utilizzando lo strumento di scorrimento temporale nel pannello inferiore della finestra. Per una navigazione temporale aggiuntiva, utilizzare le seguenti funzionalità, come mostrato nella Figura 8:

    • Per navigare verso un orario o un evento particolare, utilizzare il cursore (cursore temporale) o il tasto sinistrofreccia_sinistra_tempo e giustofreccia_destra_tempo frecce nella casella di visualizzazione dell'ora (angolo inferiore sinistro) o frecce sinistra e destra sulla tastiera.
    • Per visualizzare le tracce selezionate con codice colore sulla timeline, utilizzare il menu a discesa (a sinistra del dispositivo di scorrimento temporale). Per impostazione predefinita, le ultime tre tracce visualizzate utilizzando le schede delle tracce vengono visualizzate sulla sequenza temporale.
    • Per una visualizzazione granulare di tutte le tracce caricate, utilizzare lo zoom avantizoom_in_time o rimpicciolirezoom_out_time strumento (sotto il dispositivo di scorrimento del tempo) oppure scorri sulla tastiera. Utilizzare il pulsante di ripristino per ripristinare il livello di zoom.
    • Per una visualizzazione estesa della distribuzione delle tracce nel tempo, fare clic sulla freccia sufreccia_up_time (angolo in basso a destra).

    time_nav_winscope

    Figura 8. Navigazione temporale su Winscope.

    Nella visualizzazione espansa (Figura 9), seleziona e ingrandisci intervalli di tempo specifici per una migliore ispezione:

    expand_time_winscope

    Figura 9. Timeline espansa su Winscope.

  4. Per esaminare le tracce, puoi visualizzare lo stato del dispositivo con la registrazione dello schermo. Per esaminare una traccia particolare, fare clic sulla scheda della traccia pertinente nel pannello superiore dello strumento.

    • Per la traccia Surface Flinger , tre pannelli mostrano diverse visualizzazioni della traccia in un determinato periodo di tempo, come mostrato nella Figura 10:sf_trace

      Figura 10. Traccia del Surface Flinger su Winscope.

      • Vista dei livelli : una vista 3D dei livelli in sovrapposizioni rettangolari. I seguenti elementi dell'interfaccia utente regolano i rettangoli per eseguire il rendering degli elementi grafici in termini di posizione, dimensione, trasformazione e ordine z:

        • Il cursore Rotazione (in alto a sinistra nella vista Livelli) ruota i rettangoli a strati per visualizzarli agli angoli scelti.
        • Il cursore Spaziatura (in alto a destra nella vista Livelli) regola la spaziatura tra i livelli per creare la vista composita scelta.
        • Gli strumenti di zoom (in alto a destra nella vista Livelli) ingrandisconozoom_in_time e rimpicciolirezoom_out_time negli strati per una migliore ispezione.
        • Il pulsante di ripristinoreset_sf (in alto a destra nella vista Livelli) ripristina le impostazioni della fotocamera nella vista originale.
        • Trascina i rettangoli per facilitare uno zoom migliore.
      • Vista gerarchia : una gerarchia completa dei livelli.

        • Solo visibile (in alto a destra nella vista Gerarchia), quando selezionato, nasconde i livelli invisibili dalla gerarchia per facilitare la visualizzazione degli elementi sullo schermo.
        • Piatto (in alto a destra nella vista Gerarchia), quando selezionato, mostra la gerarchia come un elenco appiattito di livelli.
        • Mostra differenze (in alto a sinistra nella vista Gerarchia) è selezionato solo quando c'è una transizione di stato. Quando selezionato, lo strumento confronta lo stato corrente con quello precedente. Un nuovo elemento è evidenziato in verde, un elemento eliminato è evidenziato in rosso e un elemento modificato è evidenziato in blu.
      • Vista delle proprietà : proprietà del livello selezionato. Il pannello superiore della vista Proprietà contiene informazioni solo sulle proprietà chiave, come Visibilità , Geometria e Buffer . Il pannello inferiore della vista Proprietà contiene un Proto Dump di tutte le proprietà.

        • La casella di controllo Mostra differenze (in alto a sinistra nella vista Proprietà) si comporta come nella vista Gerarchia .
        • Mostra valori predefiniti (in alto a sinistra nella vista Proprietà), se selezionato, visualizza i valori prototipi predefiniti nel Dump prototipi. Per impostazione predefinita, questi valori non sono elencati nel Proto Dump. I valori proto predefiniti vengono presi dalla definizione del campo proto. Se un campo proto non ha un valore predefinito diverso da null impostato, i valori proto predefiniti visualizzati sono:
          • Stringhe: nulle
          • Numeri: 0
          • Valori booleani: Falso
          • Oggetti: nulli

      La selezione tra le tre visualizzazioni e la registrazione dello schermo sono sincronizzate, ovvero tutte le tracce si aggiornano in modo sincrono quando si naviga in un momento diverso nel tempo. Per visualizzare le proprietà di un livello, seleziona il livello facendo clic su di esso nella vista Gerarchia o facendo clic sul rispettivo rettangolo nella vista Proprietà. Un rettangolo viola indica che una traccia della vista è collegata a questo layer. Facendo doppio clic su un livello viola, l'interfaccia utente passa alla scheda di traccia della vista pertinente.

    • Per la traccia del Window Manager , tre pannelli mostrano diverse visualizzazioni della traccia in un dato periodo di tempo, come mostrato nella Figura 11:

      • Vista Windows : una vista 3D dei livelli.
      • Vista gerarchia : una gerarchia completa dei livelli.
      • La vista Proprietà contiene un Proto Dump di tutte le proprietà.

      La selezione tra le tre visualizzazioni e la registrazione dello schermo sono sincronizzate, ovvero tutte le tracce si aggiornano in modo sincrono quando si naviga in un momento diverso nel tempo.

      wm_trace

      Figura 11. Traccia del Window Manager su Winscope.

    • Per le tracce Transazioni , le transazioni tra Surface Flinger e Window Manager sono presentate in formato tabella ricercabile in base agli ID, al tipo e al testo visualizzati, insieme a una vista delle proprietà che mostra il dump del proto. La selezione tra le due visualizzazioni e la registrazione dello schermo sono sincronizzate:

      transaction_trace

      Figura 12. Tracciatura delle transazioni su Winscope.

    • Per le tracce ProtoLog , le informazioni vengono presentate in un formato tabella, ricercabile per tag, file di origine e testo:

      protolog_trace

      Figura 13. Traccia ProtoLog su Winscope.

    • Per le tracce Transizioni , viene visualizzato un elenco di transizioni con ID, tipo, ora di invio, durata e stato insieme alle proprietà della transizione selezionata:

      transitions_trace

      Figura 14. Tracciatura delle transizioni su Winscope.