Android: Traceviewについて

Traceviewの機能を試してみました。

参考:
http://developer.android.com/guide/developing/debugging/debugging-tracin...

Traceviewとは

Traceviewは実行時のトレース情報を表示するグラフィカルなビューアです。実行時のトレース情報はアプリのコード中にDebugクラスを使用して記録します。
Traceviewはアプリのデバッグとパフォーマンスのプロファイルに役に立ちます。

使い方:トレースファイルを生成

アプリケーションコード中に、DebugクラスのstartMethodTracing()メソッドとstopMethodTracing()メソッドを埋め込む。

  ・トレースの開始:startMethodTracing(トレースファイル名)メソッドの実行
  ・トレースの停止:stopMethodTracing()メソッドの実行

トレースが停止すると、/sdcard/トレースファイル名.trace ファイルが出来る。
(このため、アプリが/sdcardの下に書き込みができるように、AndroidManifest.xmlでパーミッションの設定をしておかなければならない。)

bash-4.1# mount /dev/block/vold/179:0 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702, allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 bash-4.1# ls -ld /sdcard lrwxrwxrwx 1 0 0 11 Oct 3 07:40 /sdcard -> /mnt/sdcard bash-4.1# ls -ld /mnt/sdcard d---rwxr-x 5 1000 1015 512 Jan 1 1970 /mnt/sdcard

例えば、onCreate()メソッドの中でstartMethodTracing()を実行し、onDestroy()の中でstopMethodTracing()を実行すれば、アクティビティ全体をトレースできる。

「エミュレータで動画を再生(1)」で試したVideoViewSample.javaに埋め込んでみました。
結果表示を見やすくするため、動画を再生する mVideoView.start() だけをトレースしてみました。

[VideoViewSample.java ]

....
import android.os.Debug;
....
public class VideoViewSample extends Activity {
  public void onCreate(Bundle icicle) {
  ....
   Debug.startMethodTracing("VideoViewSample");
    mVideoView.start();
   Debug.stopMethodTracing();
....

[ AndroidManifest.xml ]

<manifest ...>
 ......
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

これでVideoViewSampleアプリを実行すると、/sdcard/VideoViewSample.traceファイルが出来る。

使い方:トレースファイルの内容をtraceviewコマンドで表示する

adbコマンドかEclipse/DDMSのファイル・エクスプローラーで/sdcard/VideoViewSample.traceをホストのホームディレクトリにコピーした後、
$ cd <SDKルート>/tools
$ ./traceview ~/VideoViewSample.trace

上のウインドウがtimeline panel :スレッドとメソッドの実行を時系列で表示
下のウインドウがprofile panel :メソッド内の実行内容のプロファイルを表示

Incl %:メソッド自身と他のメソッド(このメソッド内から呼び出した他のメソッド)の合計実行時間のパーセンテージ
Inclusive:メソッド自身と他のメソッド(このメソッド内から呼び出した他のメソッド)の合計実行時間
Excl %:メソッド自身の実行時間のパーセンテージ
Exclusive:メソッド自身の実行時間
Calls+Recur Calls/Total:このメソッドが呼び出された回数と再帰呼び出しの回数/合計
Time/Call:1回の呼び出し当たりの平均実行時間(Inclusive)