Visualizza i profili nella UI di Perfetto

Dopo aver recuperato un profilo da un dispositivo di test o averlo scaricato dal tuo backend, puoi aprire il file nella UI di Perfetto per ispezionare le cronologie, gli stati dei thread e i grafici di conservazione della memoria. In questa pagina viene descritto come navigare tra i tracciamenti del sistema oscurati e i dump dell'heap Java acquisiti con ProfilingManager.

Visualizza il tracciamento del sistema

Apri il file .perfetto-trace nella UI di Perfetto per ispezionare l'attività della CPU e dei thread nel tempo.

Cronologia di un tracciamento del sistema oscurato nell'interfaccia utente di Perfetto
Figura 1. Esempio di traccia oscurata.

Per proteggere la privacy degli utenti, ProfilingManager oscura i tracciamenti del sistema combinando l'attività della CPU di tutti gli altri processi in un'unica traccia OtherProcesses. L'ispezione di questa traccia combinata ti consente comunque di determinare se la lentezza della tua app è stata causata da un collo di bottiglia interno o dal carico complessivo del dispositivo.

La Figura 2 evidenzia le sezioni principali di un tracciamento del sistema oscurato:

Sezioni numerate di un tracciamento del sistema oscurato nell'interfaccia utente di Perfetto
Figura 2. Sezioni di una traccia oscurata.
  1. Elenco CPU: mostra tutti i processori disponibili sul dispositivo.
  2. Attività della CPU: mostra i thread eseguiti da ogni CPU.
  3. Visualizzazione Altri processi: mostra le risorse della CPU utilizzate da altri processi.
  4. Visualizzazione processo: mostra il processo della tua app.
  5. Visualizzazione thread: mostra i thread in esecuzione all'interno del processo e i relativi stati (Eseguibile (R), In esecuzione (R), In pausa (S), In pausa non interrompibile (D)), che vengono mappati direttamente agli stati dei processi Linux.
  6. Sezioni di traccia: questa sezione mostra le annotazioni di traccia aggiunte dagli sviluppatori di app o dal framework. Queste annotazioni comprendono i calcoli tra Trace.beginSection e Trace.endSection.

Per ulteriori informazioni sulla UI di Perfetto e sulla visualizzazione delle tracce, consulta la documentazione di Perfetto.

Visualizza i dump dell'heap Java

Dopo aver acquisito un dump dell'heap Java utilizzando PROFILING_TYPE_JAVA_HEAP_DUMP, apri il file .perfetto-java-heap-dump risultante nella UI di Perfetto per identificare le perdite di memoria o ottimizzare la memoria utilizzata. In Heapdump Explorer, puoi esplorare il grafico dell'heap, ispezionare i grafici a fiamme delle dimensioni cumulative degli oggetti e sfogliare classi, oggetti e dominatori, come mostrato nella Figura 3.

Esplora heapdump della UI di Perfetto che mostra un grafico a fiamme delle dimensioni degli oggetti heap Java.
Figura 3. Grafico a fiamme del dump dell'heap Java nell'interfaccia utente di Perfetto.

Differenze tra i dump dell'heap di ProfilingManager e i dump HPROF

A differenza degli heap dump .hprof standard (come quelli acquisiti con Debug.dumpHprofData o in Android Studio), ProfilingManager acquisisce un heap dump Perfetto ART (.perfetto-java-heap-dump). Anziché eseguire il dump dei contenuti della memoria non elaborata, ProfilingManager registra il grafico di conservazione degli oggetti e i metadati di dimensionamento, omettendo i dati non elaborati archiviati all'interno degli oggetti:

  • Dati raccolti:
    • Classi e tipi: nomi delle classi, gerarchie delle superclassi, classloader, dimensioni delle istanze e tipi di riferimento (ad esempio classi normali, array, stringhe o riferimenti deboli, soft, finalizer e phantom).
    • Istanze e dimensioni degli oggetti: la dimensione di base di ogni oggetto (self_size), la relativa regione heap (HEAP_TYPE_APP, HEAP_TYPE_ZYGOTE o HEAP_TYPE_BOOT_IMAGE) e la memoria nativa associata registrata tramite NativeAllocationRegistry.
    • Riferimenti e radici GC: radici di garbage collection (come variabili globali e locali JNI, frame dello stack Java e oggetti thread) e catene di riferimenti a livello di campo che mostrano quale oggetto conserva un altro oggetto e tramite quale nome di campo.
    • Seleziona i metadati di dimensionamento: metadati non sensibili per tipi di framework specifici, come le dimensioni di Bitmap (mWidth e mHeight).
  • Elementi omessi: valori effettivi dei campi primitivi, contenuti dei caratteri String e payload degli array non elaborati (byte[], char[] e altri array primitivi). L'omissione dei contenuti degli oggetti non elaborati protegge la privacy degli utenti sui dispositivi di produzione e mantiene i file di dump notevolmente più piccoli.

Passaggi successivi

Oltre all'ispezione visiva nell'interfaccia utente di Perfetto, puoi eseguire query sui profili con PerfettoSQL, analizzare le tracce in blocco o analizzare i profili con l'AI.