指標は、ベンチマークから抽出される主要な情報タイプです。指標は List
として measureRepeated
関数に渡されます。これにより、一度に複数の測定指標を指定できます。ベンチマークを実行するには、少なくとも 1 つのタイプの指標が必要です。
次のコード スニペットは、フレーム時間指標とカスタム トレース セクション指標をキャプチャします。
Kotlin
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Java
benchmarkRule.measureRepeated( TARGET_PACKAGE, // packageName Arrays.asList( // metrics new StartupTimingMetric(), new TraceSectionMetric("RV CreateView"), new TraceSectionMetric("RV OnBindView"), ), 5, // Iterations // ... );
この例では、RV CreateView
と RV OnBindView
が RecyclerView
で定義される追跡可能なブロックの ID です。createViewHolder()
メソッドのソースコードは、独自のコード内で追跡可能なブロックを定義する方法の例です。
StartupTimingMetric
、TraceSectionMetric
、FrameTimingMetric
、PowerMetric
の詳細については、このドキュメントの後半で説明します。
図 1 のとおり、ベンチマーク結果は Android Studio に出力されます。複数の指標が定義されている場合は、出力の中ですべての指標が結合されます。
![TraceSectionMetric と FrameTimingMetric の結果](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames_tracing.png?authuser=9&hl=ja)
TraceSectionMetric
と FrameTimingMetric
の結果StartupTimingMetric
StartupTimingMetric
は、以下の値を使用してアプリの起動時間の指標をキャプチャします。
timeToInitialDisplayMs
: システムが起動インテントを受け取ってから、デスティネーションActivity
の最初のフレームをレンダリングするまでの時間。timeToFullDisplayMs
: システムが起動インテントを受け取ってから、アプリがreportFullyDrawn()
メソッドを使用して完全な描画を報告するまでの時間。測定はreportFullyDrawn()
の呼び出し後または呼び出しを含む最初のフレームのレンダリングが完了した時点で停止します。この測定は Android 10(API レベル 29)以前では利用できない場合があります。
StartupTimingMetric
は起動の反復処理の最小値、中央値、最大値を出力します。起動の改善を評価する際には中央値を重視します。中央値は一般的な起動時間を最も適切に推測できます。アプリの起動時間に影響する要因について詳しくは、アプリの起動時間をご確認ください。
![StartupTimingMetric の結果](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_fully_drawn_startup.png?authuser=9&hl=ja)
StartupTimingMetric
の結果FrameTimingMetric
FrameTimingMetric
はベンチマークによって生成される、スクロールやアニメーションなどのフレームの時間情報をキャプチャして、以下の値を出力します。
frameOverrunMs
: 指定されたフレームが期限を超過した時間。正の数値はフレーム落ちや目に見えるジャンクまたはスタッターを示します。負の数値はフレームが期限よりどれだけ早く終了したかを示します。注: Android 12(API レベル 31)以上でのみ利用可能です。frameDurationCpuMs
: UI スレッドとRenderThread
の両方でフレームの生成に CPU でかかった時間。
これらの測定値は、50 パーセンタイル、90 パーセンタイル、95 パーセンタイル、99 パーセンタイルの分布で収集されます。
遅いフレームを特定して改善する方法については、遅いレンダリングをご覧ください。
![FrameTimingMetric の結果](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames.png?authuser=9&hl=ja)
FrameTimingMetric
の結果TraceSectionMetric
TraceSectionMetric
は、指定された sectionName
に一致するトレース セクションが発生した回数と所要時間をキャプチャします。時間については、最小値、中央値、最大値がミリ秒単位で出力されます。トレース セクションは、関数呼び出し trace(sectionName)
か、Trace.beginSection(sectionName)
と Trace.endSection()
(またはこれらの非同期バリアント)の間のコードで定義されます。常に、測定中にキャプチャされたトレース セクションの最初のインスタンスが選択されます。デフォルトでは、パッケージからのトレース セクションのみを出力します。パッケージ外のプロセスを含めるには、targetPackageOnly = false
を設定します。
トレースについて詳しくは、システム トレースの概要とカスタム イベントを定義するをご覧ください。
![TraceSectionMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_tracing.png?authuser=9&hl=ja)
TraceSectionMetric
の結果PowerMetric
PowerMetric
は、指定された電力カテゴリのテスト中における電力またはエネルギーの変化を取得します。選択された各カテゴリは測定可能なサブコンポーネントに分類され、選択されていないカテゴリは「未選択」の指標に追加されます。
これらの指標はアプリごとの消費量ではなく、システム全体の消費量を測定するものであり、Google Pixel 6 と Google Pixel 6 Pro 以降のデバイスに限定されます。
power<category>Uw
: このカテゴリでのテスト期間中における電力消費量。energy<category>Uws
: このカテゴリでのテスト期間中における時間単位あたりのエネルギー伝送量。
カテゴリには次のものがあります。
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
CPU
などの一部のカテゴリでは、他のプロセスによる作業と実際のアプリによる作業を切り分けることが難しい場合があります。干渉を最小限に抑えるために、不要なアプリやアカウントを削除するか制限してください。
![PowerMetric の結果](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_power.png?authuser=9&hl=ja)
PowerMetric
の結果あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- ベースライン プロファイルを作成する {:#creating-profile-rules}
- Macrobenchmark を作成する
- アプリの起動の分析と最適化 {:#app-startup-analysis-optimization}