8

このページを見ています: Traceview と dmtracedump を使用したプロファイリング

「プロファイル パネル」の下には、テキストの下にサンプル プロファイリング結果を参照する次のテキストがあります。

表の最後の列には、このメソッドの呼び出し数と再帰呼び出しの数が表示されます。最後の列は、そのメソッドに対して行われた呼び出しの総数のうちの呼び出しの数を示しています。このビューでは、LoadListener.nativeFinished(); への呼び出しが 14 回あったことがわかります。タイムライン パネルを見ると、これらの呼び出しの 1 つに異常に長い時間がかかっていることがわかります。

この説明に戸惑います。まず、この引用の最初の 2 つの文は同じコラムを参照しているようです。では、この最後の列には実際には何が含まれているのでしょうか? 第 2 に、「タイムライン パネル」のどこを確認して、「これらの呼び出しの 1 つに異常に長い時間がかかったことが示されているか」を確認する必要があるかどうかがわかりません。

このテキストの意味を理解するのを手伝ってくれませんか。

4

1 に答える 1

10

まず、同じ記事は次のように述べています。

親は紫色の背景で、子供は黄色の背景で表示されます。

したがって、 LoadListener.nativeFinished は親関数であり、その下にあるすべてのインデントされた行はchildren、または親が呼び出した関数です。

プロファイル パネル

以下は、記事のプロファイル パネルのクリップです。

プロファイル パネルのクリップ

表の最後の列には、このメソッドの呼び出し数と再帰呼び出しの数が表示されます。

最初の行 (親) の最後の列は、この関数に対して行われた呼び出しと再帰呼び出しの数を示します。プラス記号 ( 14+14 ) で区切られた 14 回の反復呼び出しと 0 回の再帰呼び出しです。

記事の著者が誤っていくつかの単語を入力したため、次の行が少し混乱していると思います。

最後の列は、そのメソッドに対して行われた呼び出しの総数のうちの呼び出しの数を示しています。

親の下の背景が黄色の子行では、最後の列は実際には Calls+Rec を示していません。表記の変更に注意してください。プラス記号の構文に対して分数が使用されています。LoadListener.tearDown の場合、 14/14 は、 LoadListener.tearDownが親関数によって 14 回呼び出されたことを示します。LoadListener.tearDown 関数は、このトレース内で合計14 回呼び出されたため、LoadListener.nativeFinished は、このトレースで LoadListener.tearDown を呼び出した唯一の関数です。

別の行を見てみましょう。(子) 関数 View.invalidate の最後の列の値は 2413/2853 です。これは、View.invalidate が 2413 回繰り返し呼び出され、2853 回再帰的に呼び出されたという意味ではありません。代わりに、親関数 LoadListener.nativeFinished が View.invalidate を 2413 回呼び出したことを意味します。

行 6 を見ると、View.invalidate が 2853 回繰り返し呼び出され、再帰的に 0 回呼び出されていることがわかります。したがって、親関数 LoadListener.nativeFinished は、このトレース内で LoadListener.tearDown を呼び出した唯一の関数です。

タイムライン パネル

記事のタイムライン パネルのクリップを次に示します。

タイムライン パネルのクリップ

同記事より、

最初の行の下の細い線は、選択したメソッドへのすべての呼び出しの範囲 (開始から終了まで) を示しています。

メイン スレッドの強調表示されたセクションのすぐ下にある、水平方向に伸びるブレースのような細いピンクの線に注目してください。一番左のピンクのブレースは非常に短いです。これらは、比較的迅速に終了した LoadListener.nativeFinished への 13/14 呼び出しを表します。最後のブレース (最も右にあるブレース) は、他のブレースよりもかなり長いです。これは、「異常に時間がかかった」LoadListener.nativeFinished の呼び出しです。

于 2012-06-08T20:57:54.827 に答える