Traceview でプロファイル情報を表示する

参考: Traceview - Android Developers

プロファイリングデータを取得する

アプリケーション内の特定のコード区間のプロファイリングを行うには、プロファイリンク期間を android.os.debug.Debug クラスの startMethodTracing() stopMethodTracing() で囲みます。

Debug.startMethodTracing();
... プロファイリング中 ...
Debug.stopMethodTracing();

プロファイリング結果は、/sdcard/dmtrace.trace というバイナリファイルに出力されます。 端末に SD カードが挿入されていないとエラーになります。

startMethodTracing メソッドのパラメータでファイル名のベース名を指定すると、/sdcard/<basename>.trace というファイル名で出力されるようになります。 結局 SD カードに出力されることには変わりありません。

ドキュメントには、

These methods start and stop method tracing across the entire virtual machine.

と記述されているので、Debug.startMethodTracing() を呼び出した時点から、アプリケーション全体(正確には Dalvik VM 全体)のプロファイリングが行われることになります。 Activity がそのアプリのエントリポイントとなっているのなら、onCreate(), onDestroy() でそれぞれ、startMethodTracing()stopMethodTracing() を呼び出すようにすれば、そのアプリ全体のプロファイリングを行うことができます。

プロファイリングデータを表示する

Android SDK に含まれている traceview コマンドを使用すると、プロファイリング結果をグラフィカルに表示することができます。

/p/2wgxfwd/img-001.png
図: Traceview

上記の図では、タイムラインに main スレッドが一本だけ表示されていますが、複数のスレッドが存在すれば、main 以外のスレッドもその下に表示されます。

まずは、/sdcard/dmtrace.trace ファイルを PC に取得します。

C:\> adb pull /sdcard/dmtrace.trace

あとは traceview コマンドのパラメータとして、dmtrace.trace のパスを渡すだけです。 Windows ではフルパスで指定する必要があります。

C:\> traceview D:\z\dmtrace.trace

プロファイリングデータからメソッドの呼び出しグラフを作成する

$ dmtracedump -g output.png dmtrace.trace

dmtracedump は Windows では動作しません。

プロファイリングデータを HTML で出力する

$ dmtracedump -h dmtrace.trace > output.html

dmtracedump は Windows では動作しません。