Après avoir récupéré un profil à partir d'un appareil de test ou l'avoir téléchargé depuis votre backend, vous pouvez ouvrir le fichier dans l'interface utilisateur de Perfetto pour inspecter les chronologies, les états des threads et les graphiques de rétention de la mémoire. Cette page explique comment parcourir les traces système masquées et les empreintes de la mémoire Java capturées avec ProfilingManager.
Visualiser les traces système
Ouvrez votre fichier .perfetto-trace dans l'interface utilisateur de Perfetto pour inspecter l'activité du processeur et des threads au fil du temps.
Pour protéger la confidentialité des utilisateurs, ProfilingManager masque les traces système en combinant l'activité du processeur de tous les autres processus dans une seule piste OtherProcesses.
L'inspection de cette piste combinée vous permet toujours de déterminer si la lenteur de votre application est due à un goulot d'étranglement interne ou à la charge globale de l'appareil.
La figure 2 met en évidence les principales sections d'une trace système masquée :
- Liste des processeurs : affiche tous les processeurs disponibles sur votre appareil.
- Tâches du processeur : indique les threads exécutés par chaque processeur.
- Vue "Autres processus" : affiche les ressources de processeur consommées par d'autres processus.
- Process View (Vue des processus) : affiche le processus de votre application.
- Threads View (Vue "Threads") : affiche les threads en cours d'exécution dans votre processus et leurs états (Exécutable (R), En cours d'exécution (R), En veille (S), Veille ininterrompue (D)), qui correspondent directement aux états du processus Linux.
- Tranches de trace : cette section affiche les annotations de trace ajoutées par les développeurs d'applications ou le framework. Ces annotations englobent les calculs entre
Trace.beginSectionetTrace.endSection.
Pour en savoir plus sur l'UI de Perfetto et la visualisation des traces, consultez la documentation de Perfetto.
Visualiser les empreintes de la mémoire Java
Une fois que vous avez capturé une empreinte de la mémoire Java à l'aide de PROFILING_TYPE_JAVA_HEAP_DUMP, ouvrez le fichier .perfetto-java-heap-dump obtenu dans l'UI Perfetto pour identifier les fuites de mémoire ou optimiser l'utilisation de la mémoire. Dans l'explorateur de vidages de tas, vous pouvez explorer le graphique de tas, inspecter les graphiques de type "flamme" des tailles d'objets cumulées, et parcourir les classes, les objets et les dominateurs, comme illustré dans la figure 3.
Différences entre les empreintes de la mémoire ProfilingManager et les empreintes HPROF
Contrairement aux empreintes de la mémoire .hprof standards (comme celles capturées avec Debug.dumpHprofData ou dans Android Studio), ProfilingManager capture une empreinte de la mémoire ART Perfetto (.perfetto-java-heap-dump). Au lieu de vider le contenu de la mémoire brute, ProfilingManager enregistre le graphique de conservation des objets et les métadonnées de dimensionnement, tout en omettant les données brutes stockées dans les objets :
- Données collectées :
- Classes et types : noms de classe, hiérarchies de superclasses, chargeurs de classe, tailles d'instance et types de référence (tels que les classes normales, les tableaux, les chaînes ou les références faibles, logicielles, de finalisation et fantômes).
- Instances et tailles d'objets : taille superficielle de chaque objet (
self_size), sa région de tas de mémoire (HEAP_TYPE_APP,HEAP_TYPE_ZYGOTEouHEAP_TYPE_BOOT_IMAGE) et la mémoire native associée enregistrée viaNativeAllocationRegistry. - Références et racines de récupération de mémoire : racines de récupération de mémoire (telles que les variables globales et locales JNI, les blocs de pile Java et les objets de thread) et chaînes de référence au niveau du champ indiquant quel objet en conserve un autre et via quel nom de champ.
- Sélectionner les métadonnées de dimensionnement : métadonnées non sensibles pour des types de frameworks spécifiques, tels que les dimensions
Bitmap(mWidthetmHeight).
- Éléments omis : valeurs réelles des champs primitifs, contenu des caractères
Stringet charges utiles de tableaux bruts (byte[],char[]et autres tableaux primitifs). L'omission du contenu brut des objets protège la confidentialité des utilisateurs sur les appareils de production et réduit considérablement la taille des fichiers de dump.
Étapes suivantes
Au-delà de l'inspection visuelle dans l'UI Perfetto, vous pouvez interroger des profils avec PerfettoSQL, analyser des traces de manière groupée ou analyser des profils avec l'IA.