Questa guida spiega come esplorare e interpretare un report Systrace. Per interpretare un report Perfetto, consulta la documentazione Processore di traccia.
Elementi di un report tipico
Systrace genera un file HTML di output che contiene una serie di sezioni. Il report elenca i thread di ciascun processo. Se un determinato thread esegue il rendering dei frame UI, il report indica anche i frame sottoposti a rendering lungo la sequenza temporale. Il tempo passa in avanti mentre ti sposti da sinistra a destra nel report.
Dall'alto verso il basso, il report contiene le seguenti sezioni.
Interazioni degli utenti
La prima sezione contiene barre che rappresentano interazioni specifiche degli utenti all'interno dell'app o del gioco, ad esempio il tocco sullo schermo del dispositivo. Queste interazioni fungono da utili indicatori di tempo.
Attività della CPU
La sezione successiva mostra barre che rappresentano l'attività dei thread all'interno di ogni CPU. Le barre mostrano l'attività della CPU in tutte le app, incluse quelle relative al gioco o all'app stessa.
La sezione Attività della CPU è espandibile, in modo da poter visualizzare la frequenza di clock per ogni CPU. La Figura 1 mostra un esempio di sezione di attività della CPU compressa, mentre la Figura 2 mostra una versione espansa che mostra la frequenza di clock:
Eventi di sistema
Gli istogrammi in questa sezione mostrano eventi specifici a livello di sistema, come il conteggio delle texture e la dimensione totale di oggetti specifici.
Un istogramma che vale la pena controllare più attentamente è quello denominato SurfaceView. Il conteggio rappresenta il numero di buffer di frame composti che sono stati trasferiti nella pipeline di visualizzazione e sono in attesa di essere visualizzati sullo schermo del dispositivo. Poiché la maggior parte dei dispositivi ha un doppio o triplo buffer, questo conteggio è quasi sempre 0, 1 o 2.
Nella Figura 3 sono riportati altri istogrammi che mostrano il processo Surface Flinger, inclusi eventi VSync e operazioni di scambio dei thread nell'interfaccia utente:
Mostra frame
Questa sezione, spesso la più alta del report, mostra una linea multicolore seguita da pile di barre. Queste forme rappresentano lo stato e lo stack di
frame di un determinato thread creato. Ogni livello dello stack rappresenta una chiamata a beginSection()
o l'inizio di un evento di traccia personalizzata che hai definito per la tua app o il tuo gioco.
La linea multicolore sopra ogni pila di barre rappresenta l'insieme di stati di un determinato thread nel tempo. Ogni segmento della linea può contenere uno dei seguenti colori:
- Verde: in esecuzione
- Il thread sta completando il lavoro relativo a un processo o sta rispondendo a un interruzione.
- Blu: eseguibile
- Il thread può essere eseguito, ma al momento non è pianificato.
- Bianco: mentre dormi
- Il thread non ha attività da svolgere, forse perché è bloccato su un blocco mutex.
- Arancione: sonno ininterrotto
- Il thread è bloccato all'I/O o è in attesa del completamento di un'operazione sul disco.
- Viola: sonno interrotto
- Il thread è bloccato su un'altra operazione kernel, di solito la gestione della memoria.
Scorciatoie da tastiera
La seguente tabella elenca le scorciatoie da tastiera disponibili durante la visualizzazione di un report di Systrace:
Chiave | Descrizione | |
---|---|---|
M | Aumenta lo zoom sulla sequenza temporale della traccia. | |
PE | Esegui la panoramica a sinistra sulla sequenza temporale della traccia. | |
S | Diminuisci lo zoom della sequenza temporale della traccia. | |
G | Esegui la panoramica a destra sulla sequenza temporale della traccia. | |
SU | Centra la sequenza temporale della traccia sulla posizione corrente del mouse. | |
L | Inquadrare la selezione corrente. | |
1 | Imposta il modello di selezione attivo in modalità di selezione. Corrisponde al primo pulsante visualizzato nella barra degli strumenti del selettore del mouse (vedi l'immagine a destra). |
|
2 | Imposta il modello di selezione attivo in modalità "pan" per impostare il modello di selezione attivo. Corrisponde al secondo pulsante che compare nella barra degli strumenti del selettore del mouse (vedi l'immagine a destra). |
|
3 | Imposta il modello di selezione attivo in modalità "zoom". Corrisponde al terzo pulsante visualizzato nella barra degli strumenti del selettore del mouse (vedi l'immagine a destra). |
|
4 | Imposta il modello di selezione attivo in modalità a tempo. Corrisponde al quarto pulsante visualizzato nella barra degli strumenti del selettore del mouse (vedi l'immagine a destra). |
|
G | Mostra griglia all'inizio dell'attività attualmente selezionata. | |
Maiusc+G | Mostra griglia alla fine dell'attività attualmente selezionata. | |
Freccia sinistra | Seleziona l'evento precedente nella sequenza temporale attualmente selezionata. | |
Freccia destra | Seleziona l'evento successivo nella sequenza temporale attualmente selezionata. |
Esaminare i problemi di rendimento
Quando interagisci con un report di Systrace, puoi controllare l'utilizzo della CPU del dispositivo per tutta la durata della registrazione. Per informazioni sulla navigazione nel report HTML, consulta la sezione Scorciatoie da tastiera oppure fai clic sul pulsante ? nell'angolo in alto a destra del report.
Le sezioni seguenti spiegano come esaminare le informazioni del report per individuare e risolvere problemi di prestazioni.
Identifica i problemi di rendimento
Quando ti sposti in un report di Systrace, puoi identificare più facilmente i problemi di prestazioni eseguendo una o più delle seguenti operazioni:
- Seleziona l'intervallo di tempo desiderato disegnando un rettangolo intorno all'intervallo di tempo.
- Contrassegna o evidenzia un'area problematica utilizzando lo strumento Righello.
- Mostra ogni operazione di aggiornamento del display facendo clic su Opzioni di visualizzazione > Evidenzia VSync.
Ispeziona frame e avvisi dell'interfaccia utente
Come mostrato nella Figura 4, un report Systrace elenca ogni processo che esegue il rendering dei frame dell'interfaccia utente e indica ogni frame sottoposto a rendering lungo la sequenza temporale. I frame che eseguono il rendering entro i 16,6 millisecondi necessari per mantenere una velocità di 60 frame al secondo stabili sono indicati con cerchi di frame verdi. I frame che richiedono più di 16,6 millisecondi per il rendering sono indicati con cerchi di frame gialli o rossi.
![Visualizzazione ingrandita di un fotogramma](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-unselected.png?authuser=6&hl=it)
Se fai clic su un cerchio di frame, questo viene evidenziato e vengono fornite ulteriori informazioni sul lavoro svolto dal sistema per eseguire il rendering del frame, inclusi gli avvisi. Il report mostra anche i metodi eseguiti dal sistema durante il rendering del frame. Puoi esaminare questi metodi per determinare le potenziali cause del jank dell'UI.
![Frame problematico selezionato](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-selected.png?authuser=6&hl=it)
Dopo aver selezionato un frame lento, potresti visualizzare un avviso nel riquadro inferiore del report. L'avviso mostrato nella Figura 5 indica che il problema principale del frame è il fatto che viene trascorso troppo tempo all'interno di ListView
riciclo e rebining. Sono
disponibili link agli eventi pertinenti nella traccia che spiegano di più su cosa sta
facendo il sistema in questo periodo.
Per visualizzare ciascun avviso che lo strumento ha rilevato nella tua traccia, nonché il numero di volte in cui il dispositivo ha attivato ciascun avviso, fai clic sulla scheda Avvisi all'estrema destra della finestra, come mostrato nella Figura 6. Il riquadro Avvisi consente di visualizzare i problemi che si verificano nella traccia e la frequenza con cui contribuiscono al jank. Questo riquadro può essere considerato come un elenco di bug da correggere. Spesso, una piccola modifica o miglioramento in un'area può causare la rimozione di un intero insieme di avvisi.
![Scheda Avviso visualizzata](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-selected-alert-tab.png?authuser=6&hl=it)
Se noti che il thread dell'interfaccia utente esegue troppo lavoro, utilizza uno dei seguenti approcci per determinare quali metodi consumano troppo tempo di CPU:
- Se hai idea di quali metodi potrebbero causare colli di bottiglia, aggiungi indicatori di traccia a questi metodi. Per saperne di più, consulta la guida su come definire gli eventi personalizzati nel codice.
- Se hai dubbi sull'origine dei colli di bottiglia nell'interfaccia utente, utilizza il Profilor CPU disponibile in Android Studio. Puoi generare log di traccia, quindi importarli e ispezionarli utilizzando il Profiler CPU.