Benchmark

Android Studio 内でコードのパフォーマンスを正確に測定します。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2024 年 11 月 13 日 1.3.3 - - 1.4.0-alpha05

依存関係の宣言

Benchmark への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

Macrobenchmark

プロジェクトで Macrobenchmark を使用するには、macrobenchmark モジュールbuild.gradle ファイルに次の依存関係を追加します。

Groovy

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.0"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.0")
}

Microbenchmark

プロジェクトで Microbenchmark を使用するには、microbenchmark モジュールbuild.gradle ファイルに次の依存関係を追加します。

Groovy

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.3"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.3")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

The Microbenchmark library also provides a Gradle plugin to use with your microbenchmark module. This plugin sets build configuration defaults for the module, sets up benchmark output copy to the host, and provides the ./gradlew lockClocks task.

To use the plugin, include the following line in the `plugins` block in your top-level build.gradle file:

Groovy

plugins {
  id 'androidx.benchmark' version '1.3.3' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.3.3" apply false
}

Then apply the plugin to your benchmark module's build.gradle file

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.4

バージョン 1.4.0-alpha05

2024 年 11 月 13 日

androidx.benchmark:benchmark-*:1.4.0-alpha05 がリリースされました。バージョン 1.4.0-alpha05 には、これらの commit が含まれています。

バグの修正

  • API 34 以降で、CompilationMode.None() のパフォーマンスが不安定で、初期のワーストケースのパフォーマンスを代表するものではない問題を修正しました。これは、ART のコンパイル状態 verify が初回起動直後にアプリを部分的にコンパイル(クラスの読み込みにのみ影響)できるようにするプラットフォームの変更を回避します。(Ie48d0
  • Perfetto トレース内でプロセス名が切り捨てられるため、組み込みの Macrobenchmark 指標からの測定結果が報告されない(特に短い)トレースがキャプチャされる問題を修正しました。macrobenchmark は、想定されるパッケージ名に加えて、すべての組み込みクエリで切り捨てられたパッケージ名を検索することで、この問題を回避できるようになりました。カスタム TraceMetric 実装や PerfettoSession.query の他の直接呼び出し元は、Perfetto クエリの process.name LIKE "$packageName"(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))") に変更することで、この同じ動作を実装できます。(I5bf01b/377565760

バージョン 1.4.0-alpha04

2024 年 10 月 30 日

androidx.benchmark:benchmark-*:1.4.0-alpha04 がリリースされました。バージョン 1.4.0-alpha04 に含まれる commit はこちらをご覧ください。

新機能

  • (試験運用版)ベースライン プロファイルの生成と、セカンダリ ユーザーにインストールされているアプリ(ヘッドレス Android Auto デバイス上のアプリなど)のベンチマークを有効にします。このサポートはいくつかのシナリオでテストされていますが、動作しない場合はバグとしてお知らせください。(I9fcbeb/356684617b/373641155

バグの修正

  • ベンチマークビルドで isProfileable が常にオーバーライドされるようになりました。また、ベンチマークビルドと nonMinified(ベースライン プロファイルのキャプチャ)ビルドの両方で isDebuggable が常にオーバーライドされるようになりました。(I487fab/369213505
  • API 28 より前の一部の物理デバイスでのコンパイル検出を修正 - json context.compilationModeandroidx.benchmark.requireAot=true の動作に影響します(誤ってスローされなくなります)(Ic3e08b/374362482
  • CpuEventCounter 指標で、無効な測定値が検出された場合にスロー(instructions/cpucycles==0 など)(I8c503

バージョン 1.4.0-alpha03

2024 年 10 月 16 日

androidx.benchmark:benchmark-*:1.4.0-alpha03 がリリースされました。バージョン 1.4.0-alpha03 には、これらの commit が含まれています。

API の変更

  • Macrobenchmark: ArtMetric を追加します。これは、プロファイルの範囲や Android RunTime の一般的なパフォーマンスを調査するために使用できます。JIT、クラス初期化(利用可能な場合)、クラス検証の数と合計時間をキャプチャします。また、CaptureInfo を変更して、デフォルトの ART メインライン バージョンをオプションで含めるようにしました。(I930f7
  • 特定のベンチマーク実行内の安定性を示すには、ベンチマークの JSON 出力に coefficientOfVariation を追加します。(Ib14ea

バグの修正

  • AVD デバイスにスペースが含まれている場合の CollectBaselineProfileTask を修正しました。(Ia0225b/371642809
  • StartupMode.COLD 例外によるエラーの推測的修正: Package <packagename> must not be running prior to cold start!。これで、MacrobenchmarkScope.killProcess()StartupMode.COLD の動作の実装に使用される、各反復処理の前に実行されるものを含む)は、アプリのプロセスがすべて実行を停止したことを確認してから待機します。(I60aa6b/351582215
  • 一部のルート化されたエミュレータで UNLOCKED_ エラーが表示される問題を修正しました。(Ic5117
  • このライブラリは、型使用である JSpecify nullness アノテーションを使用するようになりました。Kotlin デベロッパーは、-Xjspecify-annotations=strict-Xtype-enhancement-improvements-strict-mode の次のコンパイラ引数を使用して、正しい使用を強制する必要があります(I7104fb/326456246

バージョン 1.4.0-alpha02

2024 年 10 月 2 日

androidx.benchmark:benchmark-*:1.4.0-alpha02 がリリースされました。バージョン 1.4.0-alpha02 には、これらの commit が含まれています。

API の変更

  • Gradle タスク lockClocksunlockClocks を、最上位レベルで使用可能ではなく、ベンチマーク プロジェクトに移動しました。残念ながら、プロジェクトの分離を破壊することなく、これらのアクションをトップレベル アクションとして登録する方法はありません。そのため、この変更が必要でした。(I02b8fb/363325823

バグの修正

  • BaselineProfileRule は、ブロックの終了時に実行中の各プロセスにシグナルを送信してプロファイルをダンプすることで、マルチプロセス アプリのプロファイルを収集するようになりました。プロファイル ベースのコンパイルでブロードキャストするプロセスが見つからない場合、プロファイル データが含まれていることが想定されていないため、コンパイルは失敗します。また、ダンプ待ち時間を制御するインストルメンテーション引数 androidx.benchmark.saveProfileWaitMillis を追加しました。(I0f519b/366231469
  • ベンチマーク 1.3.2 から: Firebase Test Lab(FTL)がベースライン プロファイル Gradle プラグインからベースライン プロファイルまたは Macrobenchmark の結果ファイルを取得できない問題を修正しました。(I2f678b/285187547

FTL を使用するには、プラグイン ブロックのベースライン プロファイル モジュールにプラグインを適用します。

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

次のように Firebase Test Lab を構成します。

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

また、作成した FTL デバイスをベースライン プロファイル拡張機能に追加する必要があります。

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

バージョン 1.4.0-alpha01

2024 年 9 月 18 日

androidx.benchmark:benchmark-*:1.4.0-alpha01 がリリースされました。バージョン 1.4.0-alpha01 には、これらの commit が含まれています。

新機能 - アプリの起動に関する分析情報

  • アプリ起動に関する分析情報の初期バージョンは、Macrobenchmark で有効にできます。(09fae38

起動ベンチマークで有効にするには:

  @Test
  fun startup {
      macrobenchmarkRule.measureRepeated(
          
          packageName = "com.example.my.application.id"
          metrics = listOf(StartupTimingMetric()),
          iterations = 5,
          startupMode = StartupMode.COLD,
          compilationMode = CompilationMode.None(),
          experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
          ) {
          scope.startActivityAndWait(...)
      }
  }

起動ベンチマークを実行すると、トレースから一般的な問題が検出され、指標の後にベンチマーク タブの Studio テスト出力に印刷されます。次に例を示します。

StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│   ├──   timeToFullDisplayMs                min  1,147.2,   median  1,208.8,   max  1,307.4
│   └──   timeToInitialDisplayMs             min  1,147.2,   median  1,208.8,   max  1,307.4
├── App Startup Insights
│   ├── App in debuggable mode (expected: false)
│   │   └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│   ├── Potential CPU contention with another process (expected: < 100000000ns)
│   │   └── seen in iterations: 4(105022546ns)
│   └── Main Thread - Binder transactions blocked (expected: false)
│       └── seen in iterations: 7(true)
└── Traces
    └── Iteration 0 1 2 3 4 5 6 7 8 9

この機能はまだ開発中であり、ドキュメントと拡張性の改善が予定されています。フィードバックをお待ちしております。

新機能

  • ベースライン プロファイルの警告をすべて抑制する Gradle プロパティ androidx.baselineprofile.suppressWarnings を追加しました。(314153a
  • マイクロベンチの指標が Perfetto トレース内にカウンタとして表示されるようになりました。(3214854
  • JIT を無効にする(root 権限 / ランタイムの再起動が必要)およびデバイスのパフォーマンス/テスト状態をリセットするための試験運用版スクリプトを追加しました。これらは現在、Gradle タスクとして公開されていません。(7c3732b
  • エミュレータで実行するときにテストをスキップするためのベンチマーク引数を追加しました。automaticGenerationDuring ビルドが有効になっている場合、ベンチマークはベースライン プロファイルの生成もトリガーします。エミュレータを使用している場合は、失敗します。新しい引数 skipBenchmarksOnEmulator を使用すると、テストをスキップできます。(0c2ddcd
  • API 23 以降で実行されるようにパフォーマンス イベントの有効化ロジックを変更しました。(2550048

API の変更

  • MacrobenchmarkRule.measureRepeated() の既存の試験運用版 PerfettoConfig 引数を新しい ExperimentalConfig オブジェクトに移動しました。

バグの修正

  • lockClocks.sh の再試行回数を増やす(99e9dac
  • nonMinified とベンチマークのビルドタイプは、すでに存在する場合は作成しないでください。バグにより、nonMinified ビルドタイプとベンチマーク ビルドタイプが存在する場合でも、再作成される予定でした。(e75f0a5
  • TraceSectionMetric の結果から終了しないスライスを無視します。(a927d20
  • sdk_ 接頭辞を考慮するようにエミュレータ チェックを改善しました。(1587de8
  • FrameTimingGfxInfoMetric で、実行中のパッケージ以外をクリア済みとして扱うようになりました。(35cc79c
  • 命令以外のイベントで破損した値を生成する androidx.benchmark.cpuEventCounter を修正。(06edd59
  • resumeTiming/runWithTimingDisabled を修正して指標の優先順位を尊重し、優先度の低い指標の一時停止/再開が優先度の高く指標の結果に与える影響を大幅に軽減しました。たとえば、cpuEventCounter.enable インストルメンテーション アーグメントを介して CPU パフォーマンス カウンタを使用している場合、一時停止/再開が発生しても timeNs が大幅に短縮されなくなります。(5de0968

バージョン 1.3

バージョン 1.3.3

2024 年 10 月 16 日

androidx.benchmark:benchmark-*:1.3.3 がリリースされました。バージョン 1.3.3 には、これらの commit が含まれています。

バグの修正

  • AVD デバイスにスペースが含まれている場合の CollectBaselineProfileTask を修正しました。(Ia0225b/371642809

バージョン 1.3.2

2024 年 10 月 2 日

androidx.benchmark:benchmark-*:1.3.2 がリリースされました。バージョン 1.3.2 には、これらの commit が含まれています。

バグの修正

  • Firebase Test Lab(FTL)がベースライン プロファイル Gradle プラグインからベースライン プロファイルまたは Macrobenchmark の結果ファイルを取得できない問題を修正しました。(I2f678b/285187547

FTL を使用するには、プラグイン ブロックのベースライン プロファイル モジュールにプラグインを適用します。

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

次のように Firebase Test Lab を構成します。

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

また、作成した FTL デバイスをベースライン プロファイル拡張機能に追加する必要があります。

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

バージョン 1.3.1

2024 年 9 月 18 日

androidx.benchmark:benchmark-*:1.3.1 がリリースされました。バージョン 1.3.1 に含まれる commit は次のとおりです。

バグの修正

  • すべてのベースライン プロファイルの警告を抑制する Gradle プロパティ androidx.baselineprofile.suppressWarnings を追加しました。(I7c36eb/349646646
  • ラッパーを作成する代わりに、アプリによって作成された既存の nonMinified…benchmark… を使用するように、ベースライン プロファイル Gradle プラグインを修正しました。(Ia8934b/361370179
  • エミュレータで automaticGenerationDuringBuild が有効になっている場合の java.lang.AssertionError: ERRORS (not suppressed): EMULATOR を修正しました。代わりに、新しい引数を使用してテストをスキップします。(If3f51b/355515798
  • Microbenchmark の最小化 - ベンチマーク ライブラリ Proguard で org.junit.runner.notification.RunListener のサブクラスを保持(Ic8ed5b/354264743
  • 終了しないスライスを無視するように TraceSectionMetric を修正しました。以前は、合計や最小時間の検索などでは、これらの値は -1 の長さを持つと見なされていました。(If74b7
  • プロセスがまだ実行されていない場合に、指標の開始時にクラッシュする FrameTimingGfxInfoMetric の問題を修正しました。(I6e412

バージョン 1.3.0

2024 年 8 月 21 日

androidx.benchmark:benchmark-*:1.3.0 がリリースされました。バージョン 1.3.0 に含まれる commit はこちらをご覧ください。

1.2.0 以降の Microbenchmark の変更

  • ほとんどのデバイスで実行する場合、マイクロベンチマークではメソッド トレースがデフォルトでオンになっています。
    • メソッド トレースは、測定後に別のフェーズとして実行されます。これにより、1 回のベンチマーク実行から正確な測定とメソッド トレースの両方を出力できます。
    • 一部の Android OS と ART バージョンのメソッド トレースにより、後続の測定フェーズに影響が及ぶことがあります。これらのバージョンでは、メソッド トレースはデフォルトでオフになっており、Studio の出力に警告が印刷されます。
  • メインスレッドのベンチマークと ANR
    • 数秒間実行したときに ANR が発生しないように、UI スレッドのベンチマーク(Compose/View UI を操作するものなど)に measureRepeatedOnMainThread を追加しました。
    • ANR 回避の期限を超過すると予想される場合、メソッド トレースはスキップされます。この動作を無効にするには、androidx.benchmark.profiling.skipWhenDurationRisksAnr を false に設定します(ANR が長時間の CI 実行で問題を引き起こす可能性があるため、CI 実行には推奨されません)。
  • 圧縮
    • 圧縮を有効にしたマイクロベンチマークを改善するための ProGuard ルールを埋め込み
    • ライブラリ モジュールでの圧縮/R8 には AGP 8.3 が必要です。これは、build.gradleandroid.buildTypes.release.androidTest.enableMinification で有効にできます。
    • デッドコードの除去を防ぐための試験運用版の BlackHole.consume() API を追加しました。(If6812b/286091643
  • 指標
    • 試験運用版の CPU イベント カウンタ機能(perf_event_open の指標。ほとんどのバージョンのプラットフォームで root 権限が必要)、InstrumentationArgument androidx.benchmark.cpuEventCounter.enable 経由でアクセス(true に設定可能)、androidx.benchmark.cpuEventCounter.events は(Instructions,CpuCycles など)に設定可能。一部の userdebug エミュレータでサポートされているはずですが、利用可能なすべてのエミュレータでサポートがテストされているわけではありません

MACRObenchmark の 1.2.0 以降の変更

  • マクロベンチマークのメソッド トレースを全面的に改良。
    • メソッド トレースのスコープが measureBlock の実行時間に制限され、プロセスが複数回開始された場合は複数のセッションをキャプチャできるようになりました。
    • 以前は、メソッド トレースは StartupMode.COLD ベンチマークでのみ機能し、ターゲット プロセスを再起動しなかった measureBlocks では何もキャプチャされませんでした。
    • マクロベンチマークでメソッド トレースのフラッシュを修正しました。これにより、低速デバイスでもメソッド トレースが完全にキャプチャされ、有効になります。(I6349ab/329904950
  • プロセスが強制終了されたときの個々の warmUp 反復処理中に ART プロファイルを正しくダンプし、CompilationMode.Partial(warmup=N) の測定精度を高めました。(I17923
  • シェーダー ブロードキャスト エラー メッセージを削除
    • シェーダー ブロードキャストの失敗メッセージをドロップするためのデバッグ候補を追加しました
    • シェーダーのドロップ動作をオーバーライドするための 2 つの計測引数を追加し、ProfileInstaller 1.3 のないアプリをベンチマークする際のクラッシュを回避できるようにしました。
      • androidx.benchmark.dropShaders.enable=true/false : すべてのシェーダーのドロップ(StartupMode.Cold の起動時のものを含む)をスキップできます。特に、まだ profileinstaller 1.3 を使用していないアプリをベンチマークする場合に便利です。
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : シェーダーをドロップしようとしたときに発生する障害を許容するために使用できます。たとえば、profileinstaller 1.3 のないアプリをベンチマークする場合などです(I4f573)。
  • 完全にカスタマイズされた Perfetto トレース レコーディング用にカスタム PerfettoConfig を取得する試験運用版の MacrobenchmarkRule#measureRepeated バリアントを追加しました。構成が正しくないと、組み込みの指標クラスが失敗する可能性があります。(Idfd3db/309841164b/304038384
  • Macrobenchmark を実行する前にバックグラウンドの dexopt ジョブをキャンセルして、干渉を減らします。(I989ed
  • Macrobenchmark は、ターゲット アプリケーションが ART プロファイルをフラッシュするまで 1 秒間待機するようになりました(以前は 500 ミリ秒間待機していました)。(I85a50b/316082056
  • TraceSectionMetric の全面改修
    • : 以下の TraceSectionMetric の変更は、CI での出力に影響し、不連続性を生じたり、解析が中断されたりする可能性があります。
    • この指標のほとんどは繰り返し発生するイベントに使用され、このような場合はまずデータが破棄されるため、デフォルトが合計になりました
    • よりカスタマイズ可能に、利用可能なモードを増やしました
    • モード名が指標出力名に埋め込まれるようになりました(Studio と JSON で)
    • Trace.{begin|end}AsyncSection を使用して作成されたスライスがサポートされるようになりました。
  • 指標
    • 電源 - PowerMetric.deviceSupportsHighPrecisionTrackingPowerMetric.deviceBatteryHasMinimumCharge()PowerMetric.deviceSupportsPowerEnergy() を追加しました
    • 戻り値の型と一致するように、Metric.getResult の名前を getMeasurements に変更しました。
    • すべての起動検出エラーに log.w / 例外ラベルを追加しました。これによって現在の動作は変わりません(一部のエラーはスローされ、他のエラーは起動の検出に失敗します)。ただ、動作をよりわかりやすくするだけです。通常、Log.w() で起動指標を報告できないのは、フレーム以外のイベントが欠落している場合や、起動が検出されたときに例外がスローされる場合(UI/RT スライスからのフレーム タイミング情報は除く)です。(Id240fb/329145809
    • FrameTimingMetricframeCount 測定値を追加しました。これにより、生成されるフレーム数が変更されたために測定値が変化するシナリオを検出しやすくなります(新しいアニメーションの追加、無効化の問題の修正)。(I1e5aa
    • ドキュメントで利用可能な場合は frameOverrunMs をトラッキングすることを推奨し、その理由を明確にしました。(I18749b/329478323
    • トレースの先頭と末尾にある終了していないフレームがペアになって、非常に長い単一のフレームとして誤って報告される問題を修正しました。(I39353b/322232828
    • フレームが生成されないときの FrameTimingMetric エラーを改善し、指標の解析に失敗した場合は常にトレースへのリンクを出力して問題の診断を支援します。(I956b9
    • FrameTimingMetric でフレーム ID の解析に失敗するクラッシュを修正しました(特に特定の OEM デバイスで発生)。(Ia24bcb/303823815b/306235276
    • FrameMetrics のチェックの厳密さを緩和し、エラー メッセージに詳細を追加しました。(Iadede

1.2.0 以降のベースライン プロファイルのキャプチャ / Gradle プラグインの変更

  • AGP の推奨最大バージョンを 9.0.0-alpha01 に引き上げました。
  • mergeArtProfile タスクと mergeStartupProfile タスクが常にベースライン プロファイルの生成を待機するようにします。(I623d6b/343086054
  • ベースライン プロファイルの生成が正常に完了すると、変更内容の概要が出力されます。(I824c8b/269484510
  • 警告を無効にする DSL を追加しました。(Ic4debb/331237001
  • automaticGenerationDuringBuild がオフの場合に、ベンチマークが生成されたベースライン プロファイルを使用するように修正しました。(Ic144fb/333024280
  • BaselineProfile Gradle プラグイン プロパティのオーバーライドを修正し、nonMinified またはベンチマークのビルドタイプをカスタマイズするときにベースライン プロファイルの生成とベンチマークを有効にしました。(Ib8f05b/324837887
  • AGP 8.3.0-alpha15 より前の AAR にライブラリ ベースライン プロファイルを含める問題を修正。(I1d2afb/313992099
  • 生成タスクの終了時にベースライン プロファイルと起動プロファイルの出力 URL を修正しました。(I802e5b/313976958

1.2.0 以降のその他の重要な変更

  • トレースのキャプチャ
    • perfetto の起動時に発生する EXITCODE 2 エラーを、エラーからログに記録される警告に軽減
    • ベンチマークで AIDL トレースのデフォルト有効化(API 28 が必要)(Ia0af2b/341852305
    • ベンチマークでポータータグ トレースをデフォルトで有効にします。これにより、ウェイクロック トレースポイントなどがキャプチャされます。(Icfe44b/286551983
    • 低速デバイスでトレースを開始する際のクラッシュを回避するため、トレース キャプチャ開始のタイムアウトを延長しました。(I98841b/329145808
    • JSON、textproto、proto バイナリ(デコード前)のバリエーションを持つ公開 API PerfettoTraceProcessor.Session.queryMetrics API を追加しました。これにより、TraceProcessor に組み込まれている指標をクエリできます(I54d7fb/304038382
    • Perfetto トレース レコードでブロック開始を有効にして、トレース開始時にデータが欠落するリスクを軽減。API 33 以降でのみサポートされます。(Ie6e41b/310760059
  • JSON 出力
    • JSON 出力のベンチマーク コンテキストに追加情報を追加しました。
      • context.artMainlineVersion - Art Mainline モジュールの整数バージョン(デバイスに存在する場合は -1、存在しない場合は -1
      • context.build.id - android.os.Build.ID と同じ
      • context.build.version.codename - android.os.Build.VERSION.CODENAME と同じ
      • context.build.version.abbreviatedCodename - リリース前のコードネームの最初の文字に対応(リリースビルドを含む)(Ie5020
    • プロファイリング トレース(Perfetto、メソッド トレースなど)のツールを簡単に使用できるように、JSON 出力に profilerOutput リストを追加しました。(I05dddb/332604449
    • ベンチマーク モジュールで Android Test Orchestrator を使用すると、モジュールごとの出力 JSON ファイルが繰り返し上書きされるため、警告を追加しました。(Ia1af6b/286899049
    • ファイル名が 200 文字を超える場合はスローし、ファイルの書き込みや後処理時に不明確なクラッシュが発生しないようにします。(I4a5ab

バージョン 1.3.0-rc01

2024 年 8 月 7 日

androidx.benchmark:benchmark-*:1.3.0-rc01 がリリースされました。バージョン 1.3.0-rc01 に含まれる commit はこちらをご覧ください。

バグの修正

  • androidx.benchmark.cpuEventCounter が、Instruction 以外のイベントで破損した値を生成する問題を修正しました。(I7386ab/286306579
  • resumeTiming/runWithTimingDisabled を修正して指標の優先順位を尊重し、優先度の低い指標の一時停止/再開が優先度の高く指標の結果に与える影響を大幅に軽減しました。たとえば、cpuEventCounter.enable インストルメンテーション アーグメントを介して CPU パフォーマンス カウンタを使用している場合、一時停止/再開が発生しても timeNs が大幅に短縮されなくなります。(I39c2eb/286306579b/307445225
  • スタック サンプリング変換をメインスレッドから移動することで、スタック サンプリングが原因で measureRepeatedOnMainThread がメインスレッドのハードタイムアウトに達する可能性を低減しました。(I487a8b/342237318
  • 新しいプラットフォーム API へのアクセスの手動アウトラインを削除しました。これは、AGP 7.3 以降(R8 バージョン 3.3 など)で R8 を使用する場合、および AGP 8.1 以降(D8 バージョン 8.1 など)を使用するすべてのビルドで、API モデリングによって自動的に行われるためです。AGP を使用していないクライアントは、D8 バージョン 8.1 以降にアップデートすることをおすすめします。詳しくは、こちらの記事をご覧ください。(I9496cb/345472586
  • パッケージ名を instr 引数として送信する agp バージョン チェックを追加しました。AGP 8.4.0 より前では、ターゲット アプリのパッケージ名をインストルメンテーション アプリにインストルメンテーション 引数経由で送信できませんでした。(0c72a3f

バージョン 1.3.0-beta02

2024 年 7 月 10 日

androidx.benchmark:benchmark-*:1.3.0-beta02 がリリースされました。バージョン 1.3.0-beta02 には、これらの commit が含まれています。

バグの修正

  • Perfetto の起動時に EXITCODE 2 を適切に処理して警告をログに記録し、続行します。

バージョン 1.3.0-beta01

2024 年 6 月 12 日

androidx.benchmark:benchmark-*:1.3.0-beta01 がリリースされました。バージョン 1.3.0-beta01 には、これらの commit が含まれています。

API の変更

  • 整合性のため、MethodTracing.affectsMeasurementOnThisDevice の名前を AFFECTS_MEASUREMENT_ON_THIS_DEVICE に変更しました。(I1bdfa
  • マイクロベンチマークでデッドコードの除去を防ぐための試験運用版の BlackHole.consume() API を追加しました。(If6812b/286091643
  • Microbenchmark が正しくスローされ、メソッド トレースが測定に干渉しないようにするようになりました。これは、メソッド トレースが強制的にオンになっている(インストルメンテーション 引数または MicrobenchmarkConfig を介して)特定のデバイスで、メソッド トレース後に測定が試行された場合に発生します。影響を受けるデバイスは、API 26 ~ 30 を搭載しているか、この干渉の影響を受ける特定の ART Mainline モジュール バージョンを搭載しています。これらのデバイスは、ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice を使用して実行時に検出できます。(Iafb92b/303660864

バグの修正

  • 推奨される AGP の最大バージョンを 9.0.0-alpha01 に引き上げました。(I5bbb0
  • ベンチマーク コンテキストにコンパイル モードを追加しました。(If5612b/325512900
  • AIDL トレースのデフォルト有効化(API 28 が必要)(Ia0af2b/341852305
  • JSON 出力のベンチマーク コンテキストに追加情報を追加しました。
    • context.artMainlineVersion - Art Mainline モジュールの整数バージョン(デバイスに存在する場合は -1、存在しない場合は -1)
    • context.build.id - android.os.Build.ID に等しい
    • context.build.version.codename - android.os.Build.VERSION.CODENAME に等しい
    • context.build.version.abbreviatedCodename - リリース前のコードネームの最初の文字に対応(リリースビルドでも)(Ie5020
  • androidx.benchmark.profiling.sampleDurationSeconds を尊重するように StackSampling を修正しました(Ib1d53
  • マクロの一般的な依存関係を api() に変更し、PerfettoTracePerfettoConfig などの使用を容易にしました。(Icdae3b/341851833
  • mergeArtProfile タスクと mergeStartupProfile タスクが常にベースライン プロファイルの生成を待機するようにします。(I623d6b/343086054
  • バリアントが有効であるかどうかを判断する際は、バリアントが有効になっている状態を考慮してください。(I5d19eb/343249144
  • perfetto トレース プロセッサのデフォルトの開始タイムアウトを増やしました。(I87e8cb/329145808

バージョン 1.3.0-alpha05

2024 年 5 月 14 日

androidx.benchmark:benchmark-*:1.3.0-alpha05 がリリースされました。バージョン 1.3.0-alpha05 に含まれる commit はこちらをご覧ください。

バグの修正

  • すべての反復処理で macrobench 指標がゼロ値を返す場合に、より明確な例外をスローしました。(Iab58fb/314931695
  • リスナー ルールやその他の検出された警告 / エラーのサポートなど、microbench ProGuard ルールに追加の回避策ルールが追加されました。(I14d8fb/329126308b/339085669
  • メソッド トレースは Macrobenchmark の別のフェーズとして実行され、測定に影響しなくなりました。(If9a50b/285912360b/336588271
  • シェーダー ブロードキャストの失敗メッセージをドロップするための追加のデバッグ候補を追加しました。(I5efa6b/325502725

バージョン 1.3.0-alpha04

2024 年 5 月 1 日

androidx.benchmark:benchmark-*:1.3.0-alpha04 がリリースされました。バージョン 1.3.0-alpha04 に含まれる commit はこちらをご覧ください。

API の変更

  • 完全にカスタマイズされた Perfetto トレース レコーディング用にカスタム PerfettoConfig を取得する試験運用版の MacrobenchmarkRule#measureRepeated バリアントを追加しました。構成が正しくないと、組み込みの指標クラスが失敗する可能性があります。(Idfd3db/309841164b/304038384
  • わかりやすくするために PowerMetric.deviceSupportsPowerEnergy の名前を PowerMetric.deviceSupportsHighPrecisionTracking に変更しました(I5b82f)。
  • PowerMetric.deviceBatteryHasMinimumCharge()PowerMetric.deviceSupportsPowerEnergy() を追加して、デバイスの電力測定機能に基づいてベンチマークの変更またはスキップを可能にしました。(I6a591b/322121218

バグの修正

  • 以前のベースライン プロファイルとの比較を追加しました。(I824c8b/269484510
  • 警告を無効にする DSL を追加しました。(Ic4debb/331237001
  • ベンチマーク バリアントが無効になっている場合の例外を情報ログに変更しました。(I8a517b/332772491
  • Macrobenchmark のメソッド トレースをキャプチャしやすくするため、実際の measureBlock() の所要時間にスコープを限定しました。以前は、ターゲット プロセスの起動時に開始され、コールド スタートのみをサポートしていました。(Iee85ab/300651094
  • perfetto トレース プロセッサの起動が遅い場合にクラッシュしないようにしました。(I98841b/329145808

バージョン 1.3.0-alpha03

2024 年 4 月 17 日

androidx.benchmark:benchmark-*:1.3.0-alpha03 がリリースされました。バージョン 1.3.0-alpha03 には、これらの commit が含まれています。

新機能

  • JSON、textproto、proto バイナリ(デコード前)のバリエーションを持つ公開 API PerfettoTraceProcessor.Session.queryMetrics API を追加しました。これにより、TraceProcessor に組み込まれた指標をクエリできます(I54d7fb/304038382
  • プロファイリング トレース(perfetto、メソッド トレースなど)のツールを簡単に使用できるように、JSON 出力に profilerOutput を追加しました。(I05dddb/332604449
  • ベンチマーク Perfetto Config に電力タグを追加しました。これにより、ウェイクロック トレースポイントなどがキャプチャされます。(Icfe44b/286551983
  • inst 引数 androidx.benchmark.profiling.skipWhenDurationRisksAnr を追加しました。予想される所要時間が ANR を引き起こす可能性がある場合にメソッド トレースをスキップしないように false に設定できます。CI 実行では使用しないことを強くおすすめします。
  • 試験運用版の inst 引数 androidx.benchmark.profiling.perfCompare.enable を追加しました。これを true に設定すると、測定フェーズとプロファイリング フェーズ間のタイミングの比較を実行できます。メソッド トレースのオーバーヘッドの評価などに役立ちます。(I61fb4b/329146942

API の変更

  • TraceSectionMetric.Mode をシールクラスに変更し、完全な when ステートメントを破ることなく将来の拡張を可能にしました。(I71f7b
  • TraceSectionMetric.Mode.Average.Count を追加し、引数の順序を変更して、より一般的な引数(モード)が引数リストの前に表示されるようにし、パラメータ名の指定の必要性を軽減しました。(Ibf0b0b/315830077b/322167531
  • 戻り値の型に合わせて Metric.getResult の名前を getMeasurements に変更しました。(I42595

バグの修正

  • automaticGenerationDuringBuild がオフの場合に、ベンチマークが生成されたベースライン プロファイルを使用するように修正しました。(Ic144fb/333024280
  • BaselineProfile Gradle プラグイン プロパティのオーバーライドを修正し、nonMinified またはベンチマークのビルドタイプをカスタマイズするときにベースライン プロファイルの生成とベンチマークを有効にしました。(Ib8f05b/324837887
  • マクロベンチマークでメソッド トレースのフラッシュを修正しました。これにより、低速デバイスでもメソッド トレースが完全にキャプチャされ、有効になります。(I6349ab/329904950
  • Perfetto トレース レコードでブロック開始を有効にして、トレース開始時にデータが欠落するリスクを軽減。API 33 以降でのみサポートされます。(Ie6e41b/310760059
  • ベンチマーク モジュールで Android Test Orchestrator を使用すると、モジュールごとの出力 JSON ファイルが繰り返し上書きされるため、警告を追加しました。(Ia1af6b/286899049
  • デバイスの言語 / 地域を無視して、Studio の出力の整合性を確保するため、千の位の区切り文字として「,」を強制しました。(I3e921b/313496656
  • TraceSectionMetric が、Trace.{begin|end}AsyncSection を使用して作成されたスライスをサポートするようになりました。(I91b32b/300434906
  • すべての起動検出エラーに log.w / 例外ラベルを追加しました。これによって現在の動作は変わりません(一部のエラーはスローされ、他のエラーは起動の検出に失敗します)。ただ、動作をよりわかりやすくするだけです。通常、Log.w() で起動指標を報告できないのは、フレーム以外のイベントが欠落している場合や、起動が検出されたときに例外がスローされる場合(UI/RT スライスからのフレーム タイミング情報は除く)です。(Id240fb/329145809
  • Macrobenchmark を実行する前にバックグラウンドの dexopt ジョブをキャンセルして、干渉を減らします。(I989ed
  • FrameTimingMetricframeCount 測定値を追加しました。これにより、生成されるフレーム数が変更されたために測定値が変化するシナリオを検出しやすくなります(新しいアニメーションの追加、無効化の問題の修正)。(I1e5aa
  • ドキュメントで利用可能な場合は frameOverrunMs をトラッキングすることを推奨し、その理由を明確にしました。(I18749b/329478323

バージョン 1.3.0-alpha02

2024 年 3 月 20 日

androidx.benchmark:benchmark-*:1.3.0-alpha02 がリリースされました。バージョン 1.3.0-alpha02 に含まれる commit はこちらをご覧ください。

新機能

  • 埋め込まれた ProGuard ルールを介したマイクロベンチでの R8 の試験運用版のサポート。このサポートは試験運用版であり、ライブラリ モジュール テストの圧縮には AGP 8.3 が必要です。ベンチマーク モジュールの build.gradle で R8 の圧縮/最適化を有効にするには、次のコードを使用します。これにより、ワークロードに応じてパフォーマンスが大幅に向上します。(I738a3b/184378053

    android {
        buildTypes.release.androidTest.enableMinification = true
    }
    

バグの修正

  • メソッド トレース警告がマイクロベンチの出力とは別の行に表示されるように修正。(I0455cb/328308833

バージョン 1.3.0-alpha01

2024 年 2 月 21 日

androidx.benchmark:benchmark-*:1.3.0-alpha01 がリリースされました。バージョン 1.3.0-alpha01 に含まれる commit については、こちらをご覧ください

API の変更

  • 不要な単語「should」を避けるため、MicrobenchmarkConfig ブール値パラメータの名前を変更しました。(Ia8f00b/303387299
  • BenchmarkRule.measureRepeatedOnMainThread を追加し、特に CI の大規模なスイートにおいて、メインスレッドのベンチマーク(ビューや Compose UI に関連するものなど)で ANR がトリガーされないようにしました。(I5c86d
  • FrameTimingGfxInfoMetric を追加しました。これは、Perfetto トレースから抽出されるのではなく、プラットフォームから直接取得される測定値を使用する FrameTimingMetric の試験運用版の代替実装です。(I457cbb/322232828
  • 個々の warmUp 反復処理中に ART プロファイルをダンプする機能を追加しました。(I17923
  • TraceSectionMetric API の変更点:
    • Mode.MinMode.Max を追加
    • ラベル引数を追加して、セクション名を指標ラベルとしてオーバーライド
    • 指標の意味を明確にするために、出力にモード名を追加しました
    • この指標のほとんどの使用が繰り返しイベントを対象としているため、デフォルトを合計に変更しました。CI の使用ではこの変更に注意してください。中断や解析の中断が発生する可能性があります。(Ic1e82b/301892382b/301955938

バグの修正

  • 指定された管理対象デバイスが存在しない場合のベースライン プロファイル Gradle プラグインのエラー メッセージを改善しました。(Idea2bb/313803289
  • AGP 8.3.0-alpha15 より前の AAR にライブラリ ベースライン プロファイルを含める問題を修正しました。(I1d2afb/313992099
  • 生成タスクの終了時にベースライン プロファイルと起動プロファイルの出力 URL を修正しました。(I802e5b/313976958
  • java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] の修正を試みるデータソースのタイムアウトを調整しました。(I8dc7db/323601788
  • シェーダーのドロップ動作をオーバーライドするための 2 つの計測引数を追加し、ProfileInstaller 1.3 のないアプリをベンチマークする際のクラッシュを回避できるようにしました。
    • androidx.benchmark.dropShaders.enable=true/false : すべてのシェーダーのドロップ(StartupMode.Cold の起動時のものを含む)をスキップできます。特に、まだ profileinstaller 1.3 を使用していないアプリをベンチマークする場合に便利です。
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : シェーダーをドロップしようとしたときに発生する障害を許容するために使用できます。たとえば、profileinstaller 1.3 のないアプリをベンチマークする場合などです(I4f573)。
  • 数秒を超えると予想される場合は UI スレッドでのメソッド トレースをスキップし、スロー時にメソッド トレースをクリーンアップします。(I6e768
  • ファイル名が 200 文字を超える場合はスローし、ファイルの書き込みや後処理時に不明確なクラッシュが発生しないようにします。(I4a5ab
  • トレースの先頭と末尾にある終了していないフレームがペアになって、非常に長い単一のフレームとして誤って報告される問題を修正しました。(I39353b/322232828
  • API 30 ~ 33 でパッケージを再インストールするときに API 30 以降で --skip verification を使用して、ユーザービルドの ART プロファイルを消去します。これにより、一部のデバイスで障害を引き起こす Google Play プロテクトの警告を回避できます。(Ic9e36
  • システム UI やランチャーなどのシステムアプリでないアプリを強制終了する場合は、am force-stop を使用します。(I5e028
  • Macrobenchmark は、ターゲット アプリケーションが ART プロファイルをフラッシュする 1 second を待機するようになりました(以前は 500 ms を待機していました)。(I85a50b/316082056
  • フレームが生成されないときの FrameTimingMetric エラーを改善し、指標の解析に失敗した場合は常にトレースへのリンクを出力して問題の診断を支援します。(I956b9
  • FrameTimingMetric でフレーム ID の解析に失敗するクラッシュを修正しました(特に特定の OEM デバイスで発生)。(Ia24bcb/303823815b/306235276
  • FrameMetrics のチェックの厳密さを緩和し、エラー メッセージに詳細を追加しました。(Iadede

バージョン 1.2

バージョン 1.2.4

2024 年 4 月 17 日

androidx.benchmark:benchmark-*:1.2.4 がリリースされました。バージョン 1.2.4 に含まれる commit はこちらをご覧ください。

バグの修正

  • ベンチマーク バリアントでベースライン プロファイルの srcset が設定されない問題を修正。また、循環依存関係を引き起こすライブラリの automaticGenerationDuringBuild も修正しました。(I28ab7b/333024280
  • システム UI やランチャーなどのシステムアプリでないアプリを強制終了する場合は、am force-stop を使用します。これにより、プロセスの強制終了が完全に成功しなかったために「Package $package must not be running prior to cold start!」というメッセージが表示され、StartupMode.COLD ベンチマークがクラッシュする問題が修正されました。(I5e028

バージョン 1.2.3

2024 年 1 月 24 日

androidx.benchmark:benchmark-*:1.2.3 がリリースされました。バージョン 1.2.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • AGP バージョンが 8.3.0 以降の場合のベースライン プロファイル Gradle プラグインから例外を削除しました。
  • AGP 8.3.0-alpha15 より前の AAR にライブラリ ベースライン プロファイルを含める問題を修正。

バージョン 1.2.2

2023 年 12 月 1 日

androidx.benchmark:benchmark-*:1.2.2 がリリースされました。バージョン 1.2.2 に含まれる commit については、こちらをご覧ください

ベースライン プロファイル

  • 実行ログに、ベースライン プロファイルの出力ファイルパスがローカル ファイル URI として表示されます(aosp/2843918aosp/2853665b/313976958)。

バージョン 1.2.1

2023 年 11 月 15 日

androidx.benchmark:benchmark-*:1.2.1 がリリースされました。バージョン 1.2.1 に含まれる commit については、こちらをご覧ください

新機能

  • ユーザーがテストパターンを無効にしたときのエラー メッセージを改善しました。(b/307478189
  • AS テスト実行の統合をサポートするプロパティを追加しました。(b/309805233)、(b/309116324

バージョン 1.2.0

2023 年 10 月 18 日

androidx.benchmark:benchmark-*:1.2.0 がリリースされました。バージョン 1.2.0 に含まれる commit については、こちらをご覧ください

1.1.0 以降の重要な変更

ベースライン プロファイル

  • 新しい ベースライン プロファイル Gradle プラグインにより、ベースライン プロファイルのキャプチャとテストとビルドのワークフローに含めることが自動化されます。
  • BaselineProfileRule.collect が安定版になりました。これは、以前の試験運用版 BaselineProfileRule.collectBaselineProfile API を合理化、簡素化したものです。
    • packageName を指定してアプリを実行するだけ
  • ベースライン プロファイルを生成するライブラリの場合、生成されたルールをコード(BaselineProfileRule.collect 引数)でフィルタできるようになりました。さらに簡単に、Gradle プラグインでフィルタすることもできます。
  • 修正
    • Android U 以降でのベースライン プロファイルの収集を修正しました。(Id1392b/277645214

Macrobenchmark

  • コンパイル
    • Macrobenchmark が、コンパイルのたびにコンパイル状態を完全にリセットするようになりました。Android 14 より前のバージョンでは APK の再インストールが必要になるため、測定対象の状態(ユーザーのログインなど)を保持する場合は、Android 14 以降でベンチマークを行うことを強くおすすめします。
    • また、アプリのコンパイルを個別に制御し、CompilationMode.Ignore() またはインストルメンテーション アグルーメントを使用してコンパイルをスキップすることで、この問題を回避することもできます。
  • 計測引数

    • androidx.benchmark.dryRunMode.enable 計測引数(すでにマイクロベンチマークで利用可能)のサポートにより、検証の実行を高速化(ベンチマークの作成時や presubmit 時など)
    • androidx.benchmark.profiling.mode=StackSamplingMethodTracing のサポート。
    • androidx.benchmark.enabledRules を追加して、ベースライン プロファイルと Macrobenchmark ルールのテストに対して実行時のフィルタリングを許可
    • tracing-perfetto でトレースを有効にするための androidx.benchmark.perfettoSdkTracing.enable 引数を追加しました(Compose の再コンポーズ トレースなど)。StartupMode.COLD で使用する場合、アプリの起動時にトレース ライブラリが読み込まれて有効になるため、タイミングに大きな影響があります。
  • 要件

    • Macrobenchmark でプロファイルのキャプチャ / リセット、シェーダー キャッシュの消去を有効にするには、ターゲット アプリに ProfileInstaller 1.3.0 以降が必要です。
  • 新しい試験運用版の Metrics API

    • 試験運用版の TraceSectionMetric を追加しました。これにより、アプリ内の trace("") {} ブロックから単純なタイミングを抽出できます。また、Perfetto TraceProcessor の完全なクエリ機能を活用するために TraceMetric を使用することもできます。
    • 電力使用量の情報を取得する試験運用版の PowerMetric を追加しました
    • 試験運用版の MemoryCountersMetric を追加してページ フォールトをカウント
    • システム トレース(Perfetto トレース)から指標を抽出するために内部で使用される試験運用版の PerfettoTraceProcessor API を追加しました
  • 修正

    • 複数の APK(App Bundle など)からインストールされたアプリからプロファイルをインストールまたは抽出する際に発生するクラッシュを修正しました。
    • フレーム ID が一致しないフレーム(通常は、API 31 以降のリップル中のフレーム)を FrameTimingMetric が無視する問題を修正しました。(I747d2b/279088460
    • 64 MB を超えるトレースの解析エラーを修正しました。(Ief831b/269949822
    • デバイス(特にエミュレータ)の OS イメージがトレースまたはコンパイルに正しく構成されていない場合のエラーを明確化
    • バッテリー非搭載デバイス(マイクロとマクロ)のバッテリー残量チェックをスキップ
    • ファイル出力を改善し、無効な出力ディレクトリのエラーを明確にし、デフォルトをより安全にしました
    • シェーダー キャッシュを常に破棄することで StartupMode.COLD の安定性を改善(MacrobenchmarkScope.dropShaderCache からも公開)
    • startActivityAndWait の Leanback フォールバック機能を修正しました。

Microbenchmark

  • 機能
    • プロファイリングを他の指標の後に別のフェーズに移動したため、1 回のテスト実行で正確なタイミングとプロファイリング結果の両方を表示できます。
  • 試験運用版の API
    • カスタム指標の定義、トレースおよびプロファイリングの構成用の試験運用版 MicrobenchmarkConfig API を追加しました。メソッド トレースやトレースポイントをキャプチャするために使用できます(ただし、トレースのオーバーヘッドに注意してください)。
    • JUnit を使用せずに、BenchmarkRule とは別に BenchmarkState を制御するための試験運用版 API を追加しました
    • ベンチマーク API とは別に、カスタム構成で Perfetto トレースをキャプチャできるように、試験運用版の PerfettoTrace レコードを追加しました。
  • 修正
    • Android Studio のベンチマーク出力で先頭の空白文字が欠落する問題の回避策。
    • Android Studio のベンチマーク出力で警告が印刷されない問題を修正しました。
    • Android 13(API 33)以降での SampledProfiling クラッシュを修正しました。
    • IsolationActivity と Perfetto トレースをスキップすることで dryRunMode のパフォーマンスを大幅に改善しました(古い OS バージョンのドライラン モードで最大 10 倍高速化)。

バージョン 1.2.0-rc02

2023 年 10 月 6 日

androidx.benchmark:benchmark-*:1.2.0-rc02 がリリースされました。バージョン 1.2.0-rc02 に含まれるコミットについては、こちらをご覧ください

バグの修正

  • ベンチマーク ファイルの出力を修正し、BaselineProfile プラグイン ファイルのコピーが中断されないようにしました。ファイルは生成され、デバイスからコピーされましたが、Gradle プラグインが認識できないように名前が変更されていました。(I8dbccb/303034735b/296453339
  • macrobenchmark モジュールからターゲット アプリに挿入する際の tracing-perfetto 読み込みエラー メッセージを明確にしました。

バージョン 1.2.0-rc01

2023 年 9 月 20 日

androidx.benchmark:benchmark-*:1.2.0-rc01 がリリースされました。バージョン 1.2.0-rc01 に含まれる commit については、こちらをご覧ください

バグの修正

  • Perfetto SDK トレースによってベンチマークの初期化が失敗した場合に、例外(対処手順付き)がスローされるようになりました。(I6c878b/286228781
  • ART メソッド トレースから Perfetto 形式に変換する際の OOM クラッシュを修正。(I106bdb/296905344
  • (Macrobenchmark)Studio テスト出力でリンクされたときのメソッド トレース ラベルを明確にし、メソッド トレース ファイル名をデバイス/ホストで一意に修正しました。これにより、複数のベンチマークを実行しても上書きされなくなりました。(I08e65b/285912360
  • ベースライン プロファイルをキャプチャするときにデバイスが起動していることを確認します。(I503fc

バージョン 1.2.0-beta05

2023 年 8 月 30 日

androidx.benchmark:benchmark-*:1.2.0-beta05 がリリースされました。バージョン 1.2.0-beta05 に含まれる commit については、こちらをご覧ください

新機能

  • ベースライン プロファイル Gradle プラグインで Android Gradle プラグイン 8.3 をサポートするようになりました(aosp/2715214)。

バージョン 1.2.0-beta04

2023 年 8 月 23 日

androidx.benchmark:benchmark-*:1.2.0-beta04 がリリースされました。バージョン 1.2.0-beta04 に含まれる commit については、こちらをご覧ください

新機能

  • ベースライン プロファイル Gradle プラグインで Android Gradle プラグイン 8.3 をサポートするようになりました(aosp/2715214)。

バグの修正

  • ファイルの書き込み / 移動とプルで発生するエラー(特にパラメータ化されたテストで発生するもの)を修正するために、出力ファイル名をさらにサニタイズして出力ファイル名で「=」と「:」を使用しないようにしました(I759d8)。

バージョン 1.2.0-beta03

2023 年 8 月 9 日

androidx.benchmark:benchmark-*:1.2.0-beta03 がリリースされました。バージョン 1.2.0-beta03 に含まれる commit については、こちらをご覧ください

API の変更

  • 引数を追加してデフォルトではターゲット パッケージでのみ TraceSectionMetric をフィルタするようにしました(Ia219bb/292208786)。

バグの修正

  • fullTracing.enable インストルメンテーション引数の名前を perfettoSdkTracing.enable に変更し、アーティファクト名やその他のリファレンスとの整合するようにしました。fullTracing.enable は引き続き代替手段として機能します(I7cc00)。
  • Benchmark ライブラリの内部トレースポイント(microbenchmark ループ / フェーズ トレースなど)は Android Studio のシステム トレース ビューアに表示され、Perfetto の適切なプロセスにネストされるようになりました(I6b2e7b/293510459)。
  • API 31 以降での macrobenchmark の NOT-PROFILEABLE エラーを削除し、eng または userdebug のユーザーに root 権限のあるデバイスでのプロファイル可能チェックをスキップするようにしました(I2abacb/291722507)。
  • DEX レイアウトの最適化を使用する場合に、起動プロファイル ルールもベースライン プロファイル ルールとみなされるようになりました(aosp/2684246b/293889189)。

バージョン 1.2.0-beta02

2023 年 7 月 26 日

androidx.benchmark:benchmark-*:1.2.0-beta02 がリリースされました。バージョン 1.2.0-beta02 に含まれる commit については、こちらをご覧ください

API の変更

  • microbench カスタム指標と設定(プロファイラ、トレースなど)用の試験運用版の API を追加しました(I86101b/291820856)。

バグの修正

  • API 26 / 28 ARM64 エミュレータでの最近の修正に従い、OS がトレース用に正しく設定されていない場合、macrobench でエラーが報告されます(I0a328b/282191686)。
  • コンパイルのリセットエラーに関して、一部のエミュレータでは最近この問題が修正されているため、エミュレータの更新を推奨する内容を追加しました(I8c815b/282191686)。
  • androidx.test.uiautomator:uiautomator:2.2.0implementation 依存関係ではなく api にしました(I1981e)。

バージョン 1.2.0-beta01

2023 年 7 月 18 日

androidx.benchmark:benchmark-*:1.2.0-beta01 がリリースされました。バージョン 1.2.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • Android Studio の Benchmark 出力で表示されないことがあった警告を修正し、Android Studio に表示されない Benchmark 出力の先頭の空白の回避策を適用しました(Ia61d0b/227205461b/286306579b/285912360)。
  • FrameTimingMetric のコメントを修正しました。下位指標は frameDurationCpuMs という名前が付けられます(Ib097fb/288830934)。

バージョン 1.2.0-alpha16

2023 年 6 月 21 日

androidx.benchmark:benchmark-*:1.2.0-alpha16 がリリースされました。バージョン 1.2.0-alpha16 に含まれる commit については、こちらをご覧ください

API の変更

  • BaselineProfileRule.collectBaselineProfile() API は BaselineProfileRule.collect() に名前が変更されました(I4b665)。

バグの修正

  • Macrobenchmark で androidx.benchmark.profiling.mode = MethodTracing をサポートするようになりました(I7ad37b/285912360)。
  • Microbenchmark プロファイリングを別のフェーズに移動し、置き換わるのではなく測定の後で順番に発生するようにしました。MethodTracing トレース セクションがある場合はキャプチャされた Perfetto トレースに含まれるようになりました(I9f657b/285014599)。
  • Mode.Sum を使って回数の計測を TraceSectionMetric に追加しました(Ic121ab/264398606)。

バージョン 1.2.0-alpha15

2023 年 6 月 7 日

androidx.benchmark:benchmark-*:1.2.0-alpha15 がリリースされました。バージョン 1.2.0-alpha15 に含まれる commit については、こちらをご覧ください

新機能

  • 試験運用版の MemoryUsageMetric をターゲット アプリのメモリ使用量のトラッキング用に追加しました(I56453b/133147125b/281749311)。
  • PerfettoTrace.record でのフルカスタムの Perfetto 設定のサポートを追加しました(If9d75b/280460183)。
  • ベースライン プロファイル生成をスキップするプロパティを追加しました。使用方法: ./gradlew assemble -Pandroidx.baselineprofile.skipgenerationI37fdab/283447020)。

API の変更

  • collectBaselineProfile API は常に安定版ベースライン プロファイルを生成します。collectStableBaselineProfile API は削除されたため、collectBaselineProfile を使用する必要があります(I17262b/281078707)。
  • BaselineProfileRulefilterPredicate 引数を non-null に変更し、同等のデフォルト値によりデフォルト フィルタの動作がドキュメントでより明確になるようにしました(I3816e)。

バグの修正

  • ランタイムの大部分を占める dryRunMode での IsolationActivity と Perfetto トレースを無効にして、パフォーマンスを大幅に改善しました(Ie4f7d)。
  • インストルメンテーション テスト引数の androidx.benchmark.profiling.mode=StackSamplingandroidx.benchmark.profiling.sampleFrequency を使用した、Macrobenchmarks でのコールスタック サンプリングをサポートします(I1d13bb/282188489)。
  • Android U(API 34)とエミュレータでのシェーダーの削除時に発生するクラッシュを解消しました(I031cab/274314544)。

バージョン 1.2.0-alpha14

2023 年 5 月 3 日

androidx.benchmark:benchmark-*:1.2.0-alpha14 がリリースされました。バージョン 1.2.0-alpha14 に含まれる commit については、こちらをご覧ください

バグの修正

  • 一貫性のないフレーム ID のフレームを無視する FrameTimingMetric を修正しました。この問題により、新しいプラットフォーム バージョン(API 31 以上)の一部のアニメーションで、RenderThread のアニメーション化の際に(リップル時など)多数のフレームが無視されることが発生していました(I747d2b/279088460)。
  • 64 MB よりも大きいトレースでのトレース プロセッサの解析を修正しました(Ief831b/269949822)。
  • pm dump-profiles コマンドの異なる出力による、Android U でのベースライン プロファイル生成エラーを修正しました(Id1392b/277645214)。
  • GPU クロックロック スクリプトを修正し、文字列を正しく比較できるようにしました(I53e54b/213935715)。

バージョン 1.2.0-alpha13

2023 年 4 月 5 日

androidx.benchmark:benchmark-*:1.2.0-alpha13 がリリースされました。バージョン 1.2.0-alpha13 に含まれる commit については、こちらをご覧ください

API の変更

  • 今後の起動プロファイル機能をサポートするため、ベースライン プロファイル生成時にプロファイル タイプ パラメータを追加しました(Ie20d7b/275093123)。
  • 新しい試験運用版 TraceMetric API を追加し、Perfetto トレースのコンテンツに基づいてフルカスタムの指標を定義できるようにしました(I4ce31b/219851406)。
  • 試験運用版指標を追加し、ベンチマーク時のページ フォールトの発生数を決定できるようにしました(I48db0)。

バージョン 1.2.0-alpha12

2023 年 3 月 22 日

androidx.benchmark:benchmark-*:1.2.0-alpha12 がリリースされました。バージョン 1.2.0-alpha12 に含まれる commit については、こちらをご覧ください

新機能

  • アルファ版で新しいベースライン プロファイル Gradle プラグインをリリースして、ベースライン プロファイルを生成しやすくし、デベロッパーのワークフローを簡素化しました。

API の変更

  • API 21 と 22 での Perfetto トレースのサポートを廃止しました。Microbenchmark と試験運用版 PerfettoTrace API の両方が対象となります。このバージョン以前は UiAutomation 接続が一部のデバイスで不安定でした(I78e8c)。
  • PerfettoTraceProcessor の試験運用版の公開 API を追加して、トレース コンテンツの解析を可能にしました。Perfetto トレースデータに基づく、フルカスタム指標に向けた取り組みです(I2659eb/219851406)。

バージョン 1.2.0-alpha11

2023 年 3 月 8 日

androidx.benchmark:benchmark-*:1.2.0-alpha11 がリリースされました。バージョン 1.2.0-alpha11 に含まれる commit については、こちらをご覧ください。

バグの修正

  • 複数の APK の App Bundle からプロファイルを再インストールまたは抽出するときに発生する MacrobenchmarkRuleBaselineProfileRule でのクラッシュを解消しました(I0d8c8b/270587281)。

バージョン 1.2.0-alpha10

2023 年 2 月 22 日

androidx.benchmark:benchmark-*:1.2.0-alpha10 がリリースされました。バージョン 1.2.0-alpha10 に含まれる commit については、こちらをご覧ください。

新機能

  • Android 14 以降では、新しいプラットフォーム機能が導入されたため、Macrobenchmark がターゲット アプリを再インストールしてコンパイル状態をリセットすることはなくなりました。以前は、ユーザーに root 権限のあるデバイスを用意するか、各ベンチマークの実行前にアプリの状態(ユーザーのログイン情報など)がすべて削除されるようにする必要がありました。(I9b08cb/249143766

バグの修正

  • コンパイルのスキップが原因となって空のプロファイルでクラッシュが発生しないよう、DryRunMode を修正しました。代わりに、反復処理を 1 回実行してプロファイルを抽出し、確実にキャプチャができるようにします。(I2f05db/266403227
  • 古い API レベルで電力統計データの有無を確認する際に発生する PowerMetric のクラッシュを修正しました。(5faaf9b/268253898

バージョン 1.2.0-alpha09

2023 年 1 月 11 日

androidx.benchmark:benchmark-*:1.2.0-alpha09 がリリースされました。バージョン 1.2.0-alpha09 に含まれるコミットについては、こちらをご覧ください

バグの修正

  • Noneandroidx.benchmark.enabledRules インストルメンテーション引数に渡す操作を有効にし、すべてのベンチマーク / ベースライン プロファイルの生成を無効にしました。(I3d7fdb/258671856
  • アプリ モジュール(つまり、non-self-instrumenting test APK)での PerfettoTrace キャプチャの問題を修正しました。(I12cfc
  • Studio 出力でのベースライン プロファイルの adb pull 引数の順序を修正しました。(I958d1b/261781624
  • macrobenchmark を実行しようとしたときなど、arm emulator api 33 が正しく認識され、警告が正しく出力されるようになりました。(69133bb/262209591
  • Macrobenchmark でバッテリー非搭載デバイスでのバッテリー残量チェックをスキップします。(fe4114b/232448937

バージョン 1.2.0-alpha08

2022 年 12 月 7 日

androidx.benchmark:benchmark-*:1.2.0-alpha08 がリリースされました。バージョン 1.2.0-alpha08 に含まれる commit については、こちらをご覧ください

API の変更

  • テストの一環として Perfetto トレース(システム トレース)をキャプチャし、テストの動作とパフォーマンスを検査するための試験運用版の新しい API PerfettoTrace.record {}PerfettoTraceRule を追加しました。(I3ba16
  • BaselineProfileRule は、パッケージ プレフィックスのリストではなく、フィルタ述語を受け入れるようになりました。これにより、テストではフィルタリングを詳細に制御できます。(I93240
  • N 回の反復処理でベースライン プロファイルが安定するまで待機する試験運用版の API BaselineProfileRule.collectStableBaselineProfile を追加しました。(I923f3
  • BaselineProfileRule を使用してベースライン プロファイルを生成するときに、出力ファイル名のプレフィックスを指定する機能を追加しました。(I7b59fb/260318655

バグの修正

  • ファイル出力の書き込みの安全性を改善しました。これにより、特に API 21 / 22 で、出力ファイルの書き込みと追加が通知なく行われるのを防止できます。(If8c44b/227510293
  • ファイルを正しく作成して配置するように simpleperf トレース出力を修正しました。これにより、Gradle によるファイルの pull が失敗するという問題もより全般的に解決されます。(I12a1cb/259424099
  • profileinstaller が古すぎる場合に出力される profileinstaller のエラー メッセージを改善しました。サポートされていないというメッセージの代わりに、API 31 から 33 でベースライン プロファイルを測定するには profileinstaller バージョンの更新(1.2.1)が必要である旨が表示されるようになりました。(Ia517fb/253519888
  • 複数のシェルコマンドの失敗に対する、出力には API 23 以下が必要というエラー メッセージを修正しました。Perfetto キャプチャ バイナリのセットアップの失敗や、トレース キャプチャの失敗などが該当します(Ib6b87b/258863685
  • 生成されたプロファイル ルールを自動的に並べ替え、時間の経過とともに変更するようにし、変更の数を最小限に抑えます(プロファイル ルールをソース管理にチェックインする場合)。(Ie2509
  • Expected no stderr from echo 3 > /proc/sys/vm/drop_caches というメッセージが表示される、Android 13(API 33)より前のルート権限のないビルドで発生するクラッシュを修正しました(I6c245b/259508183

既知の問題 - まだリリースされていない profileinstaller マニフェストのブロードキャスト レジストリがないことが原因で MacrobenchmarkScope.dropShaderCache() がクラッシュすることがあります。(I5c728b/258619948profileinstaller:1.3.0-alpha02 でこの問題を回避するには、(ベンチマークではなく)アプリの AndroidManifest.xml に以下を追加します。

  <!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
  <receiver
    android:name="androidx.profileinstaller.ProfileInstallReceiver"
    android:permission="android.permission.DUMP"
    android:exported="true">
    <intent-filter>
        <action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
    </intent-filter>
  </receiver>

バージョン 1.2.0-alpha07

2022 年 11 月 9 日

androidx.benchmark:benchmark-*:1.2.0-alpha07 がリリースされました。バージョン 1.2.0-alpha07 に含まれる commit については、こちらをご覧ください

API の変更

  • Macrobenchmark でエネルギーと電力を測定できるように新しい PowerMetric API を追加しました。(Ife601b/220183779
  • シェーダー キャッシュを実際に削除できるように MacrobenchmarkScope.dropShaderCache() を修正しました。これにより、反復処理を実施するごとにシェーダーが適切にクリアされるようになるため、StartupMode.COLD のベンチマークから約 20 ms のノイズが除去されます。以前は、シェーダー キャッシュがウォームアップ中に発生する可能性が高かったため、ウォームアップの反復処理を使用した Partial のコンパイルでは速さの数値が正しく報告されていませんでした。この修正には、ユーザーに root 権限のあるデバイスか、またはターゲット アプリでの profileinstaller:1.3.0-alpha02 の使用が必要になります。ProfileInstaller ライブラリの API の変更について詳しくは、ProfileInstaller 1.30-alpha02 のページをご覧ください。(Ia5171b/231455742
  • TraceSectionMode("label", Mode.Sum) を追加しました。これにより、同じラベルの複数のトレース セクションにかかった合計時間を測定できるようになりました。たとえば TraceSectionMetric("inflate", Mode.Sum) は、インフレーションにかかった Macrobenchmark での合計時間の指標 inflateMs を報告します。また、API 29 の要件も削除しました。これは、TraceSectionMetricandroidx.tracing.Trace と連携して低いレベルの API レベルに戻り、ターゲット アプリ内で forceEnableAppTracing が使用されるためです。(Id7b68b/231455742

バグの修正

  • すべての出力 / エラーを検証することで、すべての内部シェルコマンドの安全性を改善しました。(I5984db/255402908b/253094958
  • ベースライン プロファイルの adb pull コマンドでデバイスを指定することによって、複数のデバイス(最大 1 つのエミュレータ)が接続されている場合に pull コマンドを簡単にコピーできるようにしました。(I6ac6cb/223359380
  • Macrobenchmark のテスト APK が自己インストルメンテーションとして設定されていない場合のエラーを追加しました。このエラーにより、ターゲット アプリのプロセス内で Macrobenchmark が使用されることを防ぎます。プロセス中、Macrobench はアプリのコンパイル / 強制終了 /コールド スタートや、自身の権限の制御ができなくなります。(I4279b
  • setupBlock の後に StartupMode.COLD がターゲット プロセスを強制終了しないという measureRepeated() の問題を修正しました。これにより、アプリを操作している setupBlock がアプリプロセスを実行し続けることがなくなり、無効なコールド スタート測定が行われなくなります。(I8ebb7

バージョン 1.2.0-alpha06

2022 年 10 月 24 日

androidx.benchmark:benchmark-*:1.2.0-alpha06 がリリースされました。バージョン 1.2.0-alpha06 に含まれる commit については、こちらをご覧ください

API の変更

  • BaselineProfileRule は Android 13(API 33)では root を必要とせず、試験運用版ではなくなりました。(Ie0a7db/250083467b/253094958
    • この変更により、root 権限のないデバイスでアプリのプロファイルをディスクにフラッシュする方法も修正されますが、ターゲット アプリの profileinstaller の依存関係を更新する必要があります。
    • root 権限のないデバイスで BaselineProfileRule または CompilationMode.Partial(warmupIterations) を使用するには、androidx.profileinstaller.profileinstaller:1.3.0-alpha01 を使用するようにターゲット アプリも更新する必要があります。これにより、プロファイルをディスクに正しくフラッシュできるようになり、コンパイルや抽出が可能となります。

バグの修正

  • API 33 以上での SampledProfiling のクラッシュを修正しました。(I40743b/236109374

バージョン 1.2.0-alpha05

2022 年 10 月 5 日

androidx.benchmark:benchmark-*:1.2.0-alpha05 がリリースされました。バージョン 1.2.0-alpha05 に含まれる commit については、こちらをご覧ください。

バグの修正

  • ベンチマークがキャプチャしたトレースについて、Studio システム トレース ビューアのフレームの内訳を修正しました。(I3f3aeb/239677443
  • FrameTimingMetric を修正し、FrameOverrun を 29 ではなく API 31 を必須としてリストするようにしました。(I716ddb/220702554
  • BaselineProfileRule で反復処理を設定し、ターゲット パッケージがインストールされていない場合は明確にスローされるようにしました(MacrobenchmarkRule の場合はすでに対応済みです)。(Ic09a3b/227991471

バージョン 1.2.0-alpha04

2022 年 9 月 21 日

androidx.benchmark:benchmark-*:1.2.0-alpha04 がリリースされました。バージョン 1.2.0-alpha04 に含まれる commit については、こちらをご覧ください

新機能

  • Macrobenchmark(すでにマイクロで利用可能)に dryRunMode.enable 計測引数のサポートを追加して、ローカルでの開発を高速化し、アプリの自動化を(presubmit などで)検証します。これにより、反復処理が 1 にオーバーライドされ、コンパイルがスキップされます。すべての設定エラーが抑制され、測定用の .json ファイル出力が無効になります。(Ib51b4b/175149857

    Gradle コマンドラインで次のコマンドを実行します。

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
    

    build.gradle で次のように設定します。

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true'
        }
    }
    

バグの修正

  • 測定したアクティビティを MacrobenchmarkScope.startActivityAndWait() を介して起動する必要がなくなるように StartupTimingMetric を修正しました。つまり、指標は、通知、Context.startActivity()、アプリ内アクティビティに基づくナビゲーション、シェルコマンドなどから起動を取得できるということです。(Ia2de6b/245414235
  • フレーム検出の基準を下げることで、startActivityAndWait がエミュレータでの起動完了を待機しようとしてタイムアウトするバグを修正しました。(Ibe2c6b/244594339b/228946895

バージョン 1.2.0-alpha03

2022 年 9 月 7 日

androidx.benchmark:benchmark-*:1.2.0-alpha03 がリリースされました。バージョン 1.2.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • BenchmarkRule / JUnit4 とは別に、BenchmarkState を個別に利用するための試験運用版 API を追加しました。(Id478fb/228489614

バグの修正

  • startActivityAndWait に Leanback のフォールバック機能を追加しました。(01ed77b/242899915

バージョン 1.2.0-alpha02

2022 年 8 月 24 日

androidx.benchmark:benchmark-*:1.2.0-alpha02 がリリースされました。バージョン 1.2.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • root 権限を取得した状態でも MacrobenchmarkScope.killProcess() はデフォルトで am force stop に設定されます(ベースライン プロファイルの生成中を除く)。この設定は、オプションのブール値引数を使用してオーバーライドできます。(02cce9b/241214097

バグの修正

  • システムアプリのベースライン プロファイルの生成をサポートしました。(I900b8b/241214097
  • root 権限のないデバイスでの ODPM 電力指標のチェックをサポートしました。(a38c78b/229623230

バージョン 1.2.0-alpha01

2022 年 7 月 27 日

androidx.benchmark:benchmark-*:1.2.0-alpha01 がリリースされました。バージョン 1.2.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • 新しい tracing-perfetto-common コンポーネントを使用すると、それを公開するアプリでの Perfetto SDK トレースをツールによって有効化できます。(I2cc7f
  • androidx.benchmark.enabledRules 計測引数を追加して、マクロベンチマークの実行を、ベンチマークのみまたはベースライン プロファイルの生成のみにフィルタできるようにしました。「Macrobenchmark」または「BaselineProfile」を渡すことにより、1 種類のテストのみを実行できます。これは、エミュレータで BaselineProfiles の生成のみを行う場合などに便利です。カンマ区切りのリストもサポートされます。(I756b7b/230371561

    Macrobenchmark の build.gradle の例を示します。

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    または、Gradle コマンドラインから次のコマンドを実行します。

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

API の変更

  • ベンチマークでエネルギーと電力のタスクを測定できるように、新しい PowerMetric を追加しました。(I9f39bb/220183779
  • プロファイルのリセットとコンパイルをスキップする新しいコンパイル モード CompilationMode.Ignore を追加しました。(Ibbcf8b/230453509
  • 出力ファイルをパッケージ名でフィルタする新しいパラメータを BaselineProfileRule#collectBaselineProfile に追加しました。(If7338b/220146561
  • デベロッパーがデバイスを放電して消費電力を測定できるようにしました。(I6a6cb
  • MacrobenchmarkScope にシェーダーのキャッシュを消去する機能を追加しました。(I32122
  • デベロッパーが指標タイプと目的のサブシステム カテゴリの詳細の表示を構成できるようにしました。(I810c9
  • これまでは、サポートされていないデバイスでベンチマークが実行されると、UnsupportedOperationException がスローされていました。現在は、サポートされていないデバイスで指標が使用されている場合にのみ、UOE が発生します(PowerMetric.configure など)。(I5cf20b/227229375
  • マクロベンチマークでシステム カテゴリごとの総消費電力と総消費エネルギーを測定できるように、TotalPowerMetricTotalEnergyMetric を追加しました。(I3b26bb/224557371

バグの修正

  • ルート権限のないビルドのマクロベンチマーク間でコンパイル済みメソッドが正しくリセットされない問題を修正しました。残念ながら、反復処理ごとに APK を再インストールする必要があります。それにより、マクロベンチマークごとにアプリデータが消去されます。(I31c74b/230665435
  • API 21 / 22 で記録を行う際のクラッシュを修正しました。(If7fd6b/227509388b/227510293b/227512788
  • アクティビティ起動の完了検出を徹底的に点検し、起動マクロベンチマークの「指標を読み取れない」例外を修正しました。(Ia517c

バージョン 1.1.1

バージョン 1.1.1

2022 年 11 月 9 日

androidx.benchmark:benchmark-*:1.1.1 がリリースされました。バージョン 1.1.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • 一部の Android 11(API 30)以降のデバイスで発生していた android.system.ErrnoException: open failed: EACCES を修正しました。これは 1.2.0-alpha01 の修正の一部です。(aosp/2072249

バージョン 1.1.0

バージョン 1.1.0

2022 年 6 月 15 日

androidx.benchmark:benchmark-*:1.1.0 がリリースされました。バージョン 1.1.0 に含まれる commit については、こちらをご覧ください

  • このバージョンは androidx.benchmark:benchmark-*:1.1.0-rc03 と同一です。

1.0.0 以降の重要な変更

バージョン 1.1.0-rc03

2022 年 6 月 1 日

androidx.benchmark:benchmark-*:1.1.0-rc03 がリリースされました。バージョン 1.1.0-rc03 に含まれる commit については、こちらをご覧ください

バグの修正

  • ベンチマークの反復処理ごとにターゲット パッケージが再インストールされないようにしました。(aosp/​​2093027b/231976084

  • pressHome() から 300ms の遅延を削除しました。(aosp/2086030b/231322975

  • 内部で使用される Shell コマンドを最適化して、Macrobenchmark の反復処理の速度を改善しました。(aosp/2086023b/231323582

  • Macrobenchmark によるベースライン プロファイル生成時の Gradle 管理対象デバイスをサポートしました。(aosp/2062228b/228926421

バージョン 1.1.0-rc02

2022 年 5 月 11 日

androidx.benchmark:benchmark-*:1.1.0-rc02 がリリースされました。バージョン 1.1.0-rc02 に含まれる commit については、こちらをご覧ください

  • このリリースでは、測定が正確に行われるようにするため、ベンチマークとベンチマークの間にアプリが完全に再インストールされるよう動作が変更されています。

バグの修正 / 動作の変更

  • アプリのコンパイルが、Macrobenchmark 間で正しくリセットされず、ルート権限のないビルドではまったくリセットされない問題を修正しました。これにより、複数のテストを実行したときに、CompilationMode が測定にほとんど(またはまったく)反映されない問題の多くが修正されます。この問題を回避するため、ターゲット アプリをテストメソッドごとに完全に再インストールし、Macrobenchmark ごとにアプリデータが消去されるようにしました。(I31c74b/230665435

  • この動作変更により、アプリをテスト前の状態に設定できなくなるため、これを回避する手段としてコンパイル / 再インストールをスキップできるようにしました。たとえば、シェルコマンド cmd package compile -f -m speed <package> を使用してターゲットを完全にコンパイルし、その後の Macrobenchmark のコンパイルをスキップすることができます。

    Macrobenchmark の build.gradle の例を示します。

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false'
        }
    }
    

    または、Gradle コマンドラインから次のコマンドを実行します。

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • androidx.benchmark.enabledRules 計測引数を追加することで、Macrobenchmark とベースライン プロファイルで生成したテストの間でモジュールを共有できるようになりました。たとえばエミュレータで BaselineProfiles を生成する場合などに、「Macrobenchmark」または「BaselineProfile」を渡すことで 1 種類のテストのみを実行できます。(I756b7b/230371561

    Macrobenchmark の build.gradle の例を示します。

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    または、Gradle コマンドラインから次のコマンドを実行します。

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

バージョン 1.1.0-rc01

2022 年 4 月 20 日

androidx.benchmark:benchmark-*:1.1.0-rc01 がリリースされました。バージョン 1.1.0-rc01 に含まれる commit については、こちらをご覧ください。

バグの修正

  • Android Studio のベースライン プロファイル出力リンクで一意のファイル名が使用されるようになりました。これにより、出力には BaselineProfileRule を使用した最新の結果が常に反映されます。(aosp/2057008b/228203086

バージョン 1.1.0-beta06

2022 年 4 月 6 日

androidx.benchmark:benchmark-*:1.1.0-beta06 がリリースされました。バージョン 1.1.0-beta06 に含まれる commit については、こちらをご覧ください

バグの修正

  • API 21 / 22 でトレース記録を行う際のクラッシュを修正しました。(If7fd6b/227509388
  • アクティビティ起動の完了検出を徹底的に点検し、起動マクロベンチマークの「指標を読み取れない」例外を修正しました。(Ia517c
  • CompilationMode.None() が使用されている場合の Macrobenchmark の起動指標を修正しました。変更前は、CompilationMode.Partial() の動作が Compilation.None() より遅くなっていました。(611ac9

バージョン 1.1.0-beta05

2022 年 3 月 23 日

androidx.benchmark:benchmark-*:1.1.0-beta05 がリリースされました。バージョン 1.1.0-beta05 に含まれる commit については、こちらをご覧ください

バグの修正

  • CompilationMode.None の使用時にプロファイルのインストールをスキップした後にパッケージが強制終了される問題を修正しました。(aosp/1991373
  • StartupMode.COLD の使用時に Macrobenchmarks が起動指標を収集できない問題を修正しました。(aosp/2012227b/218668335

バージョン 1.1.0-beta04

2022 年 2 月 23 日

androidx.benchmark:benchmark-*:1.1.0-beta04 がリリースされました。バージョン 1.1.0-beta04 に含まれる commit については、こちらをご覧ください

バグの修正

  • Android 10 で欠落している指標と、プロセス名がトレースで正しくキャプチャされないことで発生する NoSuchElementException を修正しました。(Ib4c17b/218668335

  • Q(API 29)以降では、サーマル スロットリングの検出に PowerManager を使用します。これにより、サーマル スロットリングの検出における誤検出の頻度が大幅に減少し(90 秒間のクールダウン後にベンチマークの再試行)、ユーザービルドのベンチマークが大幅に高速化されます。また、クロックがロックされている場合でも(デバイスの物理環境に対してロックが高すぎる場合)、スロットル検出が提供されます。(I9c027b/217497678b/131755853

  • 検査を簡素化するために、simpleperf のサンプリングされたプロファイリングを measureRepeated スレッドのみにフィルタします(Ic3e12b/217501939

  • マルチプロセス アプリでの名前付き UI サブプロセスの指標のサポート(Ice6c0b/215988434

  • Android 9(SDK 28)をターゲットとするよう、ベースライン プロファイル ルールをフィルタします。aosp/1980331 b/216508418

  • Compilation.None() を使用する場合、プロファイルのインストールをスキップします。また、アプリが古いバージョンの androidx.profileinstaller と Android Gradle プラグインを使用している場合は、警告を報告します。aosp/1977029

バージョン 1.1.0-beta03

2022 年 2 月 9 日

androidx.benchmark:benchmark-*:1.1.0-beta03 がリリースされました。バージョン 1.1.0-beta03 に含まれる commit については、こちらをご覧ください

API の変更

  • AudioUnderrunMetric を試験運用版フラグで macrobenchmark ライブラリに追加し、オーディオのアンダーランを検出できるようにしました。(Ib5972
  • profileBlock と同じ機能であったため、BaselineProfileRulesetup ブロックを受け入れないようになりました。(Ic7dfeb/215536447

    次に例を示します。

    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            setupBlock = {
                startActivityAndWait()
            },
            profileBlock = {
                // ...
            }
        )
    }
    
    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            profileBlock = {
                startActivityAndWait()
                // ...
            }
        )
    }
    

バグの修正

  • Studio 出力にリンクされたとき、microbench プロファイラ トレースが後続の実行で更新されない問題を修正しました。(I5ae4db/214917025
  • API 23 でコンパイル シェルコマンドを防止しました。(Ice380
  • FrameCpuTime から FrameDurationCpuFrameUiTime から FrameDurationUi に名前を変更して、タイムスタンプではなく期間であることを明確にし、プレフィックスと一致するようにしました。(I0eba3b/216337830

バージョン 1.1.0-beta02

2022 年 1 月 26 日

androidx.benchmark:benchmark-*:1.1.0-beta02 がリリースされました。バージョン 1.1.0-beta02 に含まれる commit については、こちらをご覧ください

バグの修正

  • Microbenchmark スタック サンプリングとメソッド トレース プロファイルの結果が、他のプロファイリング出力と同様に Studio 出力にリンクされるようになり、割り当て指標を抑制することがなくなりました。(Idcb65b/214440748b/214253245
  • BaselineProfileRule が、生成された BaselineProfile テキスト ファイルを pull するために、logcat と Studio 出力に adb pull コマンドを出力するようになりました。(f08811

バージョン 1.1.0-beta01

2022 年 1 月 12 日

androidx.benchmark:benchmark-*:1.1.0-beta01 がリリースされました。バージョン 1.1.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • プロファイラ引数の有効化が無視される問題を修正しました。(I37373b/210619998
  • サポートが終了した CompliationModes を削除しました。(I98186b/213467659
  • わかりやすくするため、CompilationMode.Partial のベースライン プロファイル引数を列挙型に切り替えました。(Id67ea

バージョン 1.1.0-alpha13

2021 年 12 月 15 日

androidx.benchmark:benchmark-*:1.1.0-alpha13 がリリースされました。バージョン 1.1.0-alpha13 に含まれる commit については、こちらをご覧ください

API の変更

  • Android Q(API 29 以上)のマイクロベンチ出力に、オーバーヘッドの少ないシステム トレースを追加しました。なお、これは現在のところ、結果に影響を与えないようにするために(android.os.Trace または androidx.tracing の Jetpack API を介して)カスタム トレースをキャプチャしません。このトレースは、特にベンチマーク以外のソースによる不安定性の診断に役立ちます。(I298beb/205636583b/145598917
  • CompilationModes を、Full、None、Partial という 3 つのクラスに明確化しました。以前は、コンパイル引数(現在は実装の詳細として扱われます)と機能の名前に一貫性がありませんでした。これにより、プラットフォーム バージョン間でのトレードオフ、可能性のある組み合わせ、動作がさらに明確になります。(I3d7bfb/207132597
  • 設定と測定が常にペアで並ぶようになりました。パッケージ名とイテレーションをクエリできるようになりました(ただし、特定のウォームアップ シナリオではイテレーションが null になることがあります)。(Id3b68b/208357448b/208369635

バグの修正

  • CompilationMode.Speed が誤って None として扱われる問題を修正しました。(I01137

バージョン 1.1.0-alpha12

2021 年 11 月 17 日

androidx.benchmark:benchmark-*:1.1.0-alpha12 がリリースされました。バージョン 1.1.0-alpha12 に含まれる commit については、こちらをご覧ください

新機能

  • カスタム トレースベースのタイミング測定用に試験運用版 TraceSectionMetric を追加しました。(I99db1b/204572664

バグの修正

  • 反復処理を実施するごとにデバイスを復帰させ、UI をテストできるようにします。これには、ロック画面を無効にすることが必要です。(Ibfa28b/180963442
  • エミュレータや root 権限のないデバイスでの StackSampling のプロファイリング モードにおける複数のクラッシュを修正しました。(Icdbdab/202719335
  • 各反復処理の最後の 0.5 秒間にわたるスリープを削除しました。この変更によって指標が欠落している場合は、バグを報告してください。(Iff6aa
  • データがドロップされる可能性を低減し、トレースによるメモリのオーバーヘッドを削減しました。(Id2544b/199324831b/204448861
  • コンパクトな sched ストレージ形式に切り替えることによって、トレースサイズを最大 40% 削減しました。(Id5fb6b/199324831
  • 起動指標の実装を更新して、レンダリング スレッドの終了時に常に終了するようになりました。これにより、異なるプラットフォーム バージョン間でのデータの一貫性が高まり、より密接にアプリ内測定に対応するようになります。(Ic6b55

バージョン 1.1.0-alpha11

2021 年 11 月 3 日

androidx.benchmark:benchmark-*:1.1.0-alpha11 がリリースされました。バージョン 1.1.0-alpha11 に含まれる commit については、こちらをご覧ください

API の変更

  • Macrobenchmark の minSdkVersion23 になりました。(If2655
  • アプリのクリティカル ユーザー ジャーニー用のベースライン プロファイルを生成できる新しい試験運用版 BaselineProfileRule を追加します。詳細なドキュメントも追加されます。(Ibbefab/203692160
  • Java 呼び出し元用に追加された measureRepeated インターフェースのバリアントは、メソッドの完了と解決の曖昧さの原因となっていたため、削除しました。Java 呼び出し元は、以前のように measureRepeated から Unit.Instance を返すことが必要になります。これが不便だと思われる場合は、バグの登録をお願いいたします。そうしていただければ、今後のバージョンで再検討いたします。(Ifb23eb/204331495

バージョン 1.1.0-alpha10

2021 年 10 月 27 日

androidx.benchmark:benchmark-*:1.1.0-alpha10 がリリースされました。バージョン 1.1.0-alpha10 に含まれる commit については、こちらをご覧ください

API の変更

  • API 23 に遡れるように、StartupTimingMetric をバックポートします。また、この新しい実装は reportFullyDrawn() をより適切に処理し、対応するコンテンツのレンダリングが完了するまで待機します。(If3ac9b/183129298
  • Java 呼び出し元用に、複数の MacrobenchmarkScope メソッドに JvmOverloads を追加しました。(I644feb/184546459
  • Java 言語における慣用的な使用方法をサポートするため、Consumer<MacrobenchmarkScope> を使用する代替の MacrobenchmarkRule.measureRepeated 関数を提供します。(If74abb/184546459

バグの修正

  • トレースが十分に早く開始されず、指標データが見落とされる問題を修正しました。これにより、ライブラリ自体が原因で発生していた「ベンチマーク中に指標をまったく読み取れない」例外が解決することが期待されます。(I6dfcbb/193827052b/200302931
  • FrameNegativeSlack の名前を FrameOverrun に変更し、意味(フレームが時間予算をどれだけ超過したか)を明確にしました。(I6c2aab/203008701

バージョン 1.1.0-alpha09

2021 年 10 月 13 日

androidx.benchmark:benchmark-*:1.1.0-alpha09 がリリースされました。バージョン 1.1.0-alpha09 に含まれる commit については、こちらをご覧ください。

バグの修正

  • API 31/S+ で、root なしでのカーネルページのキャッシュの削除がサポートされるようになりました。これにより、StartupMode.COLD の起動の精度が向上します。(Iecfdbb/200160030

バージョン 1.1.0-alpha08

2021 年 9 月 29 日

androidx.benchmark:benchmark-*:1.1.0-alpha08 がリリースされました。バージョン 1.1.0-alpha08 に含まれる commit については、こちらをご覧ください

API の変更

  • マクロベンチマークのスクロールを有効にしてAPI 23 に遡れるようにします。(If39c2b/183129298
  • 反復処理ごとの複数のサンプルのパーセンタイルに焦点を当て、新しいタイプのサンプリングされた指標を UI と JSON 出力に追加します。(I56247b/199940612
  • ベンチマーク ライブラリ全体で浮動小数点数指標に切り替えます(Studio UI では切り捨てられます)。(I69249b/197008210

バージョン 1.1.0-alpha07

2021 年 9 月 1 日

androidx.benchmark:benchmark-*:1.1.0-alpha07 がリリースされました。バージョン 1.1.0-alpha07 に含まれる commit については、こちらをご覧ください。

API の変更

  • 最小 API を 21 に引き上げ、今後サポートされることが想定される最小 API レベルを反映しました。現在サポートされている最小 API は、RequiredApi() を介して引き続き伝えられます。現在は 29 です。(I440d6b/183129298

バグの修正

  • ベースライン プロファイルを使用するアプリで、CompilationMode.BaselineProfile を使って MacroBenchmark を簡単に実行できるように、ProfileInstaller を修正しました。(I42657b/196074999)注: androidx.profileinstaller:profileinstaller:1.1.0-alpha04 以降への更新も必要です。
  • StartupMode.COLDCompilationMode.None のベンチマークの安定性が向上しました。(I770cdb/196074999

バージョン 1.1.0-alpha06

2021 年 8 月 18 日

androidx.benchmark:benchmark-*:1.1.0-alpha06 がリリースされました。バージョン 1.1.0-alpha06 に含まれる commit については、こちらをご覧ください

API の変更

  • ローカルでテスト / プロファイリングするときに反復回数を手動でオーバーライドできるように、androidx.benchmark.iterations 計測引数を追加しました。(6188beb/194137879

バグの修正

  • API 29 以降で、デフォルトのサンプリング プロファイラとして Simpleperf に切り替えました。(Ic4b34b/158303822

既知の問題

  • CompilationMode.BaselineProfile は開発中です。現時点ではプロファイルの良さを判断するために使用しないでください。

バージョン 1.1.0-alpha05

2021 年 8 月 4 日

androidx.benchmark:benchmark-*:1.1.0-alpha05 がリリースされました。バージョン 1.1.0-alpha05 に含まれる commit については、こちらをご覧ください

散発的なクラッシュにより、1.1.0-alpha04 はリリース前にキャンセルされました。b/193827052

API の変更

  • startActivityAndWaitam start で起動を呼び出すように切り替えられました。これにより、インテント Parcelable がサポートされなくなりますが、各測定イテレーションの時間が約 5 秒短縮されます。(I5a6f5b/192009149

バグの修正

  • サーマル スロットル検出の積極性を下げ、スロットルが頻繁に検出される場合はベースラインを再計算します。(I7327b
  • Android S ベータ版で動作するように FrameTimingMetric を修正しました。(Ib60ccb/193260119
  • EmptyActivity を使用して、ターゲット アプリを強制停止状態から解除し、CompilationMode.BaselineProfile のサポートを改善します。(Id7cacb/192084204
  • プラットフォーム標準に合わせてトレース ファイル拡張子を .perfetto-trace に変更しました。(I4c236b/174663039
  • StartupTimingMetric は、アプリケーションのレンダリングが完了するまでの時間を測定する「fullyDrawnMs」指標を出力するようになりました。アプリに対してこの指標を定義するには、初期リストアイテムが DB やネットワークから読み込まれたときなど、初期コンテンツの準備ができたときに Activity.reportFullyDrawn を呼び出します(reportFullyDrawn メソッドは、ComponentActivity のビルド バージョン チェックなしで使用可能)。テストは指標を取得するのに十分な時間実行する必要があります(startActivityAndWait は reportFullyDrawn を待機しません)。(If1141b/179176560
  • トレースへの Ui メタデータの追加にかかるコストを 50 ミリ秒以上削減します。(Ic8390b/193923003
  • トレースを停止する際のポーリング頻度を大幅に増やしました。これにより、たとえば起動ベンチマークのランタイムを 30% 以上短縮できます。(Idfbc1b/193723768

バージョン 1.1.0-alpha03

2021 年 6 月 16 日

androidx.benchmark:benchmark-*:1.1.0-alpha03 がリリースされました。バージョン 1.1.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

バグの修正

  • ベンチマーク エラーを抑制するための Gradle サンプルコードが更新され、サポートが終了していない API(その構文は .gradle.kts ユーザーもサポートします)を使用するようになりました。

    例:

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

バージョン 1.1.0-alpha02

2021 年 5 月 18 日

Benchmark バージョン 1.1.0-alpha02 では、ベンチマーク測定のための主要なコンポーネントである Macrobenchmark を導入しました。Macrobenchmark は、CPU ループを測定できるベンチマークを提供するだけでなく、アプリ全体の操作(起動やスクロールなど)の測定、トレースのキャプチャにも使用できます。詳しくは、ライブラリのドキュメントをご覧ください。

androidx.benchmark:benchmark-*:1.1.0-alpha02 がリリースされました。バージョン 1.1.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

Macrobenchmark のアーティファクトを追加しました(androidx.benchmark:benchmark-macro-junit4androidx.benchmark:benchmark-macro)。

  • ローカルまたは CI で、アプリの起動、スクロールまたはアニメーションのパフォーマンス指標をキャプチャします。
  • Android Studio 内からトレースをキャプチャして検査します。

バグの修正

  • Android 12 の出力ディレクトリにおけるシェル権限の問題を解決しました(注 - 影響を受けるデバイスで引き続き出力ファイルをキャプチャするには、Android Gradle プラグインを Android 7.0.0 Canary に、Android Studio を Arctic Fox(2020.3.1)に更新する必要があります)。(Icb039
  • BenchmarkPlugin の構成キャッシュのサポートを追加しました。(6be1c1b/159804788
  • ファイル出力を簡素化しました。デフォルトでは、requestLegacyExternalStorage=true を必要としないディレクトリで有効になっています。(8b5a4db/172376362
  • JIT スレッドが存在しないプラットフォーム バージョンで JIT スレッドが見つからないという logcat 警告をライブラリが出力する問題を修正しました。(I9cc63b/161847393
  • デバイス読み取りの最大周波数に関する問題を修正しました。(I55c7a

バージョン 1.1.0-alpha01

2020 年 6 月 10 日

androidx.benchmark:benchmark-common:1.1.0-alpha01androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01androidx.benchmark:benchmark-junit4:1.1.0-alpha01 がリリースされました。バージョン 1.1.0-alpha01 に含まれる commit については、こちらをご覧ください

1.1 の新機能

  • 割り当て指標 - ベンチマークが、ウォームアップとタイミングの後に追加のフェーズを実行し、割り当て数をキャプチャするようになりました。割り当てによって、古いバージョンのプラットフォームでパフォーマンスの問題が発生することがあります(クロックをロックした Nexus5X で測定したところ、O での 140 ns が M では 8 ns になりました)。この指標は、Android Studio コンソールの出力に表示されます。
  • プロファイリングのサポート - ベンチマーク実行用のプロファイリング データをキャプチャして、コードの実行速度が遅い理由を調べられるようになりました。ベンチマークでは、メソッド トレースのキャプチャ、または ART からのメソッド サンプリングのキャプチャがサポートされます。これらのファイルは、[ファイル] > [開く] を使用して、Android Studio 内の Profiler で検査できます。
  • Benchmark Gradle プラグインで、設定を簡単にするデフォルトが提供されるようになりました。
    • testBuildType は、コード カバレッジが組み込まれた依存関係を使用しないように、デフォルトでリリースに設定されています。リリースの buildType はデフォルトの buildType としても構成されています。これにより、Android Studio でプロジェクトを初めて開くときに正しいビルド バリアントが自動的に選択されます。(b/138808399
    • デフォルトの署名設定として signingConfig.debug が使用されます(b/153583269

** バグの修正 **

  • 各ベンチマークの最初の測定値が他よりも人為的に高かった、ウォームアップ遷移のオーバーヘッドを大幅に削減しました。この問題は、非常に小さなベンチマーク(1 マイクロ秒以下)の方が顕著でした。(b/142058671
  • コマンドラインから実行した場合に、ベンチマークごとに InstrumentationResultParser エラーが表示される問題を修正しました。(I64988b/154248456)。

既知の問題

  • コマンドラインによるベンチマークの gradle 呼び出しで、結果が直接出力されません。この問題を回避するには、Studio を介して実行するか、JSON 出力ファイルを解析して結果を取得します。
  • ベンチマーク レポートで、applicationId が「android」または「download」(大文字と小文字を区別しない)で終わるアプリがインストールされているデバイスからレポートを取得できません。この問題が発生した場合は、Android Gradle プラグインを 4.2-alpha01 以降にアップグレードする必要があります。

バージョン 1.0.0

Benchmark バージョン 1.0.0

2019 年 11 月 20 日

androidx.benchmark:benchmark-common:1.0.0androidx.benchmark:benchmark-gradle-plugin:1.0.0androidx.benchmark:benchmark-junit4:1.0.0 がリリースされました。1.0.0-rc01 からの変更はありません。バージョン 1.0.0 に含まれる commit については、こちらをご覧ください

1.0.0 の主な機能

Benchmark ライブラリを使用すると、アプリコードのパフォーマンス ベンチマークを作成して結果をすばやく取得できます。

ビルドとランタイム設定の問題を防ぎ、デバイスのパフォーマンスを安定させ、正確で一貫性のある測定を実現します。Android Studio での直接操作、または継続的インテグレーションによりベンチマークを実行して、コードのパフォーマンスを時系列で観察し、回帰を防ぎます。

主な機能は次のとおりです。

  • クロックの安定
  • スレッドの自動優先設定
  • RecyclerView サンプルなどで UI パフォーマンス テストをサポート
  • JIT 対応のウォームアップとループ
  • 後処理用に JSON 形式でベンチマーク出力

バージョン 1.0.0-rc01

2019 年 10 月 23 日

androidx.benchmark:benchmark-common:1.0.0-rc01androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01androidx.benchmark:benchmark-junit4:1.0.0-rc01 がリリースされました。バージョン 1.0.0-rc01 に含まれる commit については、こちらをご覧ください

新機能

  • ベンチマークに systrace トレースを追加

バグの修正

  • 優先度の低下により JIT がウォームアップ前に終了せず、指標が不安定である問題を修正(b/140773023
  • Android Gradle プラグイン 3.5 および 3.6 での JSON 出力ディレクトリの統合

バージョン 1.0.0-beta01

2019 年 10 月 9 日

androidx.benchmark:benchmark-common:1.0.0-beta01androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01androidx.benchmark:benchmark-junit4:1.0.0-beta01 がリリースされました。バージョン 1.0.0-beta01 に含まれる commit については、こちらをご覧ください

新機能

  • 各ウォームアップの前にガベージ コレクションを実行して、次々にベンチマークを行う際に発生するメモリリークによるメモリ圧迫を軽減(b/140895105

バグの修正

  • androidx.annotation:android-experimental-lint の依存関係を追加。これにより、試験運用版 API を使用しない場合に Java コードで正しく lint エラーが生成されます。Kotlin で呼び出す際に Kotlin の試験運用版アノテーションで提供されるものと同様のエラーになります。
  • Android Gradle Plugin(AGP)3.6 の出力に対して、additionalTestOutputDir 計測引数の使用を正しく検出するようになりました。これにより、AGP がデータコピーを処理するタイミングを把握できます。
  • JSON でクロック周波数が検出されない問題を修正し、正しく -1 が出力されるようになりました。(b/141945670

バージョン 1.0.0-alpha06

2019 年 9 月 18 日

androidx.benchmark:benchmark-common:1.0.0-alpha06androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06androidx.benchmark:benchmark-junit4:1.0.0-alpha06 がリリースされました。バージョン 1.0.0-alpha06 に含まれる commit については、こちらをご覧ください。

新機能

  • テストランナーの古いパッケージの誤使用に対してチェックを追加しました。これで、より参考になるエラー メッセージが表示されるようになりました。

API の変更

  • 試験運用版アノテーション ExperimentalAnnotationReport が正しく public になりました。試験運用版 BenchmarkState#report API を使用するには、このアノテーションが必要となりました。

バージョン 1.0.0-alpha05

2019 年 9 月 5 日

androidx.benchmark:benchmark-common:1.0.0-alpha05androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05androidx.benchmark:benchmark-junit4:1.0.0-alpha05 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

API の変更

  • BenchmarkState.reportData API は試験運用となりました。

バグの修正

  • デバイスに cut または expr シェル ユーティリティがないと clock-locking スクリプトが失敗する問題を修正しました。
  • ./gradlew lockClocks タスクの問題を修正しました。-c フラグをサポートしていない古いバージョンの su ユーティリティでルート権限を取得したデバイスでハングアップしていました。

バージョン 1.0.0-alpha04

2019 年 8 月 7 日

androidx.benchmark:benchmark-common:1.0.0-alpha04androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04androidx.benchmark:benchmark-junit4:1.0.0-alpha04 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

異なるビルドシステム(Bazel や Buck など)での使用と CI での実行の両方で、Gradle なしで Benchmark ライブラリを使用する方法についての新しいドキュメントも追加されました。詳細については、Gradle を使用せずにベンチマークを作成する継続的インテグレーションでベンチマークを実行するをご覧ください。

新機能

  • Gradle プラグイン
    • テスト カバレッジが自動的に無効になり、デフォルトで AndroidBenchmarkRunner が設定されるようになりました。(b/138374050
    • ベンチマーク実行時と AGP 3.6+ 使用時の、新しい AGP ベースのデータコピーのサポートを追加しました。
  • JSON 形式の追加
    • ベンチマーク テストの合計実行時間を出力(b/133147694
    • 名前文字列(@Parameters(name = "size={0},depth={1}") など)を使用する @Parameterized ベンチマークが、JSON 出力でベンチマークごとにパラメータ名と値を出力するようになりました。(b/132578772
  • ドライラン モード(b/138785848
    • 測定値をキャプチャせずにエラー / クラッシュを確認できるように、各ベンチマーク ループを 1 回だけ実行する「ドライラン」モードを追加しました。これはたとえば、送信前にベンチマークをすばやく実行して、障害がないことを確認する場合などに便利です。

API の変更

  • モジュール構造が変更され、ライブラリが分割されました。(b/138451391
    • benchmark:benchmark-junit4 には JUnit 依存関係を持つ AndroidBenchmarkRunner および BenchmarkRule クラスが含まれます。これらはいずれも androidx.benchmark.junit4 パッケージに移動されました。
    • benchmark:benchmark-common には、BenchmarkState API を含む残りのロジックが含まれます。
    • この分割により、ライブラリは今後 JUnit4 API なしでベンチマークをサポートできるようになります。
  • 構成の警告はエラーとして扱われるようになりました。そのため、テストはクラッシュします。(b/137653596
    • この変更の目的は、特に CI で正確な測定を奨励することです。
    • これらのエラーは、計測引数を使用して警告に戻すことができます。例: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

バグの修正

  • Q デバイス上の外部ストレージへの書き込み時にエラーが発生すると、問題を解決する方法が提案されるとともに、わかりやすいメッセージが表示されます。
  • 画面がオフのときに失敗するのではなく、ベンチマークの実行中に画面が自動的にオンになります。

外部寄与

  • JSON 出力の改善と画面オフの問題の修正に寄与した Sergey Zakharov 氏に感謝いたします。

バージョン 1.0.0-alpha03

2019 年 7 月 2 日

androidx.benchmark:benchmark:1.0.0-alpha03androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • ベンチマークごとのサーマル スロットリングによるスリープ期間を完全な JSON レポートで公開

バグの修正

  • Gradle プラグインは、Android プラグインと Android ブロックの後に適用する必要がなくなりました。
  • 対象範囲別ストレージを使用した Android 10 デバイスでのベンチマーク レポートのサポートを追加

バージョン 1.0.0-alpha02

2019 年 6 月 6 日

androidx.benchmark:1.0.0-alpha02androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。

JSON スキーマが API として扱われていることにご注意ください。他の API と同じ安定性制約に従うことが予定されています。安定版は(非常にまれな例外を除いて)元のベータ版であり、最終リリースで修正され、マイナー リリースでは追加のみ、メジャー リリースでは変更 / 削除のみが行われます。

API の変更

  • JSON スキーマをオーバーホールしました。JSON スキーマに対するこれ以降の変更は、追加に限定される可能性があります。

    • 将来的に追加の指標グループをサポートできるように結果オブジェクトの構造を再編成しました(b/132713021
    • テスト実行コンテキスト情報(デバイスとビルドの情報や、クロックがロックされているかどうかなど)を、最上位のオブジェクトに追加しました(b/132711920
    • 時間指標の名前に「ns」が含まれるようになりました(b/132714527
    • 報告される各指標にさらなる統計情報(最大値、中央値、最小値)を追加し、簡略化された「ナノ」サマリー統計情報を削除しました(b/132713851
  • XML 出力を削除しました(b/132714414

  • サーマル スロットルの検出を BenchmarkState.reportData API から削除しました(b/132887006

バグの修正

  • 最近の OS が搭載された一部のデバイスで ./gradlew lockClocks が安定しない問題を修正しました(b/133424037
  • エミュレータのスロットル検出を無効化しました(b/132880807

バージョン 1.0.0-alpha01

2019 年 5 月 7 日

androidx.benchmark:benchmark:1.0.0-alpha01 がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。