Effectuer un focus à partir d'un graphique de type "flamme"
Lorsque vous utilisez le filtre Cibler, vous sélectionnez une seule fonction, et le graphique de type "flamme" affiche les chemins de code entrant et sortant de cette fonction spécifique. Un graphique ciblé vous permet d'effectuer deux tâches courantes :
- L'analyse de la consommation globale des ressources d'une fonction donnée qui est appelée à partir de plusieurs emplacements
- L'analyse de la proportion de temps passé dans une fonction pour différents appelants de la fonction
Par exemple, comment analyser la consommation de ressources autour de la fonction Sort
à l'aide du graphique de type "flamme" standard ?
Dans la section suivante, nous ciblons le graphique sur Sort
afin de répondre à cette question.
Les graphiques de type "flamme" sur cette page ont été créés en définissant Mode couleur et Comparer à respectivement sur les valeurs par défaut Nom et Aucun.
Présentation du graphique ciblé
Le graphique généré par le filtre Focus (Cibler) crée deux graphiques de type "flamme" pour la fonction spécifiée, puis les joint comme ci-dessous :
Dans le graphique précédent, le cadre correspondant à la fonction Sort
est en pleine largeur et mis en surbrillance. Le texte du cadre comprend le nom de la fonction, un pourcentage et le nombre de profils utilisés pour l'analyse. Dans ce cas, les métriques indiquent que la fonction Sort
a consommé globalement 8,85 % du temps CPU.
La moitié inférieure du graphique précédent considère la fonction Sort
comme le point de départ d'un graphique de type "flamme" standard et affiche tous ses appelés.
Vous pouvez générer cette partie avec le graphique de type "flamme" standard à l'aide du filtre Show from frame (Afficher depuis le cadre) :
La partie supérieure du graphique montre les appelants de la fonction Sort
, masqués. Vous pouvez obtenir une approximation de la moitié supérieure à l'aide d'une série de filtres.
Commencez par ajouter un filtre Show stacks (Afficher les piles) pour Sort
. Ensuite, pour chaque fonction appelée par Sort
, ajoutez un filtre Hide stacks (Masquer les piles) ou Hide frames (Masquer les cadres). Dans ce cas, vous devez ajouter un filtre Hide stacks (Masquer les piles) pour quickSort
afin d'éliminer cette fonction et ses enfants, puis ajouter un filtre Hide frames (Masquer les cadres) pour Len
et maxDepth
:
À l'aide de ces filtres, l'approximation de la moitié supérieure du graphique ciblé montre que la fonction Sort
est atteinte via différentes piles d'appels. Cependant, les métriques n'étant pas agrégées, le graphique n'illustre pas la consommation globale des métriques par la fonction Sort
.
Le graphique ciblé est un peu différent d'un graphique qui combine simplement les deux approximations :
- Il existe un seul cadre pour la fonction de focus
Sort
. - Le cadre de la fonction de focus est un cadre en pleine largeur mis en surbrillance et qui affiche des métriques représentant l'agrégation de toutes les piles d'appels.
- Il existe plusieurs piles d'appels, chacune commençant par un cadre
root
. Vous pouvez donc afficher l'intégralité de la pile d'appels.
Sélectionner un cadre
Si vous sélectionnez un cadre dans un graphique ciblé, le graphique de type "flamme" est redessiné avec la pile d'appels de ce cadre affichée avec plus de détails. Si le cadre est atteint grâce à plusieurs piles d'appels, chacune de ces piles est affichée. Les piles d'appels qui n'incluent pas le cadre sont masquées. Pour restaurer l'état d'origine du graphique, sélectionnez le cadre correspondant à la fonction de focus.
Dans l'exemple ci-dessus, la fonction Sort
est appelée par (*byFreq).sort
et par (*byLiteral).sort
. Pour afficher la pile d'appels de (*byLiteral).sort
plus en détail, sélectionnez ce cadre.
Vous pouvez sélectionner un autre cadre et affiner les piles d'appels affichées :
Pour restaurer l'état d'origine d'un graphique de type "flamme" ciblé, sélectionnez le cadre affichant la valeur du filtre Focus (Cibler). Dans ce cas, sélectionnez le cadre grisé libellé Sort
. Notez que pour restaurer l'état d'origine d'un graphique de type "flamme" standard, vous devez sélectionner le cadre racine.
Analyser le graphique
Pour analyser un graphique de type "flamme" ciblé, vous devez utiliser les mêmes commandes et filtres que ceux permettant d'analyser un graphique de type "flamme" standard. Toutefois, les graphiques n'interagissent pas forcément de la même manière avec le pointeur de la souris :
Si le pointeur de la souris passe sur un cadre, l'info-bulle affiche les données de métriques. Pour un graphique de type "flamme" standard, le nombre total des données de métriques pour ce cadre s'affiche. Pour un graphique de type "flamme" ciblé, les données de métriques agrégées pour la fonction s'affichent.
Si vous sélectionnez un cadre, le graphique de type "flamme" est redessiné avec ce cadre affiché en pleine largeur. Pour restaurer l'état d'origine d'un graphique de type "flamme" standard, vous devez sélectionner le cadre supérieur. Pour restaurer l'état d'origine d'un graphique de type "flamme" ciblé, vous devez sélectionner le cadre affichant la valeur du filtre "Cibler".
Pour en savoir plus sur le graphique ciblé lorsque vous comparez des profils, accédez à la section Cibler une comparaison.
Régler le filtre de focus
Il existe différentes méthodes que vous pouvez utiliser pour définir un filtre de focus, mais elles donnent le même graphique.
En utilisant le graphique
Placez votre pointeur sur le cadre qui vous intéresse, puis cliquez sur Focus (Cibler) dans l'info-bulle du cadre.
La fonction de focus est extraite du cadre.
Dans cet exemple, le graphique de type "flamme", développé autour de la fonction (*huffmanBitWriter).write
, affiche trois piles d'appels différentes :
En utilisant la liste de focus
Pour cibler une fonction spécifique sur le graphique de type "flamme", procédez comme suit :
- Cliquez sur Liste list pour ouvrir le tableau Sélectionnez la fonction à mettre en surbrillance.
- Sélectionnez le nom d'une fonction dans le tableau ou, pour une fonction spécifique, cliquez sur Actions more_vert, puis sélectionnez Cibler :
Si la fonction que vous avez sélectionnée peut être appelée via différentes piles d'appels, chacune d'elles est affichée dans le graphique de type "flamme".
Vous pouvez trier les lignes du tableau par ordre croissant arrow_upward (flèche vers le haut) ou décroissant arrow_downward (flèche vers le bas) en sélectionnant un élément d'en-tête de tableau.
Chaque ligne du tableau affiche un nom de fonction et des statistiques relatives à l'exécution de la fonction.
Ce tableau montre que la fonction (*compressor).deflate
s'exécute en 2,78 s et qu'elle passe 1,8 s dans la fonction proprement dite et le reste du temps dans sa pile d'appels.
Une colonne de pourcentages indique que 57 % de la durée totale d'exécution est consacré à la fonction (*compressor).deflate
. Une autre colonne indique que 89 % du temps, la fonction (*compressor).deflate
ou une fonction de sa pile d'appels est en cours d'exécution.
Enfin, la colonne "Count" (Nombre) indique que trois séquences invoquent la fonction (*compressor).deflate
.
Lorsque vous comparez des profils, le contenu de la liste de focus est différent. Pour en savoir plus, consultez la section Effectuer un focus à partir d'une comparaison.
En utilisant la barre de filtre
Cliquez sur le texte grisé Filtrer les données de profil situé dans la barre de filtre, puis saisissez Focus:
et une chaîne identifiant la fonction sur laquelle effectuer le focus. Vous pouvez utiliser une sous-chaîne, y compris les préfixes de package, ou le nom complet. Lorsque vous fournissez une chaîne ambiguë, la fonction qui correspond le mieux à celle-ci sera sélectionnée.
Si vous préférez, vous pouvez cliquer sur Filtres, puis sélectionner Cibler et saisir la chaîne d'identification.
Si la fonction que vous avez sélectionnée peut être appelée via différentes piles d'appels, chacune d'elles est affichée dans le graphique de type "flamme".
Supprimer le filtre de focus
Pour supprimer le filtre de focus, cliquez sur Fermer close dans le filtre.