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:
- Scarica il sorgente Android .
Passare alla cartella Winscope:
cd development/tools/winscope
Installa le dipendenze utilizzando:
npm install
Per visualizzare un elenco dei comandi disponibili, esegui:
npm run
Costruisci tutti gli obiettivi di produzione e test utilizzando:
npm run build:all
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:
- Abilita le opzioni sviluppatore .
- Seleziona Tracciamento del sistema in Opzioni sviluppatore .
- Abilita Raccogli tracce Winscope .
- Nella sezione Varie :
- Abilita Allega registrazioni alle segnalazioni di bug .
- Abilita Mostra riquadro Impostazioni rapide .
- Passare al punto in cui è necessario riprodurre il bug.
Per avviare l'acquisizione, apri Impostazioni rapide e seleziona Registra traccia :
Figura 1. Menu di impostazione rapida con Traccia registrazione.
Eseguire solo i passaggi necessari per riprodurre il bug.
Per interrompere l'acquisizione, apri Impostazioni rapide e seleziona Interrompi traccia .
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:
Nella schermata Raccogli tracce , fai clic su Proxy ADB :
Figura 2. Cattura tracce su Winscope.
Avvia il proxy Winscope ADB Connect per acquisire tracce direttamente dal tuo browser.
Esegui il comando:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Per avviare l'acquisizione, nella schermata Raccogli tracce selezionare le destinazioni e la configurazione e fare clic su Avvia traccia :
Figura 3. Raccogliere tracce su Winscope.
Per interrompere l'acquisizione, fare clic su Termina traccia :
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 :
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) 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...]
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:
Carica le tue tracce salvate utilizzando il pannello a destra. Puoi rimuovere le tracce caricate o caricare più tracce.
Figura 6. Caricare le tracce su Winscope.
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.
Figura 7. Visualizza le tracce su Winscope.
Utilizzare l'interfaccia utente nel pannello più in alto della finestra per rinominare e scarica la traccia caricata o per caricarne uno nuovo.
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 sinistro e giusto 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 avanti o rimpicciolire 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 su (angolo in basso a destra).
Figura 8. Navigazione temporale su Winscope.
Nella visualizzazione espansa (Figura 9), seleziona e ingrandisci intervalli di tempo specifici per una migliore ispezione:
Figura 9. Timeline espansa su Winscope.
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:
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) ingrandiscono e rimpicciolire negli strati per una migliore ispezione.
- Il pulsante di ripristino (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.
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:
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:
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:
Figura 14. Tracciatura delle transizioni su Winscope.