トップダウン チャートとボトムアップ グラフ

[Top Down] タブには呼び出しの一覧が表示され、メソッドノードまたは関数ノードを展開すると呼び出し先が表示されます。図 2 は、次の呼び出しチャートのトップダウン グラフを示しています。グラフ内の各矢印は、呼び出し元から呼び出し先を指しています。

図 1. セルフ時間、子時間、メソッド D の合計時間を示した呼び出しチャートの例。

図 2 に示すように、[Top Down] タブでメソッド A のノードを展開すると、その呼び出し先であるメソッド B とメソッド D が表示されます。さらに、メソッド D のノードを展開すると、その呼び出し先であるメソッド B とメソッド C などが表示されます。[Flame Chart] タブの場合と同じように、トップダウン ツリーでは同じコールスタックを共有している同一のメソッドのトレース情報が集約されます。つまり、[Flame Chart] タブの表示は [Top Down] タブをグラフィックで表示したものです。

[Top Down] タブには、各呼び出しに費やされた CPU 時間の把握に役立つ次の情報が表示されます(時間は、選択した範囲にあるスレッドの合計時間の割合としても表されます)。

  • Self: 図 1 のメソッド D が示すように、メソッドまたは関数の呼び出しが自身のコードの実行に費やした時間であり、呼び出し先の実行に費やした時間ではありません。
  • Children: 図 1 のメソッド D が示すように、メソッドまたは関数呼び出しがその呼び出し先の実行に費やした時間であり、自身のコードの実行に費やした時間ではありません。
  • Total: メソッドの Self 時間と Children 時間の合計です。図 1 のメソッド D が示すように、アプリがメソッド呼び出しの実行に費やした合計時間を表します。

図 2. トップダウン ツリー。

図 3. 図 5 のメソッド C のボトムアップ ツリー

[Bottom Up] タブには、呼び出しの一覧が表示され、メソッドまたは関数のノードを展開するとその呼び出し元が表示されます。図 3 では、図 2 で示すトレース例を使用してメソッド C のボトムアップ ツリーを示しています。ボトムアップ ツリーでメソッド C のノードを開くと、その一意の各呼び出し元であるメソッド B とメソッド D が表示されます。メソッド B はメソッド C を 2 回呼び出しますが、ボトムアップ ツリーでメソッド C のノードを展開すると、メソッド B が 1 つだけ表示されることに注意してください。さらに、メソッド B のノードを展開すると、その呼び出し元であるメソッド A とメソッド D が表示されます。

[Bottom Up] タブは、メソッドまたは関数を最も多くの(または最も少ない)CPU 時間を消費したスレッド順に並べ替える際に便利です。各ノードを調べると、これらのメソッドまたは関数を呼び出すときに最も多くの CPU 時間を消費した呼び出し元を特定できます。トップダウン ツリーとは異なり、ボトムアップ ツリーの各メソッドまたは関数の計時情報は、各ツリーの最上部のメソッド(トップノード)に関連しています。CPU 時間は、記録中のスレッドの合計時間の割合としても表されます。次の表は、トップノードとその呼び出し元(サブノード)の計時情報を解釈する方法を理解するために役立ちます。

Self Children Total
ボトムアップ ツリーの最上位のメソッドまたは関数(トップノード) メソッドまたは関数がその呼び出し先ではなく自身のコードの実行に費やした合計時間。トップダウン ツリーとは異なり、この計時情報は、記録中におけるメソッドまたは関数へのすべての呼び出しの合計時間を表しています。 メソッドまたは関数が自身のコードではなくその呼び出し先の実行に費やした合計時間。トップダウン ツリーとは異なり、この計時情報は、記録中におけるメソッドまたは関数の呼び出し先へのすべての呼び出しの合計時間を表しています。 セルフ時間と子時間の合計。
呼び出し元(サブノード) 呼び出し元から呼び出されたときの呼び出し先のセルフ時間の合計。図 6 のボトムアップ ツリーを例として説明すると、メソッド B のセルフ時間は、メソッド B から呼び出されるたびに実行されるメソッド C のセルフ時間の合計に等しくなります。 呼び出し元から呼び出されたときの呼び出し先の子時間の合計。図 6 のボトムアップ ツリーを例として説明すると、メソッド B の子時間は、メソッド B から呼び出されるたびに実行されるメソッド C の子時間の合計に等しくなります。 セルフ時間と子時間の合計。

注: Android Studio は、特定の記録中にプロファイラがファイルサイズの制限に達すると、新しいデータの収集を停止します(ただし、記録は停止しません)。通常、インストルメント化されたトレースを実行すると、データの収集がより早く停止します。このタイプのトレースでは、サンプリング ベースのトレースよりも短い時間でより多くのデータを収集するからです。インスペクション タイムフレームを制限への到達後に発生した記録期間に拡張した場合、トレースペインのタイミング データは変化しません(新しいデータが利用できないため)。また、データが利用できない記録の部分のみを選択すると、トレースペインには計時情報として NaN が表示されます。