Enregistrer les traces

Pour commencer à enregistrer une trace, sélectionnez une configuration d'enregistrement dans l'un des menus déroulants situés au-dessus ou en dessous du Profileur de processeur, puis cliquez sur Record (Enregistrer).

Figure 1 : Le Profileur de processeur affiche l'état, la durée et le type d'enregistrement en cours.

Interagissez avec votre application, puis cliquez sur Stop (Arrêter) lorsque vous avez terminé. Le profileur affiche automatiquement ses informations de traçage dans le volet de trace, comme illustré dans la figure 2.

Figure 2. Le Profileur de processeur après l'enregistrement d'une trace de méthode.

  1. Plage sélectionnée : détermine la portion de l'enregistrement à inspecter dans le volet de trace. Lorsque vous enregistrez une trace pour la première fois, le Profileur de processeur sélectionne automatiquement l'intégralité de votre enregistrement dans la chronologie du processeur. Pour inspecter les données de trace d'un segment spécifique de la période enregistrée, faites glisser les bornes de la région en surbrillance.
  2. Interaction : cette section affiche une chronologie des interactions des utilisateurs et des événements de cycle de vie des applications.
  3. Threads : cette section affiche une chronologie de l'activité (par exemple, en cours d'exécution, en veille, etc.) et le graphique d'appel (ou le graphique des événements de trace dans Traçage système) de chacun des threads.
    • Utilisez le pointeur et les raccourcis clavier pour parcourir la chronologie.
    • Double-cliquez sur le nom du thread ou appuyez sur Entrée lorsqu'un thread est sélectionné afin de le développer ou de le réduire.
    • Sélectionnez un thread pour afficher des informations supplémentaires dans le volet d'analyse. Maintenez la touche Maj ou Ctrl enfoncée (touche Commande sur Mac) pour sélectionner plusieurs threads.
    • Sélectionnez un appel de méthode (ou un événement de trace dans Traçage système) pour afficher des informations supplémentaires dans le volet d'analyse.
  4. Volet d'analyse : affiche les données de trace pour la plage de temps et le thread ou l'appel de méthode sélectionnés. Les onglets d'analyse de ce volet vous permettent de sélectionner comment afficher chaque trace de la pile, tandis que le menu déroulant de référence temporelle vous permet de déterminer le mode de mesure du temps d'exécution.
  5. Onglets du volet d'analyse : permettent de choisir comment afficher les détails des traces. Pour en savoir plus sur chaque option, consultez la page Inspecter les traces.
  6. Menu de référence temporelle : permet de sélectionner l'une des options suivantes pour déterminer le mode de mesure de l'écoulement du temps pour chaque appel (uniquement compatible avec les méthodes Java d'échantillonnage et de trace) :
    • Suivi à l'horloge : l'horodatage représente le temps écoulé réel.
    • Suivi au niveau du thread : l'horodatage représente l'écoulement du temps réel dont sont déduites les périodes lors desquelles le thread ne consomme pas de ressources de processeur. Le temps suivi au niveau du thread pour un appel donné sera toujours inférieur ou égal au temps suivi à l'horloge. L'utilisation du suivi au niveau du thread permet de mieux comprendre quelle proportion de l'utilisation réelle du processeur par un thread est consommée par une méthode ou une fonction donnée.
  7. Filtrer : permet de filtrer les données de trace par fonction, méthode, classe ou nom de package. Par exemple, si vous souhaitez identifier rapidement des données de trace associées à un appel spécifique, saisissez son nom dans le champ de recherche. Dans l'onglet Graphique de type "flamme", les piles d'appels incluant un appel, un package ou une classe correspondant à la requête de recherche seront mises en évidence. Dans les onglets Descendant et Ascendant, ces piles d'appels deviennent prioritaires sur les autres résultats de trace. Vous pouvez également activer les options suivantes en cochant la case appropriée à côté du champ de recherche :
    • Expression régulière : permet d'inclure des expressions régulières dans votre recherche.
    • Respecter la casse : permet de tenir compte de la casse dans votre recherche.
Conseil : Les raccourcis suivants sont disponibles lorsque vous inspectez la chronologie dans Threads.
  • Zoom avant : appuyez sur W ou utilisez le défilement avant de la molette de votre souris tout en maintenant la touche Ctrl enfoncée (touche Commande sur Mac).
  • Zoom arrière : appuyez sur S ou utilisez le défilement arrière de la molette de votre souris tout en maintenant la touche Ctrl enfoncée (touche Commande sur Mac).
  • Défilement à gauche : appuyez sur A ou faites glisser le pointeur vers la droite tout en maintenant la barre d'espace enfoncée.
  • Défilement à droite : appuyez sur D ou faites glisser le pointeur vers la gauche tout en maintenant la barre d'espace enfoncée.
  • Développer ou réduire un thread : double-cliquez sur le nom du thread ou appuyez sur Entrée lorsque le thread concerné est sélectionné.

Choisir une configuration d'enregistrement

Avant de commencer à enregistrer des informations de trace, choisissez la configuration d'enregistrement adaptée aux informations de profilage que vous souhaitez capturer :

  • Échantillonnage des méthodes Java : capture la pile d'appel à intervalles réguliers pendant l'exécution du code Java de votre application. Le profileur compare des ensembles de données capturées pour déduire des informations sur l'horodatage et l'utilisation des ressources liées à l'exécution de code Java dans votre application.

    L'un des problèmes inhérents au traçage basé sur des échantillons est que si votre application saisit une méthode après une capture de la pile d'appel et quitte la méthode avant la capture suivante, cet appel de méthode n'est pas consigné par le profileur. Si vous souhaitez surveiller des méthodes avec des cycles de vie courts, vous devez utiliser le traçage instrumenté.

  • Traçage des méthodes Java : instrumente votre application au moment de l'exécution pour enregistrer un horodatage au début et à la fin de chaque appel de méthode. Les codes temporels sont collectés et comparés pour générer les données de traçage des méthodes, y compris des informations de minutage et l'utilisation du processeur.

    Notez que la surcharge résultant de l'instrumentation de chaque méthode a un impact sur les performances d'exécution et peut influencer le profilage des données. Ce phénomène est encore plus visible pour les méthodes dont le cycle de vie est relativement court. En outre, si votre application exécute un grand nombre de méthodes en très peu de temps, le profileur risque de dépasser rapidement sa limite de taille de fichier et se trouver dans l'incapacité d'enregistrer le reste des données de traçage.

  • Échantillonnage des fonctions C/C++ : capture des échantillons de trace des threads natifs de votre application. Pour utiliser cette configuration, vous devez déployer votre application sur un appareil équipé d'Android 8.0 (niveau d'API 26) ou d'une version ultérieure.

    En interne, cette configuration utilise simpleperf pour suivre le code natif de votre application. Si vous souhaitez spécifier des options supplémentaires pour simpleperf (par exemple, pour échantillonner des processeurs d'appareil spécifiques ou spécifier la durée des échantillons avec un haut niveau de précision), vous pouvez utiliser simpleperf depuis une ligne de commande.

  • Traçage des appels système : capture des détails précis permettant d'inspecter l'interaction de votre application avec les ressources du système. Vous pouvez inspecter les codes temporels et les durées exacts de vos états de thread, visualiser les goulots d'étranglement pour chaque cœur de votre processeur et ajouter des événements de trace personnalisés à analyser. Ces informations peuvent être essentielles pour résoudre des problèmes de performances. Pour utiliser cette configuration, vous devez déployer votre application sur un appareil équipé d'Android 7.0 (niveau d'API 24) ou d'une version ultérieure.

    Lorsque vous utilisez cette configuration de trace, vous pouvez marquer visuellement des routines de code importantes dans la chronologie du profileur en instrumentant votre code. Pour instrumenter le code C/C++, utilisez l'API de traçage du code natif fournie par trace.h. Pour instrumenter le code Java, utilisez la classe Trace. Pour en savoir plus, consultez la section Instrumenter le code de votre application.

    Cette configuration de traçage repose sur systrace. Vous pouvez utiliser l'utilitaire de ligne de commande systrace pour spécifier des options autres que celles fournies dans le Profileur de processeur. Les données supplémentaires au niveau du système fournies par systrace peuvent vous aider à inspecter les processus natifs du système et à résoudre les problèmes liés aux frames abandonnés ou retardés.

    Sur les appareils équipés d'Android 9.0 (niveau d'API 28) ou d'une version ultérieure, vous pouvez utiliser une application système appelée Traçage système pour enregistrer les traces système d'un appareil.

Créer, modifier ou afficher une configuration d'enregistrement

Pour créer, modifier et afficher les configurations d'enregistrement, sélectionnez Edit configurations (Modifier les configurations) dans le menu déroulant des configurations d'enregistrement, en haut du Profileur de processeur, et accédez à la boîte de dialogue CPU Recording Configurations (Configurations d'enregistrement du processeur).

Pour afficher les paramètres d'une configuration d'enregistrement existante, sélectionnez-la dans le volet gauche de la boîte de dialogue Configurations d'enregistrement du processeur.

Pour créer une configuration d'enregistrement :

  1. Cliquez sur Ajouter  en haut à gauche de la boîte de dialogue. Cette opération crée une configuration avec des paramètres par défaut.
  2. Attribuez un nom à votre configuration.
  3. Sélectionnez une technologie de traçage.
  4. Pour un enregistrement échantillonné, spécifiez l'intervalle d'échantillonnage en microsecondes (μs). Cette valeur représente le délai entre chaque échantillon de la pile d'appel de votre application. Plus l'intervalle est court, plus vous atteindrez rapidement la limite de taille du fichier d'enregistrement de vos données.
  5. Spécifiez la limite de taille, en mégaoctets (Mo), du fichier d'enregistrement des données sur l'appareil connecté. Lorsque vous arrêtez l'enregistrement, Android Studio analyse ces données et les affiche dans la fenêtre du profileur. Si vous augmentez la limite et enregistrez une grande quantité de données, Android Studio met beaucoup plus de temps à analyser le fichier et peut cesser de répondre.

    Remarque : Si vous utilisez un appareil connecté exécutant Android 8.0 (niveau d'API 26) ou une version ultérieure, la taille du fichier de données de trace n'est pas limitée et cette valeur est ignorée. Toutefois, vous devez faire attention à la quantité de données collectées par l'appareil après chaque enregistrement. Android Studio peut rencontrer des difficultés pour analyser les fichiers de traçage volumineux. Par exemple, enregistrer une trace échantillonnée avec un intervalle d'échantillonnage court ou une trace instrumentée pendant que votre application appelle de nombreuses méthodes en très peu de temps, génère rapidement des fichiers de trace volumineux.

  6. Pour accepter les modifications et continuer à apporter des modifications à d'autres configurations, cliquez sur Appliquer. Pour accepter toutes les modifications appliquées et fermer la boîte de dialogue, cliquez sur OK.

Enregistrer l'activité du processeur à l'aide de l'API Debug

Vous pouvez utiliser l'API Debug pour permettre à votre application de démarrer et d'arrêter l'enregistrement de l'activité du processeur dans le Profileur de processeur.

Le Profileur de processeur commence à enregistrer lorsque votre application appelle startMethodTracing(String tracePath), et arrête l'enregistrement lorsqu'elle appelle stopMethodTracing(). Lorsque l'enregistrement de l'activité du processeur est déclenché à l'aide de cette API, le Profileur de processeur indique API Debug comme configuration active pour l'enregistrement du processeur.

Pour contrôler l'enregistrement de l'activité du processeur avec l'API Debug, déployez votre application instrumentée sur un appareil exécutant Android 8.0 (niveau d'API 26) ou une version ultérieure. L'enregistrement initié par l'API est possible dans les applis profilables, mais les profileurs Android Studio nécessitent une appli débogable pour pouvoir afficher l'état d'enregistrement dans l'UI.

Important : L'API Debug est destinée à être utilisée séparément des autres moyens de démarrer ou arrêter l'enregistrement de l'activité du processeur (boutons de l'interface du Profileur de processeur, paramètres d'enregistrement automatique au démarrage de l'application définis dans la configuration d'enregistrement, etc.).

Sa mémoire tampon étant limitée à 8 Mo, la méthode startMethodTracing(String tracePath) de l'API Debug est conçue pour des intervalles courts ou des scénarios difficiles à enregistrer manuellement. Pour des périodes d'enregistrement plus longues, utilisez l'interface utilisateur du profileur dans Android Studio.

Pour en savoir plus, consultez la section Générer des journaux de trace en instrumentant votre application.

Enregistrer l'activité du processeur au démarrage de l'application

Pour commencer automatiquement à enregistrer l'activité du processeur au démarrage de l'application :

  1. Sélectionnez Exécuter > Modifier les configurations.
  2. Dans l'onglet Profilage, cochez la case Commencer à enregistrer une trace de méthode au démarrage.
  3. Sélectionnez une configuration d'enregistrement du processeur dans le menu.
  4. Cliquez sur Appliquer.
  5. Déployez votre application sur un appareil exécutant Android 8.0 (niveau d'API 26) ou une version ultérieure en sélectionnant Exécuter > Profil.