Simpleperf

CPU プロファイラで CPU アクティビティを調べるに記載があるように、Android Studio には Simpleompf のグラフィカル フロントエンドが含まれています。ほとんどのユーザーは Simpleperf を直接使用せずにグラフィカル フロントエンドを使用します。

コマンドラインの方を好むデベロッパーにとっては、Mac、Linux、Windows 向けの NDK に含まれている Simpleperf は多用途に利用できる便利なコマンドライン CPU プロファイリング ツールです。

ドキュメントの全文を読むには、まず Simpleperf の README をお読みください。

Simpleperf のヒントと手法

Simpleperf を使い始めたばかりの時期に特に便利なコマンドをいくつか紹介します。その他のコマンドとオプションについては、Simpleperf コマンドとオプションのリファレンスをご覧ください。

実行時間が最も長い共有ライブラリを調べる

このコマンドを実行すると、(CPU サイクルの数に基づいて)実行時間に占める割合が最も大きいのはどの .so ファイルかを調べることができます。パフォーマンス解析セッションを開始した際に最初に実行するコマンドとしておすすめします。

$ simpleperf report --sort dso

実行時間が最も長い関数を調べる

実行時間が最も長い共有ライブラリを特定したら、このコマンドを実行して、その .so ファイルの関数の実行に要した時間の割合を確認できます。

$ simpleperf report --dsos library.so --sort symbol

スレッドの所要時間の割合を調べる

1 つの .so ファイルの実行時間を複数のスレッドに分割できます。このコマンドを実行すると、各スレッドの所要時間の割合を確認できます。

$ simpleperf report --sort tid,comm

オブジェクト モジュールの所要時間の割合を調べる

実行時間の大部分を占めるスレッドを見つけたら、このコマンドを使用して、そのスレッドの中で実行時間の最も長いオブジェクト モジュールを特定できます。

$ simpleperf report --tids threadID --sort dso

関数呼び出しの関連性を調べる

コールグラフは、プロファイリング セッション中に Simpleperf が記録したスタック トレースを視覚的に表したものです。

report -g コマンドを使用してコールグラフを出力すると、他の関数によって呼び出されている関数を調べることができます。これは、関数それ自体が遅いのか、それともその関数が呼び出す別の関数が遅いのかを判断するのに便利です。

$ simpleperf report -g

また、Python スクリプト report.py -g を使用して、関数を表示するインタラクティブ ツールを起動することもできます。各関数をクリックすると、その子で費やされた時間を確認できます。

Unity でビルドしたアプリのプロファイリング

Unity でビルドしたアプリをプロファイリングする場合は、次の手順でデバッグ シンボルを使用してアプリをビルドします。

  1. Unity エディタで Android プロジェクトを開きます。
  2. Android プラットフォームの [Build Settings] ウィンドウで、[Development Build] オプションがオンになっていることを確認します。
  3. [Player Settings] をクリックして、[Stripping Level] プロパティを [Disabled] に設定します。