Inspecter les journaux trace avec Traceview

Traceview est obsolète. Si vous utilisez Android Studio 3.2 ou une version ultérieure, utilisez plutôt le Profileur de processeur pour inspecter les fichiers .trace capturés en instrumentant votre application avec la classe Debug, enregistrer de nouvelles traces de méthode, enregistrer .trace et examiner l'utilisation du processeur en temps réel par les processus de votre application.

L'outil Traceview fournit une représentation graphique des journaux trace. Vous pouvez générer les journaux en instrumentant votre code avec la classe Debug. Cette méthode de traçage est très précise, car vous pouvez spécifier précisément où, dans le code, vous souhaitez démarrer et arrêter la journalisation des données de trace. Si vous n'avez pas encore généré de journaux trace et que vous les avez enregistrés sur votre appareil local depuis votre appareil connecté, accédez à la page Générer des journaux de trace en instrumentant votre application. L'inspection de ces journaux à l'aide de Traceview vous aide à déboguer votre application et à effectuer le profilage de ses performances.

Conseil : Vous pouvez utiliser dmtracedump dans la ligne de commande pour générer des diagrammes graphiques de piles d'appels de vos fichiers journaux trace.

Si vous n'avez pas besoin d'afficher les journaux trace que vous avez enregistrés en instrumentant votre application avec la classe Debug, vous pouvez utiliser le profileur de processeur fourni avec Android Studio 3.0 et versions ultérieures pour inspecter les threads de votre application et enregistrer les traces de méthode.

Ouvrir un journal trace à l'aide de Traceview

Pour ouvrir un journal trace avec Traceview depuis Android Studio, procédez comme suit :

  1. Démarrez Android Device Monitor.
  2. Dans Android Device Monitor, sélectionnez File > Open File (Fichier > Ouvrir un fichier).
  3. Accédez au fichier .trace que vous souhaitez inspecter.
  4. Cliquez sur Open (Ouvrir).

Remarque : Si vous essayez d'afficher les journaux trace d'une application créée avec la minification du code activée (une build, par exemple), il est possible que certains noms de méthodes et de membres soient obscurcis. Vous pouvez utiliser le fichier mapping.txt ProGuard pour identifier les noms d'origine non obscurcis. Pour en savoir plus sur ce fichier, consultez Décoder une trace de pile obscurcie.

Remarque : L'exécution de traceview à partir de la ligne de commande est obsolète.

Présentation de Traceview

Après avoir ouvert un journal trace, Traceview affiche les données de journal à l'aide des deux volets suivants :

  • Un volet de chronologie décrivant l'entrée et la sortie d'une méthode par chaque thread
  • Un volet de profil résumant l'exécution de chaque thread sur la période du journal trace

Les sections ci-dessous fournissent des informations supplémentaires sur les volets de sortie de Traceview.

Volet de chronologie

La figure 1 montre un gros plan du volet de chronologie. L'exécution de chaque thread est affichée sur sa propre ligne, le temps écoulé augmentant à droite. Chaque méthode est affichée dans différentes couleurs. Les lignes fines situées sous la première ligne montrent les enfants (de l'entrée à la sortie) de la méthode sélectionnée.

Volet de chronologie Traceview

Figure 1 : Volet de chronologie Traceview

Volet de profil

Comme le montre la figure 2, le volet de profil fournit une liste de chaque méthode exécutée par le système au cours de la période du journal trace, ainsi que la durée d'exécution de ces méthodes. Une méthode qui appelle une autre méthode est appelée parent et les méthodes qu'un parent appelle sont appelées enfants. Lorsque vous cliquez sur une méthode pour la sélectionner, ses parents et ses enfants s'affichent sous deux nœuds distincts.

Pour chaque méthode (nœud de niveau supérieur), le tableau affiche les durées inclusives et exclusives (en millisecondes), ainsi que le pourcentage de temps total. Le temps exclusif correspond au temps passé à exécuter le code de la méthode, tandis que le temps inclusif correspond au temps passé à exécuter le code de la méthode plus le temps passé à exécuter ses enfants. Les informations de synchronisation sont également exprimées en temps CPU et en temps réel. Le temps CPU prend uniquement en compte la durée d'utilisation active du processeur par thread, et le temps réel fournit des informations temporelles absolues entre le moment où votre application accède à une méthode et le moment où elle en sort, que le thread soit actif ou inactif.

Pour chaque nœud de niveau supérieur dans le volet du profil, la colonne Appels + Rec, Appels/Total de la table (non illustrée dans la figure 2) indique le nombre d'appels à la méthode et le nombre d'appels récursifs. Pour les méthodes parents et enfants, cette colonne indique également le nombre d'appels pour lesquels la méthode était un enfant ou un parent de la méthode dans le nœud de niveau supérieur.

Volet de profil Traceview.

Figure 2. Volet de profil Traceview.

Problèmes connus de Traceview

La journalisation Traceview ne gère pas parfaitement les threads, ce qui entraîne les problèmes suivants :

  • Si un thread se ferme lors du profilage, son nom n'est pas émis (problème résolu dans Android 5.1 et versions ultérieures).
  • La VM réutilise les ID de thread. Si un thread s'arrête et qu'un autre démarre, ils peuvent présenter le même ID.