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:

  1. Analyse des gesamten Ressourcenverbrauchs einer bestimmten Funktion, die von mehreren Stellen aus aufgerufen wird.
  2. 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?

Screenshot: Sortierfunktion im Flame-Diagramm

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.

Flame-Diagramm mit Fokus auf Sortierfunktion

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:

Screenshot: Unterer Bereich des Flame-Diagramms, in dem Aufrufende der Sortierfunktion angezeigt werden

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:

Screenshot: Oberer Bereich des Flame-Diagramms, in dem Aufrufer der Sortierfunktion angezeigt werden

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:

Screenshot: Über Sortierung erweitertes Flame-Diagramm

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:

Screenshot: Auf einen winzigen Frame fokussiertes Flame-Diagramm

Mit der Fokusliste

So fokussieren Sie das Flame-Diagramm auf eine bestimmte Funktion:

  1. Klicken Sie auf Liste , um die Tabelle Gewünschte Funktion auswählen zu öffnen.
  2. Wählen Sie in der Tabelle einen Funktionsnamen aus oder klicken Sie für eine bestimmte Funktion auf Aktionen und wählen Sie Fokus aus:

Screenshot: Tabelle "Select focus function".

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 () oder absteigender () 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 ().

Nächste Schritte