Générer des journaux trace en instrumentant votre application

Pour générer une trace de méthode de l'exécution de votre application, vous pouvez instrumenter votre application à l'aide de la classe Debug. L'instrumentation de votre application de cette manière vous permet de mieux contrôler à quel moment précis l'appareil démarre et arrête l'enregistrement des informations de traçage. L'appareil enregistre également vos journaux trace en utilisant les noms que vous spécifiez, ce qui vous permet d'identifier facilement chaque journal ultérieurement. Vous pouvez ensuite afficher chaque journal trace à l'aide du Profileur de processeur d'Android Studio.

Vous pouvez également démarrer et arrêter le traçage dans le Profileur de processeur sans instrumenter le code de votre application.

Avant de commencer à générer des journaux trace, assurez-vous que votre application a ajouté une logique pour les enregistrer dans son répertoire spécifique à l'application.

Instrumenter votre application

Pour créer des journaux trace, appelez startMethodTracing() à l'endroit où vous souhaitez que le système commence à journaliser les données de traçage.

Dans l'appel, vous pouvez spécifier le nom du fichier .trace. Le système l'enregistre alors dans un répertoire spécifique au package destiné aux données d'application persistantes sur l'appareil cible. Le même répertoire est renvoyé par getExternalFilesDir() et se trouve dans le répertoire ~/sdcard/ sur la plupart des appareils. Ce fichier contient les données de trace de méthode binaires, ainsi qu'une table de mappage avec les noms des threads et des méthodes. Pour arrêter le traçage, appelez stopMethodTracing().

L'exemple suivant démarre et arrête l'enregistrement d'un journal trace nommé sample.trace :

Kotlin

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample")

// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing()

Java

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

Notez que si votre application appelle à nouveau la commande startMethodTracing() sans modifier le nom du journal trace, elle écrase le journal existant enregistré sur l'appareil. Pour savoir comment modifier de façon dynamique le nom de chaque journal trace, consultez la section Enregistrer plusieurs journaux.

Si le système atteint la taille maximale de la mémoire tampon avant d'appeler stopMethodTracing(), il arrête le traçage et envoie une notification à la console. Les méthodes de démarrage et d'arrêt des traces fonctionnent avec l'ensemble de votre processus d'application. Autrement dit, vous pouvez appeler startMethodTracing() dans la méthode onCreate(Bundle) de votre activité et appeler stopMethodTracing() dans la méthode onDestroy() de cette activité.

Notez que votre application s'exécute plus lentement lorsque le profilage est activé. Autrement dit, vous ne devez pas utiliser les données de profilage pour déterminer les codes temporels absolus (par exemple, "l'exécution de la méthode foo() prend 2,5 secondes"). Les informations de codes temporels des journaux trace ne sont utiles que lorsque vous les comparez aux journaux trace précédents. Vous pouvez ainsi déterminer si les modifications récentes rendent votre application plus rapide ou plus lente.

Lors du déploiement sur des appareils équipés d'Android 5.0 (niveau d'API 21) et versions ultérieures, vous pouvez utiliser le profilage basé sur des exemples pour profiler avec moins d'impact sur les performances d'exécution. Pour activer le profilage d'échantillons, appelez startMethodTracingSampling() (au lieu d'appeler startMethodTracing()) avec un intervalle d'échantillonnage spécifié. Le système collecte périodiquement des échantillons jusqu'à ce que votre application appelle stopMethodTracing().

Enregistrer plusieurs journaux

Si votre application démarre et arrête une trace de méthode plusieurs fois sans spécifier de nouveau nom pour le journal trace, l'appareil remplace l'ancien journal trace par le nouveau. Autrement dit, il ne conserve que le dernier journal trace. Pour enregistrer plusieurs journaux trace sur votre appareil, renommez-les de manière dynamique chaque fois que votre application appelle startMethodTracing(). L'exemple ci-dessous utilise la classe SimpleDateFormat pour inclure la date et l'heure actuelles lorsque vous nommez chaque journal trace :

Kotlin

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault())
val logDate: String = dateFormat.format(Date())
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing("sample-$logDate")

Java

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
SimpleDateFormat dateFormat =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault());
String logDate = dateFormat.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

Accéder aux journaux trace sur l'appareil

Une fois que le système a créé le journal trace sur votre appareil, vous pouvez accéder au fichier de l'une des manières suivantes :

  • Utilisez l'Explorateur de l'appareil. Pour ouvrir l'Explorateur de l'appareil, cliquez sur View > Tool Windows > Device Explorer (Vue > Fenêtre d'outil > Explorateur de l'appareil) (ou sur le bouton Explorateur de l'appareil dans la barre des fenêtres d'outils). Comme illustré dans la figure 1, vous pouvez localiser les fichiers .trace en accédant au répertoire spécifique au package de votre application.

    Figure 1 : Localiser les journaux trace à l'aide de l'Explorateur de l'appareil.

  • Copiez le fichier sur votre ordinateur local à l'aide de la commande adb pull. La commande ci-dessous copie un journal trace nommé sample.trace de l'appareil dans le répertoire ~/Documents/trace-logs/ de votre ordinateur local.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

Vous pouvez ensuite importer le fichier de trace avec le Profileur de processeur.