Flame-Diagramm fokussieren
Zum Verwenden des Filters Fokus wählen Sie eine einzelne Funktion aus, damit im Flame-Diagramm alle Codepfade zu und von dieser Funktion dargestellt werden können. Mit einem fokussierten Diagramm lassen sich zwei allgemeine Aufgaben ausführen:
- Analyse des gesamten Ressourcenverbrauchs einer bestimmten Funktion, die von mehreren Stellen aus aufgerufen wird.
- Analyse des Zeitanteils, die verschiedene Aufrufer einer Funktion in der Funktion verbracht haben.
Wie analysieren Sie beispielsweise den Ressourcenverbrauch um die Funktion Sort
herum mithilfe des Flame-Standarddiagramms?
Im nächsten Abschnitt wird das Diagramm auf Sort
fokussiert und so diese Frage beantwortet.
Die Flame-Diagramme auf dieser Seite wurden im Farbmodus erstellt und im Vergleichsmodus Vergleichen mit wurden die Standardwerte für Name und Keine festgelegt.
Erläuterung des fokussierten Diagramms
Die durch den Filter Fokus generierte Grafik erstellt praktisch zwei Flame-Diagramme für die angegebene Funktion und verknüpft diese miteinander.
Im obigen Diagramm wird der Frame, welcher der Funktion Sort
entspricht, in voller Breite angezeigt und hervorgehoben. Der Frame-Text enthält den Funktionsnamen, einen Prozentsatz und die Anzahl der Profile, die für die Analyse verwendet werden. In diesem Fall zeigen die Messwerte an, dass die Funktion Sort
insgesamt 8,85 % der CPU-Zeit beansprucht hat.
In der unteren Hälfte des obigen Diagramms wird die Funktion Sort
als Ausgangspunkt eines Standard-Flame-Diagramms verwendet. Darunter werden alle von der Funktion aufgerufenen Funktionen angezeigt.
Diesen Teil mit dem Standard-Flame-Diagramm können Sie über den Filter Ab Frame anzeigen erstellen:
In der oberen Hälfte des Diagramms sind die Aufrufer von Sort
zu sehen und die Aufgerufenen ausgeblendet. Sie können sich der oberen Hälfte mithilfe einer Reihe von Filtern annähern.
Fügen Sie zuerst den Filter Stacks anzeigen für Sort
hinzu. Fügen Sie anschließend für jede von Sort
aufgerufene Funktion entweder Stacks ausblenden oder Frames ausblenden hinzu. In dieser Situation würden Sie Stacks ausblenden für quickSort
hinzufügen, um diese Funktion und ihre untergeordneten Funktionen zu entfernen, und dann Frames ausblenden für Len
und maxDepth
hinzufügen:
Bei Verwendung dieser Filter zeigt die Annäherung der oberen Hälfte des fokussierten Diagramms, dass die Funktion Sort
über verschiedene Aufrufstacks erreicht wird. Da die Messwerte jedoch nicht aggregiert sind, stellt die Grafik nicht den gesamten Messwertanteil von Sort
dar.
Das fokussierte Diagramm unterscheidet sich leicht von einem Diagramm, welches die zwei Annäherungen lediglich kombiniert:
- Die Fokusfunktion
Sort
wird durch einen einzelnen Frame dargestellt. - Der Frame der Fokusfunktion wird hervorgehoben und in voller Breite angezeigt. Außerdem enthält er Messwerte, welche die Aggregation aller Aufrufstacks darstellen.
- Es gibt mehrere Aufrufstacks, die jeweils mit dem Frame
root
beginnen, sodass Sie den gesamten Aufrufstack ansehen können.
Frame auswählen
Wenn Sie in einem fokussierten Diagramm auf einen Frame klicken, wird das Flame-Diagramm neu gezeichnet und der Aufrufstack dieses Frames detaillierter angezeigt. Beim Aufrufen des Frames über mehrere Aufrufstacks wird jeder dieser Aufrufstacks angezeigt. Aufrufstacks, die den Frame nicht enthalten, werden ausgeblendet. Wenn Sie den ursprünglichen Zustand des Diagramms wiederherstellen möchten, klicken Sie auf den Frame, welcher der Fokusfunktion entspricht.
Im vorherigen Beispiel wird Sort
von (*byFreq).sort
und von (*byLiteral).sort
aufgerufen. Klicken Sie auf diesen Frame, um den Aufrufstack für (*byLiteral).sort
im Detail anzusehen.
Sie können einen weiteren Frame auswählen und die angezeigten Aufrufstacks weiter eingrenzen:
Wenn Sie den ursprünglichen Zustand eines fokussierten Flame-Diagramms wiederherstellen möchten, klicken Sie auf den Frame, der den Wert des Filters Fokus anzeigt. Klicken Sie in diesem Fall auf den grauen Frame mit dem Label Sort
. Hinweis: Wenn Sie den ursprünglichen Zustand eines Flame-Standarddiagramms wiederherstellen möchten, klicken Sie auf den Stamm-Frame (ganz oben).
Diagramm analysieren
Zum Analysieren eines fokussierten Flame-Diagramms verwenden Sie dieselben Steuerelemente und Filter, die Sie zum Analysieren eines Flame-Standarddiagramms verwenden. Es gibt jedoch Unterschiede bei der Interaktion der Diagramme mit dem Mauszeiger:
Wenn Sie den Mauszeiger über einen Frame bewegen, werden in der Kurzinfo Messwertdaten angezeigt. Bei einem Flame-Standarddiagramm werden alle Messwertdaten für den Frame angezeigt. Bei einem fokussierten Flame-Diagramm werden aggregierte Messwertdaten für die Funktion angezeigt.
Wenn Sie einen Frame auswählen, wird das mit diesem Frame neu gezeichnete Flame-Diagramm in voller Breite neu gezeichnet. Wenn Sie den ursprünglichen Zustand eines Flame-Standarddiagramms wiederherstellen möchten, müssen Sie den obersten Frame auswählen. Wenn Sie den ursprünglichen Zustand eines fokussierten Flame-Diagramms wiederherstellen möchten, klicken Sie auf den Frame, der den Wert des Fokusfilters anzeigt.
Weitere Informationen zum fokussierten Diagramm beim Vergleichen von Profilen finden Sie unter Vergleich fokussieren.
Fokusfilter festlegen
Es gibt verschiedene Methoden zum Festlegen eines Fokusfilters, die jedoch alle zum selben Diagramm führen.
Mit dem Diagramm
Positionieren Sie den Zeiger auf dem gewünschten Frame und klicken Sie dann in der Kurzinfo des Frames auf Fokus.
Die Fokusfunktion wird aus dem Frame extrahiert.
In diesem Beispiel zeigt das Flame-Diagramm, das um die Funktion (*huffmanBitWriter).write
herum erweitert ist, drei verschiedene Aufrufstacks an:
Mit der Fokusliste
So fokussieren Sie das Flame-Diagramm auf eine bestimmte Funktion:
- Klicken Sie auf Liste list, um die Tabelle Gewünschte Funktion auswählen zu öffnen.
- Wählen Sie in der Tabelle einen Funktionsnamen aus oder klicken Sie für eine bestimmte Funktion auf Aktionen more_vert und wählen Sie Fokus aus:
Wenn die von Ihnen ausgewählte Funktion über verschiedene Aufrufstacks aufgerufen werden kann, wird jeder Aufrufstack im Flame-Diagramm angezeigt.
Sie können die Tabellenzeilen in aufsteigender (arrow_upward) oder absteigender (arrow_downward) Reihenfolge sortieren. Wählen Sie dazu ein Kopfzeilenelement der Tabelle aus.
In jeder Zeile der Tabelle werden ein Funktionsname und Statistiken angezeigt, die sich auf die Ausführung der Funktion beziehen.
Diese Tabelle zeigt, dass die Ausführung der Funktion (*compressor).deflate
2,78 s dauert, wobei 1,8 s in die Funktion selbst und der Rest der Zeit auf den Aufrufstack entfallen.
Eine Spalte mit Prozentangaben gibt an, dass 57 % der gesamten Ausführungszeit für die Funktion (*compressor).deflate
aufgewendet werden. Eine andere Spalte gibt an, dass 89 % der Zeit für (*compressor).deflate
oder eine Funktion im zugehörigen Aufrufstack ausgeführt werden.
Die Spalte „Anzahl” gibt schließlich darüber Aufschluss, dass es drei Sequenzen gibt, welche die Funktion (*compressor).deflate
aufrufen.
Beim Vergleichen von Profilen unterscheidet sich der Inhalt der Fokusliste. Weitere Informationen dazu finden Sie unter Vergleich fokussieren.
Mit der Filterleiste
Klicken Sie in der Filterleiste auf den grauen Text Profildatenfilter hinzufügen und geben Sie dann Focus:
und einen String für die Funktion ein, die Sie sich näher ansehen möchten. Sie können einen Teilstring einschließlich Paketpräfixe oder den vollständigen Namen verwenden. Wenn Sie einen mehrdeutigen String angeben, wird die Funktion mit der größten Übereinstimmung ausgewählt.
Wahlweise können Sie auch auf Filter klicken, Fokus auswählen und dann den String zur Identifizierung der Funktion eingeben.
Wenn die von Ihnen ausgewählte Funktion über verschiedene Aufrufstacks aufgerufen werden kann, wird jeder Aufrufstack im Flame-Diagramm angezeigt.
Fokusfilter entfernen
Zum Entfernen des Fokusfilters klicken Sie neben dem Infofeld für Filter auf Schließen (close).