Winscope è uno strumento web che consente agli utenti di registrare, riprodurre e analizzare gli stati di diversi servizi di sistema durante e dopo animazioni e transizioni. Winscope registra tutti gli stati del servizio di sistema pertinenti in un file di traccia. Utilizzando l'interfaccia utente di Winscope con il file di traccia, puoi ispezionare lo stato di questi servizi per ogni frame dell'animazione, con o senza una registrazione dello schermo, riproducendo, passando da un passaggio all'altro e eseguendo il debug delle transizioni.
Di seguito sono riportati i servizi di sistema che producono tracce caricabili in Winscope:
- SurfaceFlinger
- WindowManager
- WMShell
- IME
- Avvio app
Esegui il visualizzatore tracce Winscope
Il tracciamento di Winscope fa parte dei servizi della piattaforma. Questa sezione illustra i passaggi necessari per scaricare, creare ed eseguire il visualizzatore tracce Winscope.
Procedi nel seguente modo per configurare il PC per l'esecuzione del localizzatore Winscope:
- Scarica il codice sorgente Android.
Vai alla cartella Winscope:
cd development/tools/winscope
Installa le dipendenze utilizzando:
npm install
Per visualizzare un elenco dei comandi disponibili, esegui:
npm run
Crea tutti i target di produzione e test utilizzando:
npm run build:prod
Esegui Winscope utilizzando:
npm run start
Acquisisci tracce
Puoi acquisire le tracce sul dispositivo tramite Winscope o tramite i comandi di Android Debug Bridge (adb).
Acquisisci tracce sul dispositivo
Acquisisci le tracce sul dispositivo per raccogliere i dati quando segnali bug per problemi di animazione. Con questo metodo vengono registrate tutte le tracce dell'interfaccia utente, poiché la configurazione non può essere personalizzata.
Dal tuo dispositivo Android:
- Attiva le Opzioni sviluppatore.
- Seleziona Tracciamento del sistema in Opzioni sviluppatore.
- Attiva Raccogli tracce Winscope.
- In Varie:
- Attiva Allega le registrazioni alle segnalazioni di bug.
- Attiva Mostra riquadro Impostazioni rapide.
- Vai alla posizione in cui devi riprodurre il bug.
Per avviare la registrazione, apri le Impostazioni rapide e seleziona Registra traccia:
Figura 1. Menu Impostazioni rapide con Registra traccia.
Esegui solo i passaggi necessari per riprodurre il bug.
Per interrompere l'acquisizione, apri le Impostazioni rapide e seleziona Interrompi tracciamento.
Condividi il log acquisito utilizzando una delle opzioni elencate, ad esempio Gmail, Drive o BetterBug.
Acquisisci le tracce tramite Winscope
Puoi acquisire tracce utilizzando Winscope per lo sviluppo e il debug locali. Winscope utilizza adb, che supporta la connessione del dispositivo tramite USB o Wi-Fi.
Su Winscope:
Nella schermata Raccogli tracce, fai clic su ADB Proxy:
Figura 2. Acquisisci le tracce su Winscope.
Avvia il proxy Winscope ADB Connect per acquisire tracce direttamente dal browser.
Esegui il comando:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Per avviare l'acquisizione, nella schermata Raccogli tracce seleziona i target e la configurazione e fai clic su Avvia traccia:
Figura 3. Raccogli le tracce su Winscope.
Per interrompere l'acquisizione, fai clic su Termina traccia:
Figura 4. Termina traccia su Winscope.
Quando lo strumento carica le tracce nell'interfaccia utente di Winscope, sullo schermo vengono visualizzati i messaggi Recupero e Analisi file proto.
Genera il dump dello stato utilizzando Winscope
Per eseguire un dump dello stato utilizzando Winscope, nella schermata Raccogli tracce seleziona la scheda Dump, quindi fai clic su Stato di dump:
Figura 5. Esegui il dump dello stato su Winscope.
Acquisire tracce tramite i 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.
Per ulteriori informazioni, consulta adb.
Tracce WindowManager
Per acquisire le tracce di WindowManager:
Abilita traccia:
adb shell wm tracing start
Per disattivare la traccia:
adb shell wm tracing stop
Salva i dati di logging nel file durante l'esecuzione di un'acquisizione della 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 log (in kB):
adb shell wm tracing size
Stato traccia di stampa:
adb shell wm tracing status
Imposta il livello di log su
critical
(solo finestre visibili con informazioni ridotte),trim
(tutte le finestre con informazioni ridotte) oall
(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...]
Disattiva ProtoLog per determinati gruppi di log:
adb shell cmd window logging disable [group...]
Attiva il logging di Logcat per determinati gruppi di log:
adb shell cmd window logging enable-text [group...]
Disabilita il logging di Logcat per i gruppi di log specificati:
adb shell cmd window logging disable-text [group...]
In WMShell:
Avvia ProtoLog:
adb shell dumpsys activity service SystemUIService WMShell
Tracciamento transizioni
I seguenti comandi vengono utilizzati per il monitoraggio delle transizioni:
Nel processo system_server
:
Avvia una traccia:
adb shell cmd window shell tracing start
Interrompere 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
Input Method Editor
Per il tracciamento IME (Input Method Editor), vengono utilizzati i seguenti comandi:
Avvia il monitoraggio IME per i client di metodi di inserimento (IM), il servizio di metodi di inserimento (IMS) e il servizio di gestione dei metodi di inserimento (IMMS):
adb shell ime tracing start
Avvia il monitoraggio dei client IME, IMS e IMMS:
adb shell ime tracing stop
Livelli SurfaceFlinger
Il monitoraggio del livello SurfaceFlinger utilizza la traccia Perfetto per l'acquisizione. Per informazioni sulla configurazione, consulta Configurazione di traccia.
Consulta il seguente esempio di configurazione per il monitoraggio del livello 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
}
}
}
Consulta il seguente comando di esempio per generare il monitoraggio per i livelli SurfaceFlinger:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Transazioni SurfaceFlinger
Il monitoraggio delle transazioni di SurfaceFlinger utilizza la traccia Perfetto per l'acquisizione. Per informazioni sulla configurazione, consulta Configurazione della traccia.
Guarda il seguente esempio di configurazione di Perfetto per il monitoraggio attivo 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 l'esempio di configurazione Perfetto per il tracciamento continuo 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
}
}
}
Vedi il seguente comando di esempio per generare il tracciamento per le transazioni SurfaceFlinger:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Generare il 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
proto
cartella. 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 frame e schemi temporali e presenta i messaggi protobuf in modo coerente. L'analisi delle tracce in Winscope consente di identificare esattamente lo strato, il frame e lo stato in cui si è verificato il bug.
Utilizzare Winscope
Dopo aver acquisito tracce, analizzale su Winscope:
Carica le tracce salvate utilizzando il riquadro a destra. Puoi rimuovere le tracce caricate o caricarne altre.
Figura 6. Carica le tracce su Winscope.
Fai clic su Visualizza tracce per visualizzare le tracce caricate. Le schede per ogni traccia vengono visualizzate nel riquadro superiore della finestra. Se il file caricato contiene le tracce pertinenti, sullo schermo viene sovrapposta una visualizzazione mobile della traccia della registrazione dello schermo.
Figura 7. Visualizza tracce su Winscope.
Utilizza l'interfaccia utente nel riquadro più alto della finestra per rinominare e scaricare la traccia caricata o per caricarne una nuova.
Scorri le tracce nel tempo utilizzando lo strumento di scorrimento temporale nel riquadro in basso della finestra. Per una navigazione più dettagliata nel tempo, utilizza le seguenti funzionalità, come mostrato in Figura 8:
- Per passare a un'ora o a un'occorrenza specifica, utilizza il cursore (cursore della cronologia) o le frecce sinistra nella casella di visualizzazione dell'ora (nell'angolo in basso a sinistra) oppure le frecce sinistra e destra sulla tastiera.
- Per visualizzare le tracce selezionate con codice a colori sulla cronologia, utilizza il menu a discesa (a sinistra del cursore del tempo). Per impostazione predefinita, nella cronologia vengono visualizzate le ultime tre tracce visualizzate utilizzando le schede delle tracce.
- Per una visualizzazione granulare di tutte le tracce caricate, utilizza lo strumento Aumenta o Diminuisci lo zoom (sotto il cursore temporale) oppure scorri sulla tastiera. Usa il pulsante di ripristino per ripristinare il livello di zoom.
- Per una visualizzazione espansa della distribuzione delle tracce nel tempo, fai clic sulla Freccia su (nell'angolo in basso a destra).
Figura 8. Navigazione nel tempo su Winscope.
Nella visualizzazione espansa (Figura 9), seleziona e aumenta lo zoom su intervalli di tempo specifici per un'ispezione più accurata:
Figura 9. Sequenza temporale espansa in Winscope.
Per esaminare le tracce, puoi visualizzare lo stato del dispositivo con la registrazione dello schermo. Per esaminare una determinata traccia, fai clic sulla scheda della traccia pertinente nel riquadro superiore dello strumento.
Per la traccia Surface Flinger, tre riquadri mostrano visualizzazioni diverse della traccia in un determinato periodo di tempo, come mostrato nella Figura 10:
Figura 10. Traccia Surface Flinger su Winscope.
Visualizzazione Livelli: una visualizzazione 3D dei livelli in overlay rettangolari. I seguenti elementi dell'interfaccia utente modificano i rettangoli per visualizzare gli elementi grafici in termini di posizione, dimensione, trasformazione e ordine z:
- Il cursore Rotazione (in alto a sinistra nella visualizzazione Livelli) ruota i rettangoli con livelli per visualizzarli agli angoli scelti.
- Il cursore Spaziatura (in alto a destra nella visualizzazione Livelli) regola la spaziatura tra i livelli per creare la vista composita scelta.
- Gli strumenti zoom (in alto a destra nella visualizzazione Livelli) aumentano lo zoom e diminuisci lo zoom dei livelli per un'ispezione migliore.
- Il pulsante di ripristino (in alto a destra nella visualizzazione Livelli) ripristina le impostazioni della fotocamera alla vista originale.
- Trascina i rettangoli per facilitare lo zoom.
Visualizzazione Gerarchia: una gerarchia completa dei livelli.
- Solo visibili (in alto a destra nella visualizzazione Gerarchia), se selezionato, nasconde i livelli invisibili dalla gerarchia per aiutare a visualizzare gli elementi sullo schermo.
- L'opzione Piatto (in alto a destra nella visualizzazione Gerarchia), se selezionata, mostra la gerarchia come elenco bidimensionale di livelli.
- L'opzione Mostra il confronto (in alto a sinistra nella visualizzazione Gerarchia) è selezionata solo quando c'è una transizione di stato. Quando questa opzione è selezionata, lo strumento confronta lo stato attuale con quello precedente. Un nuovo elemento viene evidenziato in verde, un elemento eliminato viene evidenziato in rosso e un elemento modificato viene evidenziato in blu.
Visualizzazione Proprietà: proprietà del livello selezionato. Il riquadro superiore della vista Proprietà contiene informazioni relative solo alle proprietà chiave, come Visibilità, Geometry e Buffer. Il riquadro inferiore della vista Proprietà contiene un proto dump di tutte le proprietà.
- La casella di controllo Mostra differenze (in alto a sinistra nella visualizzazione Proprietà) si comporta come nella visualizzazione Gerarchia.
- L'opzione Mostra predefiniti (in alto a sinistra nella visualizzazione Proprietà) mostra i valori di protocollo predefiniti nel dump protocollo.
Per impostazione predefinita, questi valori non sono elencati nel dump di Proto. I
valori predefiniti del protocollo vengono presi dalla definizione del campo proto.
Se in un campo proto non è impostato un valore predefinito non null, i valori predefiniti visualizzati sono:
- Stringhe: null
- Numeri: 0
- Valori booleani: false
- Oggetti: null
La selezione tra le tre visualizzazioni e la registrazione dello schermo viene sincronizzata, ovvero tutte le tracce vengono aggiornate in modo sincrono quando passi a un altro momento. Per visualizzare le proprietà di un livello, selezionalo facendo clic sulla relativa opzione nella visualizzazione Gerarchia o sul rispettivo rettangolo nella visualizzazione Proprietà. Un rettangolo viola indica che a questo livello è associata una traccia della visualizzazione. Facendo doppio clic su un livello viola, l'interfaccia utente passa alla scheda della traccia di visualizzazione pertinente.
Per la traccia Gestore finestre, tre riquadri mostrano visualizzazioni diverse della traccia in un determinato periodo di tempo, come mostrato nella Figura 11:
- Visualizzazione Finestre: una visualizzazione 3D dei livelli.
- Visualizzazione Gerarchia: una gerarchia completa dei livelli.
- La vista Proprietà contiene un dump di proto di tutte le proprietà.
La selezione tra le tre visualizzazioni e la registrazione dello schermo è sincronizzata, ovvero tutte le tracce vengono aggiornate in modo sincrono quando navighi in un momento diverso.
Figura 11. Traccia di Window Manager su Winscope.
Per le tracce Transactions, le transazioni tra Surface Flinger e Window Manager sono presentate in formato tabella, in cui è possibile eseguire ricerche in base agli ID, al tipo e al testo visualizzati, insieme a una visualizzazione delle proprietà che mostra il dump di proto. La selezione tra le due visualizzazioni e la registrazione dello schermo è sincronizzata:
Figura 12. Traccia delle transazioni su Winscope.
Per le tracce ProtoLog, le informazioni vengono presentate in un formato tabella, che è disponibile per la ricerca per tag, file di origine e testo:
Figura 13. Traccia ProtoLog su Winscope.
Per le tracce Transizioni, viene visualizzato un elenco di transizioni con ID, tipo, data di invio, durata e stato, insieme alle proprietà della transizione selezionata:
Figura 14. Traccia Transizioni su Winscope.