Microbenchmark ではデフォルトで、実行されたコードの時間と割り当てに関する情報を取得できます。測定対象のコードの実行が遅い理由を調査する場合は、メソッド トレースを調べます(サポートされている OS バージョンではデフォルトでキャプチャされます)。または、他のプロファイリング構成を選択します。
プロファイラ構成を選択するには、計測ランナー引数 androidx.benchmark.profiling.mode
を MethodTracing
(デフォルト)、StackSampling
、None
引数のいずれかに追加します(以下のスニペットを参照)。
オプションの詳細については、Java メソッド/Kotlin メソッドを記録するをご覧ください。そのドキュメントで定義されているとおり、MethodTracing
はトレースと同等で、StackSampling
はサンプリングと同等です。
Groovy
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling' } }
Kotlin
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling" } }
ベンチマークをプロファイリングすると、.trace
出力ファイルがホスト上の JSON 結果と同じディレクトリにコピーされます。Android Studio でプロファイリング結果を確認するには、Microbenchmark の結果で [メソッド トレース] リンクまたは [スタック サンプリング トレース] リンクを選択します。
MethodTracing
メソッド トレースは他のメソッドよりも実行に時間がかかっているメソッドを特定でき、コードの最適化をする場合に便利です。これにより、パフォーマンスに最も影響のあるメソッドに特化して最適化できます。
プロファイリングはコード測定の後に順番に行われるため、テストでは正確なタイミングとプロファイリング結果の両方が出力されます。
メソッド トレースはデフォルトでオンになっています。
StackSampling
メソッド トレースのパフォーマンス オーバーヘッドを使用せずに、サンプル トレースでもコストの高いメソッドを特定できます。ただし、コールスタックがキャプチャされた後にアプリがメソッドを開始し、次のキャプチャの前にメソッドが終了した場合、メソッド呼び出しはログに記録されません。ライフサイクルが短いメソッドを適切にトラッキングするには、サンプル トレースではなく、メソッド トレースを使用します。
スタック サンプリングでは、ウォームアップが完了した後、ベンチマークがコールスタックをサンプリングします。計測引数を使用して、サンプリング頻度やサンプリングの期間などのサンプリング動作を制御できます。
Android 10(API 29)以降の場合、スタック サンプリングでは Simpleperf によりアプリのコールスタック(C++ コードを含む)がサンプリングされます。Android 9(API 28)以前の場合は、Debug.startMethodTracingSampling
によりスタック サンプルがキャプチャされます。
このプロファイリング モードを構成するには、次に示す別の計測引数を追加します。
androidx.benchmark.profiling.sampleFrequency
- キャプチャする 1 秒あたりのスタック サンプル数
- 引数の型: 整数
- デフォルトは毎秒 1,000 サンプルです。
androidx.benchmark.profiling.sampleDurationSeconds
- ベンチマークを実行する期間
- 引数の型: 整数
- デフォルトは 5 秒です。
androidx.benchmark.profiling.skipWhenDurationRisksAnr
- ANR が発生する可能性が高い場合は、メソッド トレースをスキップします。ANR は長時間の CI 実行中に問題を引き起こす可能性があるため、CI 実行ではこのオプションを有効にしておく必要があります。
- 引数タイプ: ブール値
- デフォルトは
true
です
なし
この引数はプロファイリング ファイルをキャプチャしません。この場合も時間と割り当てに関する情報は測定されます。
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- Microbenchmark 計測引数
- 継続的インテグレーションでベンチマークを実行する