Benchmark
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2025 年 7 月 30 日 | 1.4.0 | - | - | - |
依存関係の宣言
Benchmark への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
Macrobenchmark
プロジェクトで Macrobenchmark を使用するには、Macrobenchmark モジュールの build.gradle
ファイルに次の依存関係を追加します。
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.4.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.4.0") }
Microbenchmark
プロジェクトで Microbenchmark を使用するには、マイクロベンチマーク モジュールの build.gradle
ファイルに次の依存関係を追加します。
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.4.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.4.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Microbenchmark ライブラリには、マイクロベンチマーク モジュールで使用する Gradle プラグインも用意されています。
このプラグインは、モジュールのビルド構成のデフォルト値を設定し、ベンチマーク出力のコピーをホストにセットアップし、./gradlew lockClocks
タスクを提供します。
このプラグインを使用するには、最上位の build.gradle
ファイルの「plugins」ブロックに次の行を含めます。
Groovy
plugins { id 'androidx.benchmark' version '1.4.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.4.0" apply false }
次に、プラグインをベンチマーク モジュールの build.gradle
ファイルに適用します。
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。
詳細については、Issue Tracker のドキュメントをご覧ください。
バージョン 1.4
バージョン 1.4.0
2025 年 7 月 30 日
androidx.benchmark:benchmark-*:1.4.0
がリリースされました。バージョン 1.4.0 にはこれらのコミットが含まれています。
1.3.0 以降の重要な変更
Microbenchmark
- Gradle プロジェクトの分離を尊重するため、Gradle タスク
lockClocks
とunlockClocks
を最上位レベルではなくベンチマーク プロジェクトに移動しました。 BenchmarkRule
をコルーチンの上に構築し、yield()
の動作を改善するようにリファクタリングしました。これにより、ベンチマーク実行中、特に長い CI 実行中の ANR のリスクが大幅に軽減されます。注: UI ベンチマークはmeasureRepeatedOnMainThread
で実行する必要があります
Macrobenchmark
- API 34 以降で
CompilationMode.None()
の回避策を追加しました。これは、ART の検証が初回起動後にアプリを部分的にコンパイルするため、パフォーマンスに一貫性がなくなるためです。 - 試験運用版の機能 - Startup Insights は、
MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true)))
を渡すことで、起動 Macrobenchmark の一般的な問題をハイライト表示できます。 - JIT コンパイルと最適化されていないクラスの読み込みを検出するために使用できる ArtMetric を追加しました。どちらもベースライン プロファイルの最適化を検証するのに役立ちます。
ベースライン プロファイル
BaselineProfileRule
で、マルチプロセス アプリのプロファイルが収集されるようになりました。
その他の変更点
- TraceProcessor は、
Macrobenchmark
指標以外の場合でも使用できるように、独自のライブラリ(androidx.benchmark:benchmark-traceprocessor
)に抽出されました。独自の ServerLifecycleManager を定義することで、Desktop JVM で実行することもできます。
バージョン 1.4.0-rc01
2025 年 6 月 18 日
androidx.benchmark:benchmark-*:1.4.0-rc01
がリリースされました。バージョン 1.4.0-rc01 には、これらの commit が含まれています。
バグの修正
- ランタイム イメージが原因で、最初のイテレーション後に
CompilationMode.None()
が最悪のパフォーマンスを測定しない問題の回避策を追加しました。残念ながら、この回避策では、各マクロベンチマーク スイートの開始時にランタイム イメージを意図的に破損させるために 5 秒の遅延が必要です(I4a4f1)。
バージョン 1.4.0-beta02
2025 年 6 月 4 日
androidx.benchmark:benchmark-*:1.4.0-beta02
がリリースされました。バージョン 1.4.0-beta02 にはこれらの commit が含まれています。
API の変更
- Java デベロッパーが
BaselineProfileRule.collectWithResults()
を呼び出しやすくするために、BaselineProfileConfig.Builder
を追加しました。(I94905)
バージョン 1.4.0-beta01
2025 年 5 月 7 日
androidx.benchmark:benchmark-*:1.4.0-beta01
がリリースされました。バージョン 1.4.0-beta01 にはこれらの commit が含まれています。
API の変更
PerfettoConfig
を受け取るPerfettoTraceRule
コンストラクタのバリアントを追加しました(Ie53ba)
バグの修正
TraceProcessor
起動分析情報のリンク形式を更新し、正しいプラグインとより明確な区切り文字を使用するようにしました(:
は%3A
より短く、どちらもサポートされています)(Ie18ef)- ルート化してシステムアプリを強制終了する場合でも、常に強制停止を使用してプロセスを終了します。
Expected no stdout/stderr from killall ... No such process
形式の例外を修正しました。(Idca2c)
外部からの協力
TraceProcessorHttpServer
のプロキシ例外ハンドラを追加しました(I480f5)
バージョン 1.4.0-alpha11
2025 年 4 月 9 日
androidx.benchmark:benchmark-*:1.4.0-alpha11
がリリースされました。バージョン 1.4.0-alpha11 には、これらの commit が含まれています。
API の変更
- Java 呼び出し元のユーザビリティを向上させるため、
TraceProcessor
の引数 timeout: Duration を timeoutMs long に変更しました。(I9fbb5) TraceProcessor
コンストラクタを内部としてマークします。呼び出し元はTraceProcessor.startServer
またはTraceProcessor.runServer
を使用する必要があります。(Ia8c5b)
バグの修正
MacrobenchmarkScope.killProcess
でアプリケーションを強制終了するときは、強制終了コマンドの結果を検証して、サイレント障害やタイムアウト エラーを防ぎます。(I84555)
依存関係の更新
- このライブラリは Kotlin 2.0 言語レベルをターゲットとするようになり、KGP 2.0.0 以降が必要になりました。(Idb6b5)
バージョン 1.4.0-alpha10
2025 年 3 月 26 日
androidx.benchmark:benchmark-*:1.4.0-alpha10
がリリースされました。バージョン 1.4.0-alpha10 には、これらの commit が含まれています。
API の変更
TraceProcessor
サーバーの負荷とクエリのデフォルトのタイムアウトを 120 秒に増やし(以前は 60 秒/30 秒)、両方を 1 つのタイムアウト パラメータで構成できるようにしました。(Ifec87)
バグの修正
profileinstaller
がなく、BroadcastReciever
が含まれているアプリのベンチマークやプロファイルのキャプチャを行う際に発生するいくつかの問題を修正しました。これは、ルート化されたデバイスでの実行にのみ影響します。(Ied308)
バージョン 1.4.0-alpha09
2025 年 3 月 12 日
androidx.benchmark:benchmark-*:1.4.0-alpha09
がリリースされました。バージョン 1.4.0-alpha09 には、これらの commit が含まれています。
API の変更
- カスタム ライフサイクルでの使用を容易にするため、
TraceProcessor
と、閉じることができるハンドル付きの Session API を追加しました。これは、コルーチンと Java API をより簡単に使用できるようにするためのステップでもあります。TraceProcessor.runServer {}
の拡張機能は、今後移動して試験運用版ではなくなる可能性があるため、試験運用版としてマークされるようになりました。(I358b4)
バグの修正
pgrep
toybox の変更により、API 36 でベンチマークとベースライン プロファイルのキャプチャが機能しない問題を修正しました。これにより、-a
で完全なコマンドラインを出力する必要があります。(Idc991)- 新しい API レベルでトレースのデータ損失のリスクを軽減するため、デフォルトのトレース構成をフィルタします。(I54e8a)
- 試験運用版の
androidx.benchmark.killExistingPerfettoRecordings
計測引数を追加しました。これはfalse
に設定して、既存の perfetto トレース キャプチャを続行できます。デフォルトでは、干渉を防ぐために、デバイス上の既存の perfetto トレース キャプチャは強制終了されます。(I02a3c) - API 35 以上のリリース済み OS バージョンでは、数値以外のコードネームが基盤となるプラットフォームでサポートされなくなったため、JSON フィールド
context.osCodenameAbbreviated
がREL
になります。(Ib17fd) - フレームの再同期が発生したときに
FrameTimingMetric
でクラッシュする問題を修正しました。(I7c6f4、b/394610806) FrameTimingQuery
のメインスレッドのスタック フレームの最上位がChoreographer#doFrame
であると想定しなくなりました。(Iee0e0、b/340206285)
バージョン 1.4.0-alpha08
2025 年 2 月 12 日
androidx.benchmark:benchmark-*:1.4.0-alpha08
がリリースされました。バージョン 1.4.0-alpha08 には、これらの commit が含まれています。
API の変更
TraceProcessor.runSession()
拡張機能 API を試験運用版に移行しました。これは、最終的に Android で具体的なコンストラクタに移行される可能性が高いためです。(Ib0528、b/393640753)- Startup Insights の実装のほとんどが公開/試験運用版となり、
TraceProcessor
アーティファクトに移動しました。StartupInsights
をご覧ください。(I0aa00) BenchmarkRule.runWithTimingDisabled {}
は非推奨となり、BenchmarkRule.runWithMeasurementDisabled {}
が推奨されます。BenchmarkRule.runWithMeasurementDisabled {}
は、すべての指標が一時停止されるという動作をより明確に記述します。また、MicrobenchmarkScope
スーパークラスを公開します。これは、runWithMeasurementDisabled
関数を再宣言してアクセスを開くことができないためです(インラインであるため)。(I9e23b、b/389149423、b/149979716)- ベンチマーク ライブラリが Kotlin 2.0 に移行しました。(I9d1e0)
androidx.benchmark.startupProfiles.enable
計測引数を削除しました。BaselineProfileRule.collect()
のincludeInStartupProfile
引数で制御できるため、この設定は不要になりました。(I39eb4)
バグの修正
- プロファイリング中に呼び出される Microbenchmark 内部関数の量を減らし、メソッド トレースなどをより明確にしました(Ifaed8)
- クラッシュ(「Failed to stop [
ProcessPid(processName=perfetto, pid=...)
]」)の投機的修正: ベンチマークを実行する前にバックグラウンドの Perfetto プロセスを停止できない場合、クラッシュする代わりにメッセージをログに記録するようになりました。(I37d3e、b/323601788) - 出力形式のチェックが厳しすぎたことが原因で発生した「Expected
pm dump-profiles
stdout」ラベルのIllegalStateExceptions
を修正しました。(I358dc)
バージョン 1.4.0-alpha07
2025 年 1 月 29 日
androidx.benchmark:benchmark-*:1.4.0-alpha07
がリリースされました。バージョン 1.4.0-alpha07 にはこれらの commit が含まれています。
新機能
BaselineProfileRule
に、計算されたプロファイルへのパスのリストを含むcollectWithResults(...)
API が導入されました。(I056f8)androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline
計測引数を追加しました。この引数を false に設定すると、ローカル テストでmeasureRepeatedOnMainThread
の期限超過時のスロー動作を無効にできます。テスト中に ANR が発生する可能性が高まるため、それ以外の場合はおすすめしません。(Idbeec、b/353226476)
API の変更
MicrobenchmarkConfig
コンストラクタに@JvmOverloads
を追加しました。(I13fd3)BenchmarkRule
をコルーチンの上に構築し、yield()
の動作を改善するようにリファクタリングしました。このリファクタリングにより、いくつかの試験運用版のBenchmarkState
API が削除されましたが、必要に応じて置き換えが行われます。また、動作を明確にするためにrunWithMeasurementDisabled
を追加しました(すべての測定が一時停止されます)。今後、runWithTimingDisabled
は非推奨になります。(I19837、b/389149423、b/311242861)- 新しい
androidx.benchmark:benchmark-traceprocessor
アーティファクトでPerfettoTraceProcessor
をTraceProcessor
に移動し、その API のほとんどを試験運用版ではなくします。カスタムTraceMetric
またはトレースから読み取るものは、新しいTraceProcessor
インポートに更新する必要があります。新しいTraceProcessor
API は古い API とまったく同じように動作しますが、マクロベンチマークに組み込まれた Android 固有の実装を備えたスタンドアロンのインターフェース ライブラリ(Room のandroidx.sqlite
レイヤにやや類似)です。新しいアーティファクトは JVM でも使用できますが、現時点ではTraceProcessor
バイナリの独自のコピーを開始し、接続するポートを提供する必要があります。(I3a767、I62563、b/381134564)
バグの修正
MacrobenchmarkScope.startActivityAndWait
がターゲット プロセスの起動に失敗した場合(ターゲット プロセスのクラッシュが原因である可能性あり)に、より明確なエラー メッセージをスローするようにしました。以前は、より曖昧な「アクティビティの起動完了を確認できません」というメッセージが表示されていました(I3539b)。- Kotlin サンプルで構文エラーをいくつか修正し、Java / build.gradle サンプルで構文のハイライト表示をいくつか修正しました。(Ib3808)
ArtMetric
パラメータとCaptureInfo
パラメータのドキュメントを明確にしました。(I96e60)
バージョン 1.4.0-alpha06
2024 年 12 月 11 日
androidx.benchmark:benchmark-*:1.4.0-alpha06
がリリースされました。バージョン 1.4.0-alpha06 にはこれらの commit が含まれています。
API の変更
- Studio のハイライト表示/解析が壊れているため、
PerfettoTraceProcessor.Session.query()
での@Language("sql")
の使用を削除しました。(Idc2fa、b/377733398)
バグの修正
- このライブラリは、型使用である JSpecify nullness アノテーションを使用するようになりました。Kotlin を使用している場合、次のコンパイラ引数を使用して正しい使用法を適用する必要があります。
-Xjspecify-annotations=strict
(Kotlin コンパイラのバージョン 2.1.0 以降ではこれがデフォルトです)。(I46810、b/326456246) ArtMetric
を修正してクラスの読み込み(初期化ではない)をレポートし、ドキュメントを改善してランタイムの動作を明確にしました。(I9915c)- Android マルチユーザーでは、ルート権限を持つデバイスでのみ root としてコマンドを実行します。(I88b44)
バージョン 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 指標から測定値がレポートされない問題を修正しました。現在、マクロベンチマークでは、想定されるパッケージ名に加えて、すべての組み込みクエリで切り捨てられたパッケージ名を検索することで、この問題を回避しています。カスタムの
TraceMetric
実装やPerfettoSession.query
の他の直接呼び出し元は、Perfetto クエリのprocess.name LIKE "$packageName"
を(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
に変更することで、同じ動作を実装できます。(I5bf01、b/377565760)
バージョン 1.4.0-alpha04
2024 年 10 月 30 日
androidx.benchmark:benchmark-*:1.4.0-alpha04
がリリースされました。バージョン 1.4.0-alpha04 にはこれらの commit が含まれています。
新機能
- (試験運用版)セカンダリ ユーザーにインストールされたアプリ(ヘッドレス Android Auto デバイスのアプリなど)で、ベースライン プロファイルの生成とベンチマークを有効にします。このサポートは一部のシナリオでテストされていますが、機能しない場合はバグとしてお知らせください。(I9fcbe、b/356684617、b/373641155)
バグの修正
isProfileable
はベンチマーク ビルドで常にオーバーライドされるようになり、isDebuggable
もベンチマーク ビルドとnonMinified
(ベースライン プロファイル キャプチャ)ビルドの両方で常にオーバーライドされるようになりました。(I487fa、b/369213505)- API 28 より前の物理デバイスでのコンパイル検出を修正しました。これは、json
context.compilationMode
とandroidx.benchmark.requireAot=true
の動作に影響します(androidx.benchmark.requireAot=true
が誤ってスローされなくなりました)。(Ic3e08、b/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
を修正しました。(Ia0225、b/371642809) StartupMode.COLD
例外からのエラーの投機的修正:Package <packagename> must not be running prior to cold start!
。MacrobenchmarkScope.killProcess()
(各イテレーションの前に実行され、StartupMode.COLD
の動作を実装するために使用されるものを含む)は、アプリのプロセスがすべて停止したことを確認するまで待機します。(I60aa6、b/351582215)- 一部のルート化されたエミュレータで UNLOCKED_ エラーが表示される問題を修正しました。(Ic5117)
- このライブラリは、型使用である JSpecify nullness アノテーションを使用するようになりました。Kotlin を使用している場合、次のコンパイラ引数を使用して正しい使用法を適用する必要があります。
-Xjspecify-annotations=strict
(Kotlin コンパイラのバージョン 2.1.0 以降ではこれがデフォルトです)。(I7104f、b/326456246)
バージョン 1.4.0-alpha02
2024 年 10 月 2 日
androidx.benchmark:benchmark-*:1.4.0-alpha02
がリリースされました。バージョン 1.4.0-alpha02 には、これらの commit が含まれています。
API の変更
- Gradle タスク
lockClocks
とunlockClocks
を最上位で使用可能にするのではなく、ベンチマーク プロジェクトに移動しました。この変更は、プロジェクトの分離を損なうことなく、これらを最上位のアクションとして登録する方法がないため、必要でした。(I02b8f、b/363325823)
バグの修正
BaselineProfileRule
は、ブロックの最後に実行中の各プロセスにプロファイルをダンプするようシグナルを送信することで、マルチプロセス アプリのプロファイルを収集するようになりました。プロファイル ベースのコンパイルでブロードキャストするプロセスが正常に見つからない場合、コンパイルは失敗します。プロファイル データが内部にあることは想定されていないためです。また、ダンプの待機時間を制御するインストルメンテーション引数androidx.benchmark.saveProfileWaitMillis
を追加しました(I0f519、b/366231469)- Benchmark
1.3.2
から: Firebase Test Lab(FTL)がベースライン プロファイル Gradle プラグインからベースライン プロファイルまたは Macrobenchmark の結果ファイルを取得できない問題を修正しました。(I2f678、b/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 の変更
- 既存の試験運用版の
PerfettoConfig
引数からMacrobenchmarkRule.measureRepeated()
引数への移行が、新しい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.4
2025 年 3 月 26 日
androidx.benchmark:benchmark-*:1.3.4
がリリースされました。バージョン 1.3.4 にはこれらの commit が含まれています。
バグの修正
- Benchmark Baseline Gradle プラグインの Gradle プロジェクト分離の非互換性を修正しました。(b/404523257)
バージョン 1.3.3
2024 年 10 月 16 日
androidx.benchmark:benchmark-*:1.3.3
がリリースされました。バージョン 1.3.3 にはこれらの commit が含まれています。
バグの修正
- AVD デバイスにスペースが含まれている場合の
CollectBaselineProfileTask
を修正しました(Ia0225、b/371642809)
バージョン 1.3.2
2024 年 10 月 2 日
androidx.benchmark:benchmark-*:1.3.2
がリリースされました。バージョン 1.3.2 にはこれらの commit が含まれています。
バグの修正
- Firebase Test Lab(FTL)がベースライン プロファイル Gradle プラグインからベースライン プロファイルまたは Macrobenchmark の結果ファイルを取得できない問題を修正しました。(I2f678、b/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
を追加しました(I7c36e、b/349646646)。 - ラッパーを作成する代わりに、アプリによって作成された既存の
nonMinified…
とbenchmark…
を使用するように、ベースライン プロファイル Gradle プラグインを修正しました。(Ia8934、b/361370179) - エミュレータで
automaticGenerationDuringBuild
が有効になっている場合のjava.lang.AssertionError: ERRORS (not suppressed): EMULATOR
を修正しました。新しい引数は、テストをスキップするために使用されます。(If3f51、b/355515798) - マイクロベンチマークの最小化 - ベンチマーク ライブラリの ProGuard で
org.junit.runner.notification.RunListener
のサブクラスを保持(Ic8ed5、b/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
- UI スレッドのベンチマーク(Compose/View UI とやり取りするものなど)で、数秒間実行したときに ANR が発生しないように
measureRepeatedOnMainThread
を追加しました。 - ANR 回避の期限を超えると予想される場合、メソッド トレースはスキップされます。この動作を無効にするには、
androidx.benchmark.profiling.skipWhenDurationRisksAnr
を false に設定します(ANR が原因で CI の長時間実行で問題が発生する可能性があるため、CI 実行にはおすすめしません)。
- UI スレッドのベンチマーク(Compose/View UI とやり取りするものなど)で、数秒間実行したときに ANR が発生しないように
- 最小化
- 圧縮を有効にしたマイクロベンチマークを改善するために ProGuard ルールを埋め込みました
- ライブラリ モジュールでの縮小化/R8 には AGP 8.3 が必要です。
build.gradle
のandroid.buildTypes.release.androidTest.enableMinification
を使用して有効にできます。 - デッドコードの削除を防ぐために試験運用版の
BlackHole.consume()
API を追加しました(If6812、b/286091643)
- 指標
- 試験運用版の CPU イベント カウンタ機能(
perf_event_open
からの指標。プラットフォームのほとんどのバージョンで root が必要)、InstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
を介したアクセス(true
に設定可能)、androidx.benchmark.cpuEventCounter.events
(Instructions,CpuCycles
などに設定可能)。一部の userdebug エミュレータでサポートされるはずですが、利用可能なすべてのエミュレータでサポートがテストされていません
- 試験運用版の CPU イベント カウンタ機能(
1.2.0 以降の MACRObenchmark の変更
- マクロベンチマークのメソッド トレースをオーバーホールしました。
- メソッド トレースは
measureBlock
の期間にスコープ設定され、プロセスが複数回開始された場合は複数のセッションをキャプチャできます。 - 以前は、メソッド トレースは
StartupMode.COLD
ベンチマークでのみ機能し、ターゲット プロセスを再起動しないmeasureBlocks
の場合は何もキャプチャしませんでした。 - マクロベンチマークでメソッド トレースのフラッシュを修正し、低速のデバイスでもメソッド トレースを完全にキャプチャして有効にできるようにしました。(I6349a、b/329904950)
- メソッド トレースは
- プロセスが強制終了されたときに個々の
warmUp
イテレーション中に ART プロファイルを正しくダンプし、CompilationMode.Partial(warmup=N)
の測定精度を向上。(I17923) - シェーダー ブロードキャスト エラー メッセージを削除
- シェーダーのブロードキャストの失敗メッセージにデバッグの提案を追加
ProfileInstaller
1.3 を使用しないアプリのベンチマーク時にクラッシュを回避するため、シェーダーのドロップ動作をオーバーライドする 2 つの計測引数を追加: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
バリアントを追加しました。構成が正しくないと、組み込みの Metric クラスが失敗する可能性があります。(Idfd3d、b/309841164、b/304038384) - 干渉を減らすため、Macrobenchmark を実行する前にバックグラウンドの dexopt ジョブをキャンセルします。(I989ed)
- Macrobenchmark は、ターゲット アプリケーションが ART プロファイルをフラッシュするまで 1 秒間待機するようになりました(以前は 500 ミリ秒間待機していました)。(I85a50、b/316082056)
- TraceSectionMetric のオーバーホール
- 注: 以下の
TraceSectionMetric
の変更は、CI 使用時の出力に影響する可能性があり、不連続性が発生したり、解析が中断されたりする可能性があります。 - この指標のほとんどの用途は繰り返しイベントであり、first はこのような場合にデータを破棄するため、デフォルトは sum になりました
- カスタマイズ性が向上し、利用可能なモードが増えました
- モード名が指標出力名に埋め込まれるようになりました(Studio と JSON)。
Trace.{begin|end}AsyncSection
を使用して作成されたスライスをサポートするようになりました。
- 注: 以下の
- 指標
- 電源 -
PowerMetric.deviceSupportsHighPrecisionTracking
、PowerMetric.deviceBatteryHasMinimumCharge()
、PowerMetric.deviceSupportsPowerEnergy()
を追加 - 戻り値の型と一致するように、
Metric.getResult
の名前をgetMeasurements
に変更しました - すべての起動検出の失敗に log.w / 例外ラベルを追加しました。これにより、現在の動作(一部のエラーはスローされ、他のエラーは起動の検出に失敗する)は変更されませんが、よりわかりやすくなります。一般に、
Log.w()
で起動指標のレポートに失敗するものは、フレーム以外のイベントが欠落しているものです。起動が検出されたときに例外がスローされますが、フレーム タイミング情報(UI/RT スライスから)は除きます。(Id240f、b/329145809) FrameTimingMetric
にframeCount
測定を追加しました。これにより、生成されるフレーム数の変化(新しいアニメーションの追加、無効化の問題の修正)によって測定値が変化するシナリオの検出に役立ちます。(I1e5aa)frameOverrunMs
が利用可能な場合にトラッキングに使用する推奨指標であることと、その理由をドキュメントで明確にしました。(I18749、b/329478323)- トレースの最初と最後にある終了していないフレームがペアになり、1 つの非常に長いフレームとして誤って報告される問題を修正しました。(I39353、b/322232828)
- フレームが生成されない場合の
FrameTimingMetric
エラーを改善し、指標の解析に失敗した場合は常にトレースへのリンクを出力して、問題の診断を支援します。(I956b9) FrameTimingMetric
でフレーム ID の解析に失敗するクラッシュ(特に一部の OEM デバイス)を修正しました。(Ia24bc、b/303823815、b/306235276)FrameMetrics
のチェックの厳密さを緩和し、エラー メッセージに詳細を追加しました。(Iadede)
- 電源 -
ベースライン プロファイルのキャプチャ / 1.2.0 以降の Gradle プラグインの変更
- AGP の推奨最大バージョンを 9.0.0-alpha01 に引き上げました。
mergeArtProfile
タスクとmergeStartupProfile
タスクが常にベースライン プロファイルの生成を待機するようにします。(I623d6、b/343086054)- ベースライン プロファイルの生成が成功すると、変更内容の概要が出力されます。(I824c8、b/269484510)
- 警告を無効にする DSL を追加しました(Ic4deb、b/331237001)
automaticGenerationDuringBuild
がオフの場合に、ベンチマークで生成されたベースライン プロファイルが使用されるように修正しました(Ic144f、b/333024280)。BaselineProfile
Gradle プラグイン プロパティのオーバーライドを修正し、nonMinified
またはベンチマーク ビルドタイプをカスタマイズする際にベースライン プロファイルの生成とベンチマークを有効にしました。(Ib8f05、b/324837887)- AGP 8.3.0-alpha15 より前の AAR にライブラリのベースライン プロファイルを含めるための修正。(I1d2af、b/313992099)
- 生成タスクの最後にベースラインと起動プロファイルの出力 URL を修正しました。(I802e5、b/313976958)
1.2.0 以降のその他の重要な変更
- トレース キャプチャ
- エラーからログに記録された警告に perfetto を起動する際の EXITCODE 2 エラーを軽減
- ベンチマークで AIDL トレースをデフォルトで有効化(API 28 が必要)(Ia0af2、b/341852305)
- ベンチマークで porter タグのトレースをデフォルトで有効化。たとえば、ウェイクロック トレースポイントをキャプチャします。(Icfe44、b/286551983)
- トレース キャプチャの開始タイムアウトを延長し、低速デバイスでトレースを開始する際のクラッシュを回避しました(I98841、b/329145808)
- JSON、textproto、proto バイナリ(デコードされていない)バリアントを含む公開 API
PerfettoTraceProcessor.Session.queryMetrics
API を追加しました。これにより、TraceProcessor
に組み込まれた指標をクエリできます(I54d7f、b/304038382) - Perfetto トレース レコードでブロックの開始を有効にして、トレースの開始時にデータが欠落するリスクを軽減します。API 33 以上でのみサポートされます。(Ie6e41、b/310760059)
- JSON 出力
- JSON 出力のベンチマーク コンテキストに、追加情報を追加しました。
context.artMainlineVersion
- Art Mainline モジュールの整数バージョン(デバイスに存在する場合は-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
リストを追加しました(I05ddd、b/332604449) - ベンチマーク モジュールで Android Test Orchestrator を使用すると、モジュールごとの出力 JSON ファイルが繰り返し上書きされるため、警告を追加しました。(Ia1af6、b/286899049)
- ファイル名が 200 文字を超える場合は例外をスローして、ファイルの書き込みや後処理の際にクラッシュが発生するのを防ぎます。(I4a5ab)
- JSON 出力のベンチマーク コンテキストに、追加情報を追加しました。
バージョン 1.3.0-rc01
2024 年 8 月 7 日
androidx.benchmark:benchmark-*:1.3.0-rc01
がリリースされました。バージョン 1.3.0-rc01 には、これらの commit が含まれています。
バグの修正
androidx.benchmark.cpuEventCounter
が非命令イベントに対して破損した値を生成する問題を修正しました(I7386a、b/286306579)- 指標の優先順位を尊重するように
resumeTiming
/runWithTimingDisabled
を修正し、優先度の低い指標の一時停止/再開が優先度の高い指標の結果に与える影響を大幅に軽減しました。たとえば、cpuEventCounter.enable
計測引数を使用して CPU パフォーマンス カウンタを使用している場合、一時停止/再開が発生しても timeNs が大幅に減少することはなくなります。(I39c2e、b/286306579、b/307445225) - スタック サンプリングの変換をメインスレッドから移動することで、スタック サンプリングが
measureRepeatedOnMainThread
のメインスレッドのハード タイムアウトを引き起こす可能性を減らしました。(I487a8、b/342237318) - AGP 7.3 以降(R8 バージョン 3.3 など)で R8 を使用する場合、および AGP 8.1 以降(D8 バージョン 8.1 など)ですべてのビルドで、API モデリングを介して自動的に行われるため、新しいプラットフォーム API へのアクセスの手動でのアウトライン設定を削除しました。AGP を使用していないクライアントは、D8 バージョン 8.1 以降に更新することをおすすめします。詳しくは、こちらの記事をご覧ください。(I9496c、b/345472586)
- パッケージ名をインストル引数として送信する 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 を追加しました。(If6812、b/286091643) - マイクロベンチマークが正しくスローされるようになり、メソッド トレースが測定に干渉しなくなりました。これは、メソッド トレースが強制的にオンになっている(インストルメンテーション引数または
MicrobenchmarkConfig
経由)特定のデバイスで、メソッド トレース後に測定が試行された場合に発生します。影響を受けるデバイスは、API 26 ~ 30、またはこの干渉の影響を受ける特定の ART Mainline モジュール バージョンを実行しており、ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
を介して実行時に検出できます。(Iafb92、b/303660864)
バグの修正
- 推奨される最大 AGP バージョンを 9.0.0-alpha01 に引き上げました。(I5bbb0)
- ベンチマーク コンテキストにコンパイル モードを追加しました(If5612、b/325512900)
- デフォルトで AIDL トレースを有効化(API 28 が必要)しました(Ia0af2、b/341852305)
- JSON 出力のベンチマーク コンテキストに、追加情報を追加しました。
context.artMainlineVersion
- Art Mainline モジュールの整数バージョン(デバイスに存在する場合はそのバージョン、存在しない場合は -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()
に変更し、PerfettoTrace
やPerfettoConfig
などを使いやすくします。(Icdae3、b/341851833) mergeArtProfile
タスクとmergeStartupProfile
タスクが常にベースライン プロファイルの生成を待機するようにします。(I623d6、b/343086054)- バリアントを有効にするかどうかを判断する際に、バリアントの有効状態を考慮します。(I5d19e、b/343249144)
- perfetto トレース プロセッサのデフォルトの開始タイムアウトを増やしました。(I87e8c、b/329145808)
バージョン 1.3.0-alpha05
2024 年 5 月 14 日
androidx.benchmark:benchmark-*:1.3.0-alpha05
がリリースされました。バージョン 1.3.0-alpha05 にはこれらの commit が含まれています。
バグの修正
- マクロベンチマーク指標がすべてのイテレーションでゼロ値を返す場合に、より明確な例外をスロー(Iab58f、b/314931695)
- リスナー ルールやその他の観測された警告 / エラーのサポートなど、マイクロベンチマークの ProGuard ルールに追加の回避策ルールを追加しました。(I14d8f、b/329126308、b/339085669)
- メソッド トレースは Macrobenchmark の別のフェーズとして実行されるため、測定に影響しなくなりました。(If9a50、b/285912360、b/336588271)
- シェーダー ブロードキャストの失敗メッセージをドロップするデバッグの提案を追加しました。(I5efa6、b/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
バリアントを追加しました。構成が正しくないと、組み込みの Metric クラスが失敗する可能性があります。(Idfd3d、b/309841164、b/304038384) - わかりやすくするために
PowerMetric.deviceSupportsPowerEnergy
の名前をPowerMetric.deviceSupportsHighPrecisionTracking
に変更しました(I5b82f)。 - デバイスの電力測定機能に基づいてベンチマークを変更またはスキップできるように、
PowerMetric.deviceBatteryHasMinimumCharge()
とPowerMetric.deviceSupportsPowerEnergy()
を追加しました。(I6a591、b/322121218)
バグの修正
- 以前のベースライン プロファイルとの比較を追加しました(I824c8、b/269484510)
- 警告を無効にする DSL を追加しました(Ic4deb、b/331237001)
- ベンチマーク バリアントが無効になっている場合、例外を情報ログに変更しました(I8a517、b/332772491)
- Macrobenchmark のメソッド トレースをキャプチャする処理を簡素化し、実際の
measureBlock()
の期間にスコープを設定します。以前は、ターゲット プロセスの起動時に開始され、コールド スタートのみをサポートしていました(Iee85a、b/300651094)。 - perfetto トレース プロセッサの起動が遅い場合にクラッシュしないようにしました(I98841、b/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 に組み込まれた指標をクエリできます(I54d7f、b/304038382) - プロファイリング トレース(perfetto、メソッド トレースなど)のツールを簡単に作成できるように、JSON 出力に
profilerOutput
を追加しました。(I05ddd、b/332604449) - ベンチマーク Perfetto 構成に電源タグを追加しました。たとえば、ウェイクロック トレースポイントをキャプチャします。(Icfe44、b/286551983)
- inst 引数
androidx.benchmark.profiling.skipWhenDurationRisksAnr
を追加しました。予想される所要時間が ANR を引き起こす可能性がある場合にメソッド トレースのスキップを回避するために false に設定できます。CI 実行では回避することを強く推奨します。 - 試験運用版の inst 引数
androidx.benchmark.profiling.perfCompare.enable
を追加しました。これを true に設定すると、測定フェーズとプロファイリング フェーズの間で比較タイミングが実行されます。メソッド トレースのオーバーヘッドの評価などに役立ちます。(I61fb4、b/329146942)
API の変更
TraceSectionMetric.Mode
を sealed クラスに変更し、when ステートメントの網羅性を損なうことなく将来の拡張を可能にしました(I71f7b)TraceSectionMetric.Mode.Average
と.Count
を追加し、引数の順序を変更して、より一般的な引数(モード)が引数リストの先頭に配置されるようにしました。これにより、パラメータ名を指定する必要性が軽減されました。(Ibf0b0、b/315830077、b/322167531)- 戻り値の型に合わせて
Metric.getResult
の名前をgetMeasurements
に変更しました(I42595)
バグの修正
automaticGenerationDuringBuild
がオフの場合に、ベンチマークで生成されたベースライン プロファイルが使用されるように修正しました(Ic144f、b/333024280)。BaselineProfile
Gradle プラグイン プロパティのオーバーライドを修正し、nonMinified
またはベンチマーク ビルドタイプをカスタマイズする際にベースライン プロファイルの生成とベンチマークを有効にしました。(Ib8f05、b/324837887)- マクロベンチマークでメソッド トレースのフラッシュを修正し、低速のデバイスでもメソッド トレースを完全にキャプチャして有効にできるようにしました。(I6349a、b/329904950)
- Perfetto トレース レコードでブロックの開始を有効にして、トレースの開始時にデータが欠落するリスクを軽減します。API 33 以上でのみサポートされます。(Ie6e41、b/310760059)
- ベンチマーク モジュールで Android Test Orchestrator を使用すると、モジュールごとの出力 JSON ファイルが繰り返し上書きされるため、警告を追加しました。(Ia1af6、b/286899049)
- Studio 出力の整合性を保つため、デバイスのロケールを無視して、強制的に ','(カンマ)を 1,000 単位の区切り文字として使用(I3e921、b/313496656)
TraceSectionMetric
がTrace.{begin|end}AsyncSection
を使用して作成されたスライスをサポートするようになりました。(I91b32、b/300434906)- すべての起動検出の失敗に log.w / 例外ラベルを追加しました。これにより、現在の動作(一部のエラーはスローされ、他のエラーは起動の検出に失敗する)は変更されませんが、よりわかりやすくなります。一般に、
Log.w()
で起動指標のレポートに失敗するものは、フレーム以外のイベントが欠落しているものです。起動が検出されたときに例外がスローされますが、フレーム タイミング情報(UI/RT スライスから)は除きます。(Id240f、b/329145809) - 干渉を減らすため、Macrobenchmark を実行する前にバックグラウンドの dexopt ジョブをキャンセルします。(I989ed)
FrameTimingMetric
にframeCount
測定を追加しました。これにより、生成されるフレーム数の変化(新しいアニメーションの追加、無効化の問題の修正)によって測定値が変化するシナリオの検出に役立ちます。(I1e5aa)frameOverrunMs
が利用可能な場合にトラッキングに使用する推奨指標であることと、その理由をドキュメントで明確にしました。(I18749、b/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 の縮小/最適化を有効にします。これにより、ワークロードに応じてパフォーマンスが大幅に向上します。(I738a3、b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
バグの修正
- メソッド トレースの警告がマイクロベンチ出力とは別の行に表示されるように修正(I0455c、b/328308833)
バージョン 1.3.0-alpha01
2024 年 2 月 21 日
androidx.benchmark:benchmark-*:1.3.0-alpha01
がリリースされました。バージョン 1.3.0-alpha01 に含まれる commit については、こちらをご覧ください。
API の変更
- 不要な単語「should」を避けるため、
MicrobenchmarkConfig
ブール値パラメータの名前を変更しました(Ia8f00、b/303387299) BenchmarkRule.measureRepeatedOnMainThread
を追加しました。これにより、メインスレッドのベンチマーク(View や Compose UI に触れるものなど)で、特に CI の大規模なスイートで ANR がトリガーされるのを回避できます。(I5c86d)FrameTimingGfxInfoMetric
を追加しました。これは、Perfetto トレースから抽出するのではなく、プラットフォームから直接取得した測定値を使用するFrameTimingMetric
の試験運用版の代替実装です。(I457cb、b/322232828)- 個々の
warmUp
イテレーション中に ART プロファイルをダンプする機能を追加しました。(I17923) TraceSectionMetric
API の変更点:Mode.Min
、Mode.Max
を追加- 指標ラベルとしてセクション名をオーバーライドするラベル引数を追加
- 指標の意味を明確にするため、出力にモード名を追加
- この指標のほとんどの使用は繰り返しイベントを対象としているため、デフォルトを合計に変更しました。CI の使用でこの変更に注意してください。不連続性が発生したり、解析が中断したりする可能性があります。(Ic1e82、b/301892382、b/301955938)
バグの修正
- 指定された管理対象デバイスが存在しない場合のベースライン プロファイル Gradle プラグインのエラー メッセージを改善しました(Idea2b、b/313803289)。
- AGP 8.3.0-alpha15 より前の AAR にライブラリ ベースライン プロファイルを含めるための修正(I1d2af、b/313992099)
- 生成タスクの最後にベースライン プロファイルと起動プロファイルの出力 URL を修正しました(I802e5、b/313976958)
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
の修正を試みるため、データソースのタイムアウトを調整しました(I8dc7d、b/323601788)ProfileInstaller
1.3 を使用しないアプリのベンチマーク時にクラッシュを回避するため、シェーダーのドロップ動作をオーバーライドする 2 つの計測引数を追加: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)
- トレースの最初と最後にある終了していないフレームがペアになり、1 つの非常に長いフレームとして誤って報告される問題を修正しました。(I39353、b/322232828)
- API 30 ~ 33 でパッケージを再インストールする際に API 30 以降で
--skip verification
を使用して、ユーザービルドの ART プロファイルをクリアします。これにより、一部のクラスのデバイスでエラーが発生する原因となる Play プロテクトの警告を回避できます。(Ic9e36) - System UI やランチャーなどのシステムアプリでないアプリを強制終了するには、
am force-stop
を使用します。(I5e028) - Macrobenchmark は、ターゲット アプリケーションが ART プロファイルをフラッシュするまで
1 second
を待つようになりました(以前は500 ms
を待っていました)。(I85a50、b/316082056) - フレームが生成されない場合の
FrameTimingMetric
エラーを改善し、指標の解析に失敗した場合は常にトレースへのリンクを出力して、問題の診断を支援します。(I956b9) FrameTimingMetric
でフレーム ID の解析に失敗するクラッシュ(特に一部の OEM デバイス)を修正しました。(Ia24bc、b/303823815、b/306235276)FrameMetrics
のチェックの厳密さを緩和し、エラー メッセージに詳細を追加しました。(Iadede)
バージョン 1.2
バージョン 1.2.4
2024 年 4 月 17 日
androidx.benchmark:benchmark-*:1.2.4
がリリースされました。バージョン 1.2.4 にはこれらの commit が含まれています。
バグの修正
- ベンチマーク バリアントでベースライン プロファイルの srcset が設定されない問題を修正しました。また、ライブラリの
automaticGenerationDuringBuild
が原因で循環依存が発生する問題も修正しています。(I28ab7、b/333024280) - System UI やランチャーなどのシステムアプリでないアプリを強制終了するには、
am force-stop
を使用します。これは、プロセスの強制終了が完全に成功しなかったためにStartupMode.COLD
ベンチマークが「Package $package must not be running prior to cold start!」でクラッシュする問題を修正します。(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/2843918、aosp/2853665、b/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+ でのベースライン プロファイルの収集を修正しました(Id1392、b/277645214)
Macrobenchmark
- コンパイル
- Macrobenchmark は、コンパイルのたびにコンパイル状態を完全にリセットするようになりました。Android 14 より前のバージョンでは APK を再インストールする必要があります。測定対象の状態(ユーザー ログインなど)を保持する場合は、Android 14 以降でのベンチマークを強くおすすめします。
- アプリのコンパイルを個別に制御し、
CompilationMode.Ignore()
または計測引数を使用してコンパイルをスキップすることで、この問題を回避することもできます。
インストルメンテーション引数
androidx.benchmark.dryRunMode.enable
計測引数のサポート(すでにマイクロベンチマークで利用可能)を追加して、検証実行を高速化(ベンチマークの作成時や presubmit など)androidx.benchmark.profiling.mode=StackSampling
とMethodTracing
のサポート。androidx.benchmark.enabledRules
を追加して、ベースライン プロファイルとマクロベンチマークのルールテストをランタイムでフィルタできるようにしました- tracing-perfetto でのトレース(Compose の再コンポジションのトレースなど)を有効にする
androidx.benchmark.perfettoSdkTracing.enable
引数を追加しました。StartupMode.COLD
と併用すると、アプリの起動時にトレース ライブラリが読み込まれて有効になるため、タイミングに大きな影響が出ます。
要件
- Macrobenchmark では、プロファイルのキャプチャ / リセットとシェーダー キャッシュの消去を有効にするために、ターゲット アプリで
ProfileInstaller
1.3.0 以降が必要になりました。
- Macrobenchmark では、プロファイルのキャプチャ / リセットとシェーダー キャッシュの消去を有効にするために、ターゲット アプリで
新しい試験運用版の指標 API
- 試験運用版の
TraceSectionMetric
を追加しました。これにより、アプリのtrace("") {}
ブロックから単純なタイミングを抽出したり、PerfettoTraceProcessor
の完全なクエリ機能を利用するための TraceMetric を使用したりできます。 - 電力使用量情報を取得するための試験運用版の
PowerMetric
を追加しました - ページ フォールトをカウントする試験運用版
MemoryCountersMetric
を追加 - システム トレース(Perfetto トレース)から指標を抽出するために内部的に使用される試験運用版の
PerfettoTraceProcessor
API を追加しました
- 試験運用版の
修正
- 複数の APK(App Bundle など)からインストールされたアプリからプロファイルをインストールまたは抽出する際に発生するクラッシュを修正しました。
FrameTimingMetric
がフレーム ID の不整合があるフレーム(一般的に、API 31 以降でのリップル中のフレーム)を無視する問題を修正しました(I747d2、b/279088460)- 64 MB を超えるトレースの解析エラーを修正しました(Ief831、b/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 プラグインが認識できないように名前が変更されていました。(I8dbcc、b/303034735、b/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 トレースの初期化に失敗した場合に、例外(解決策の手順を含む)がスローされるようになりました。(I6c878、b/286228781)
- ART メソッド トレースを perfetto 形式に変換する際の OOM クラッシュを修正(I106bd、b/296905344)
- (Macrobenchmark)Studio テスト出力でリンクされたメソッド トレース ラベルを明確化し、メソッド トレース ファイル名をデバイス/ホストで一意になるように修正しました。これにより、複数のベンチマークを実行しても上書きされなくなります。(I08e65、b/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
をフィルタするようにしました(Ia219b、b/292208786)。
バグの修正
fullTracing.enable
インストルメンテーション引数の名前をperfettoSdkTracing.enable
に変更し、アーティファクト名やその他のリファレンスとの整合するようにしました。fullTracing.enable
は引き続き代替手段として機能します(I7cc00)。- Benchmark ライブラリの内部トレースポイント(microbenchmark ループ / フェーズ トレースなど)は Android Studio のシステム トレース ビューアに表示され、Perfetto の適切なプロセスにネストされるようになりました(I6b2e7、b/293510459)。
- API 31 以降での macrobenchmark の NOT-PROFILEABLE エラーを削除し、eng または userdebug のユーザーに root 権限のあるデバイスでのプロファイル可能チェックをスキップするようにしました(I2abac、b/291722507)。
- DEX レイアウトの最適化を使用する場合に、起動プロファイル ルールもベースライン プロファイル ルールとみなされるようになりました(aosp/2684246、b/293889189)。
バージョン 1.2.0-beta02
2023 年 7 月 26 日
androidx.benchmark:benchmark-*:1.2.0-beta02
がリリースされました。バージョン 1.2.0-beta02 に含まれる commit については、こちらをご覧ください。
API の変更
- microbench カスタム指標と設定(プロファイラ、トレースなど)用の試験運用版の API を追加しました(I86101、b/291820856)。
バグの修正
- API 26 / 28 ARM64 エミュレータでの最近の修正に従い、OS がトレース用に正しく設定されていない場合、macrobench でエラーが報告されます(I0a328、b/282191686)。
- コンパイルのリセットエラーに関して、一部のエミュレータでは最近この問題が修正されているため、エミュレータの更新を推奨する内容を追加しました(I8c815、b/282191686)。
androidx.test.uiautomator:uiautomator:2.2.0
をimplementation
依存関係ではなく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 出力の先頭の空白の回避策を適用しました(Ia61d0、b/227205461、b/286306579、b/285912360)。
FrameTimingMetric
のコメントを修正しました。下位指標はframeDurationCpuMs
という名前が付けられます(Ib097f、b/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
をサポートするようになりました(I7ad37、b/285912360)。 - Microbenchmark プロファイリングを別のフェーズに移動し、置き換わるのではなく測定の後で順番に発生するようにしました。
MethodTracing
トレース セクションがある場合はキャプチャされた Perfetto トレースに含まれるようになりました(I9f657、b/285014599)。 Mode.Sum
を使って回数の計測をTraceSectionMetric
に追加しました(Ic121a、b/264398606)。
バージョン 1.2.0-alpha15
2023 年 6 月 7 日
androidx.benchmark:benchmark-*:1.2.0-alpha15
がリリースされました。バージョン 1.2.0-alpha15 に含まれる commit については、こちらをご覧ください。
新機能
- 試験運用版の
MemoryUsageMetric
をターゲット アプリのメモリ使用量のトラッキング用に追加しました(I56453、b/133147125、b/281749311)。 PerfettoTrace.record
でのフルカスタムの Perfetto 設定のサポートを追加しました(If9d75、b/280460183)。- ベースライン プロファイル生成をスキップするプロパティを追加しました。使用方法:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
(I37fda、b/283447020)。
API の変更
collectBaselineProfile
API は常に安定版ベースライン プロファイルを生成します。collectStableBaselineProfile
API は削除されたため、collectBaselineProfile
を使用する必要があります(I17262、b/281078707)。BaselineProfileRule
のfilterPredicate
引数を non-null に変更し、同等のデフォルト値によりデフォルト フィルタの動作がドキュメントでより明確になるようにしました(I3816e)。
バグの修正
- ランタイムの大部分を占める
dryRunMode
でのIsolationActivity
と Perfetto トレースを無効にして、パフォーマンスを大幅に改善しました(Ie4f7d)。 - インストルメンテーション テスト引数の
androidx.benchmark.profiling.mode=StackSampling
とandroidx.benchmark.profiling.sampleFrequency
を使用した、Macrobenchmarks でのコールスタック サンプリングをサポートします(I1d13b、b/282188489)。 - Android U(API 34)とエミュレータでのシェーダーの削除時に発生するクラッシュを解消しました(I031ca、b/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
のアニメーション化の際に(リップル時など)多数のフレームが無視されることが発生していました(I747d2、b/279088460)。 - 64 MB よりも大きいトレースでのトレース プロセッサの解析を修正しました(Ief831、b/269949822)。
pm dump-profiles
コマンドの異なる出力による、Android U でのベースライン プロファイル生成エラーを修正しました(Id1392、b/277645214)。- GPU クロックロック スクリプトを修正し、文字列を正しく比較できるようにしました(I53e54、b/213935715)。
バージョン 1.2.0-alpha13
2023 年 4 月 5 日
androidx.benchmark:benchmark-*:1.2.0-alpha13
がリリースされました。バージョン 1.2.0-alpha13 に含まれる commit については、こちらをご覧ください。
API の変更
- 今後の起動プロファイル機能をサポートするため、ベースライン プロファイル生成時にプロファイル タイプ パラメータを追加しました(Ie20d7、b/275093123)。
- 新しい試験運用版
TraceMetric
API を追加し、Perfetto トレースのコンテンツに基づいてフルカスタムの指標を定義できるようにしました(I4ce31、b/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 トレースデータに基づく、フルカスタム指標に向けた取り組みです(I2659e、b/219851406)。
バージョン 1.2.0-alpha11
2023 年 3 月 8 日
androidx.benchmark:benchmark-*:1.2.0-alpha11
がリリースされました。バージョン 1.2.0-alpha11 に含まれる commit については、こちらをご覧ください。
バグの修正
- 複数の APK の App Bundle からプロファイルを再インストールまたは抽出するときに発生する
MacrobenchmarkRule
とBaselineProfileRule
でのクラッシュを解消しました(I0d8c8、b/270587281)。
バージョン 1.2.0-alpha10
2023 年 2 月 22 日
androidx.benchmark:benchmark-*:1.2.0-alpha10
がリリースされました。バージョン 1.2.0-alpha10 に含まれる commit については、こちらをご覧ください。
新機能
- Android 14 以降では、新しいプラットフォーム機能が導入されたため、Macrobenchmark がターゲット アプリを再インストールしてコンパイル状態をリセットすることはなくなりました。以前は、ユーザーに root 権限のあるデバイスを用意するか、各ベンチマークの実行前にアプリの状態(ユーザーのログイン情報など)がすべて削除されるようにする必要がありました。(I9b08c、b/249143766)
バグの修正
- コンパイルのスキップが原因となって空のプロファイルでクラッシュが発生しないよう、
DryRunMode
を修正しました。代わりに、反復処理を 1 回実行してプロファイルを抽出し、確実にキャプチャができるようにします。(I2f05d、b/266403227) - 古い API レベルで電力統計データの有無を確認する際に発生する
PowerMetric
のクラッシュを修正しました。(5faaf9、b/268253898)
バージョン 1.2.0-alpha09
2023 年 1 月 11 日
androidx.benchmark:benchmark-*:1.2.0-alpha09
がリリースされました。バージョン 1.2.0-alpha09 に含まれるコミットについては、こちらをご覧ください。
バグの修正
None
をandroidx.benchmark.enabledRules
インストルメンテーション引数に渡す操作を有効にし、すべてのベンチマーク / ベースライン プロファイルの生成を無効にしました。(I3d7fd、b/258671856)- アプリ モジュール(つまり、non-self-instrumenting test APK)での
PerfettoTrace
キャプチャの問題を修正しました。(I12cfc) - Studio 出力でのベースライン プロファイルの adb pull 引数の順序を修正しました。(I958d1、b/261781624)
- macrobenchmark を実行しようとしたときなど、arm emulator api 33 が正しく認識され、警告が正しく出力されるようになりました。(69133b、b/262209591)
- Macrobenchmark でバッテリー非搭載デバイスでのバッテリー残量チェックをスキップします。(fe4114、b/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
を使用してベースライン プロファイルを生成するときに、出力ファイル名のプレフィックスを指定する機能を追加しました。(I7b59f、b/260318655)
バグの修正
- ファイル出力の書き込みの安全性を改善しました。これにより、特に API 21 / 22 で、出力ファイルの書き込みと追加が通知なく行われるのを防止できます。(If8c44、b/227510293)
- ファイルを正しく作成して配置するように
simpleperf
トレース出力を修正しました。これにより、Gradle によるファイルの pull が失敗するという問題もより全般的に解決されます。(I12a1c、b/259424099) - profileinstaller が古すぎる場合に出力される profileinstaller のエラー メッセージを改善しました。サポートされていないというメッセージの代わりに、API 31 から 33 でベースライン プロファイルを測定するには profileinstaller バージョンの更新(1.2.1)が必要である旨が表示されるようになりました。(Ia517f、b/253519888)
- 複数のシェルコマンドの失敗に対する、出力には API 23 以下が必要というエラー メッセージを修正しました。Perfetto キャプチャ バイナリのセットアップの失敗や、トレース キャプチャの失敗などが該当します(Ib6b87、b/258863685)
- 生成されたプロファイル ルールを自動的に並べ替え、時間の経過とともに変更するようにし、変更の数を最小限に抑えます(プロファイル ルールをソース管理にチェックインする場合)。(Ie2509)
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
というメッセージが表示される、Android 13(API 33)より前のルート権限のないビルドで発生するクラッシュを修正しました(I6c245、b/259508183)
既知の問題 - まだリリースされていない profileinstaller マニフェストのブロードキャスト レジストリがないことが原因で MacrobenchmarkScope.dropShaderCache()
がクラッシュすることがあります。(I5c728、b/258619948)profileinstaller: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 を追加しました。(Ife601、b/220183779) - シェーダー キャッシュを実際に削除できるように
MacrobenchmarkScope.dropShaderCache()
を修正しました。これにより、反復処理を実施するごとにシェーダーが適切にクリアされるようになるため、StartupMode.COLD
のベンチマークから約 20 ms のノイズが除去されます。以前は、シェーダー キャッシュがウォームアップ中に発生する可能性が高かったため、ウォームアップの反復処理を使用したPartial
のコンパイルでは速さの数値が正しく報告されていませんでした。この修正には、ユーザーに root 権限のあるデバイスか、またはターゲット アプリでのprofileinstaller:1.3.0-alpha02
の使用が必要になります。ProfileInstaller
ライブラリの API の変更について詳しくは、ProfileInstaller 1.30-alpha02 のページをご覧ください。(Ia5171、b/231455742) TraceSectionMode("label", Mode.Sum)
を追加しました。これにより、同じラベルの複数のトレース セクションにかかった合計時間を測定できるようになりました。たとえばTraceSectionMetric("inflate", Mode.Sum)
は、インフレーションにかかった Macrobenchmark での合計時間の指標inflateMs
を報告します。また、API 29 の要件も削除しました。これは、TraceSectionMetric
がandroidx.tracing.Trace
と連携して低いレベルの API レベルに戻り、ターゲット アプリ内でforceEnableAppTracing
が使用されるためです。(Id7b68、b/231455742)
バグの修正
- すべての出力 / エラーを検証することで、すべての内部シェルコマンドの安全性を改善しました。(I5984d、b/255402908、b/253094958)
- ベースライン プロファイルの
adb pull
コマンドでデバイスを指定することによって、複数のデバイス(最大 1 つのエミュレータ)が接続されている場合に pull コマンドを簡単にコピーできるようにしました。(I6ac6c、b/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 を必要とせず、試験運用版ではなくなりました。(Ie0a7d、b/250083467、b/253094958)- この変更により、root 権限のないデバイスでアプリのプロファイルをディスクにフラッシュする方法も修正されますが、ターゲット アプリの profileinstaller の依存関係を更新する必要があります。
- root 権限のないデバイスで
BaselineProfileRule
またはCompilationMode.Partial(warmupIterations)
を使用するには、androidx.profileinstaller.profileinstaller:1.3.0-alpha01
を使用するようにターゲット アプリも更新する必要があります。これにより、プロファイルをディスクに正しくフラッシュできるようになり、コンパイルや抽出が可能となります。
バグの修正
- API 33 以上での
SampledProfiling
のクラッシュを修正しました。(I40743、b/236109374)
バージョン 1.2.0-alpha05
2022 年 10 月 5 日
androidx.benchmark:benchmark-*:1.2.0-alpha05
がリリースされました。バージョン 1.2.0-alpha05 に含まれる commit については、こちらをご覧ください。
バグの修正
- ベンチマークがキャプチャしたトレースについて、Studio システム トレース ビューアのフレームの内訳を修正しました。(I3f3ae、b/239677443)
FrameTimingMetric
を修正し、FrameOverrun
を 29 ではなく API 31 を必須としてリストするようにしました。(I716dd、b/220702554)BaselineProfileRule
で反復処理を設定し、ターゲット パッケージがインストールされていない場合は明確にスローされるようにしました(MacrobenchmarkRule の場合はすでに対応済みです)。(Ic09a3、b/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 ファイル出力が無効になります。(Ib51b4、b/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()
、アプリ内アクティビティに基づくナビゲーション、シェルコマンドなどから起動を取得できるということです。(Ia2de6、b/245414235) - フレーム検出の基準を下げることで、
startActivityAndWait
がエミュレータでの起動完了を待機しようとしてタイムアウトするバグを修正しました。(Ibe2c6、b/244594339、b/228946895)
バージョン 1.2.0-alpha03
2022 年 9 月 7 日
androidx.benchmark:benchmark-*:1.2.0-alpha03
がリリースされました。バージョン 1.2.0-alpha03 に含まれる commit については、こちらをご覧ください。
新機能
BenchmarkRule
/JUnit4
とは別に、BenchmarkState
を個別に利用するための試験運用版 API を追加しました。(Id478f、b/228489614)
バグの修正
startActivityAndWait
に Leanback のフォールバック機能を追加しました。(01ed77、b/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
に設定されます(ベースライン プロファイルの生成中を除く)。この設定は、オプションのブール値引数を使用してオーバーライドできます。(02cce9、b/241214097)
バグの修正
- システムアプリのベースライン プロファイルの生成をサポートしました。(I900b8、b/241214097)
- root 権限のないデバイスでの ODPM 電力指標のチェックをサポートしました。(a38c78、b/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
の生成のみを行う場合などに便利です。カンマ区切りのリストもサポートされます。(I756b7、b/230371561)Macrobenchmark の build.gradle の例を示します。
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
または、Gradle コマンドラインから次のコマンドを実行します。
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
API の変更
- ベンチマークでエネルギーと電力のタスクを測定できるように、新しい
PowerMetric
を追加しました。(I9f39b、b/220183779) - プロファイルのリセットとコンパイルをスキップする新しいコンパイル モード
CompilationMode.Ignore
を追加しました。(Ibbcf8、b/230453509) - 出力ファイルをパッケージ名でフィルタする新しいパラメータを
BaselineProfileRule#collectBaselineProfile
に追加しました。(If7338、b/220146561) - デベロッパーがデバイスを放電して消費電力を測定できるようにしました。(I6a6cb)
MacrobenchmarkScope
にシェーダーのキャッシュを消去する機能を追加しました。(I32122)- デベロッパーが指標タイプと目的のサブシステム カテゴリの詳細の表示を構成できるようにしました。(I810c9)
- これまでは、サポートされていないデバイスでベンチマークが実行されると、
UnsupportedOperationException
がスローされていました。現在は、サポートされていないデバイスで指標が使用されている場合にのみ、UOE が発生します(PowerMetric.configure
など)。(I5cf20、b/227229375) - マクロベンチマークでシステム カテゴリごとの総消費電力と総消費エネルギーを測定できるように、
TotalPowerMetric
とTotalEnergyMetric
を追加しました。(I3b26b、b/224557371)
バグの修正
- ルート権限のないビルドのマクロベンチマーク間でコンパイル済みメソッドが正しくリセットされない問題を修正しました。残念ながら、反復処理ごとに APK を再インストールする必要があります。それにより、マクロベンチマークごとにアプリデータが消去されます。(I31c74、b/230665435)
- API 21 / 22 で記録を行う際のクラッシュを修正しました。(If7fd6、b/227509388、b/227510293、b/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 以降の重要な変更
Jetpack Macrobenchmark のサポート: 起動やスクロールなど、アプリ全体の操作を測定でき、トレースのキャプチャとトレース セクションの測定を行うための機能を提供します。
ベースライン プロファイルのサポート
- ベースライン プロファイルの有効性を測定する
CompilationMode.Partial
。 @BaselineProfileRule
: 特定のクリティカル ユーザー ジャーニーに関するベースライン プロファイルを自動的に生成します。
- ベースライン プロファイルの有効性を測定する
Microbenchmark 実行時の割り当て指標とプロファイリングのサポート。
バージョン 1.1.0-rc03
2022 年 6 月 1 日
androidx.benchmark:benchmark-*:1.1.0-rc03
がリリースされました。バージョン 1.1.0-rc03 に含まれる commit については、こちらをご覧ください。
バグの修正
ベンチマークの反復処理ごとにターゲット パッケージが再インストールされないようにしました。(aosp/2093027、b/231976084)
pressHome()
から300ms
の遅延を削除しました。(aosp/2086030、b/231322975)内部で使用される Shell コマンドを最適化して、Macrobenchmark の反復処理の速度を改善しました。(aosp/2086023、b/231323582)
Macrobenchmark によるベースライン プロファイル生成時の Gradle 管理対象デバイスをサポートしました。(aosp/2062228、b/228926421)
バージョン 1.1.0-rc02
2022 年 5 月 11 日
androidx.benchmark:benchmark-*:1.1.0-rc02
がリリースされました。バージョン 1.1.0-rc02 に含まれる commit については、こちらをご覧ください。
- このリリースでは、測定が正確に行われるようにするため、ベンチマークとベンチマークの間にアプリが完全に再インストールされるよう動作が変更されています。
バグの修正 / 動作の変更
アプリのコンパイルが、Macrobenchmark 間で正しくリセットされず、ルート権限のないビルドではまったくリセットされない問題を修正しました。これにより、複数のテストを実行したときに、
CompilationMode
が測定にほとんど(またはまったく)反映されない問題の多くが修正されます。この問題を回避するため、ターゲット アプリをテストメソッドごとに完全に再インストールし、Macrobenchmark ごとにアプリデータが消去されるようにしました。(I31c74、b/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 種類のテストのみを実行できます。(I756b7、b/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/2057008、b/228203086)
バージョン 1.1.0-beta06
2022 年 4 月 6 日
androidx.benchmark:benchmark-*:1.1.0-beta06
がリリースされました。バージョン 1.1.0-beta06 に含まれる commit については、こちらをご覧ください。
バグの修正
- API 21 / 22 でトレース記録を行う際のクラッシュを修正しました。(If7fd6、b/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/2012227、b/218668335)
バージョン 1.1.0-beta04
2022 年 2 月 23 日
androidx.benchmark:benchmark-*:1.1.0-beta04
がリリースされました。バージョン 1.1.0-beta04 に含まれる commit については、こちらをご覧ください。
バグの修正
Android 10 で欠落している指標と、プロセス名がトレースで正しくキャプチャされないことで発生する
NoSuchElementException
を修正しました。(Ib4c17、b/218668335)Q(API 29)以降では、サーマル スロットリングの検出に
PowerManager
を使用します。これにより、サーマル スロットリングの検出における誤検出の頻度が大幅に減少し(90 秒間のクールダウン後にベンチマークの再試行)、ユーザービルドのベンチマークが大幅に高速化されます。また、クロックがロックされている場合でも(デバイスの物理環境に対してロックが高すぎる場合)、スロットル検出が提供されます。(I9c027、b/217497678、b/131755853)検査を簡素化するために、simpleperf のサンプリングされたプロファイリングを
measureRepeated
スレッドのみにフィルタします(Ic3e12、b/217501939)マルチプロセス アプリでの名前付き UI サブプロセスの指標のサポート(Ice6c0、b/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
と同じ機能であったため、BaselineProfileRule
がsetup
ブロックを受け入れないようになりました。(Ic7dfe、b/215536447)次に例を示します。
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
バグの修正
- Studio 出力にリンクされたとき、microbench プロファイラ トレースが後続の実行で更新されない問題を修正しました。(I5ae4d、b/214917025)
- API 23 でコンパイル シェルコマンドを防止しました。(Ice380)
FrameCpuTime
からFrameDurationCpu
、FrameUiTime
からFrameDurationUi
に名前を変更して、タイムスタンプではなく期間であることを明確にし、プレフィックスと一致するようにしました。(I0eba3、b/216337830)
バージョン 1.1.0-beta02
2022 年 1 月 26 日
androidx.benchmark:benchmark-*:1.1.0-beta02
がリリースされました。バージョン 1.1.0-beta02 に含まれる commit については、こちらをご覧ください。
バグの修正
- Microbenchmark スタック サンプリングとメソッド トレース プロファイルの結果が、他のプロファイリング出力と同様に Studio 出力にリンクされるようになり、割り当て指標を抑制することがなくなりました。(Idcb65、b/214440748、b/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 については、こちらをご覧ください。
バグの修正
- プロファイラ引数の有効化が無視される問題を修正しました。(I37373、b/210619998)
- サポートが終了した
CompliationModes
を削除しました。(I98186、b/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 を介して)カスタム トレースをキャプチャしません。このトレースは、特にベンチマーク以外のソースによる不安定性の診断に役立ちます。(I298be、b/205636583、b/145598917) CompilationModes
を、Full、None、Partial という 3 つのクラスに明確化しました。以前は、コンパイル引数(現在は実装の詳細として扱われます)と機能の名前に一貫性がありませんでした。これにより、プラットフォーム バージョン間でのトレードオフ、可能性のある組み合わせ、動作がさらに明確になります。(I3d7bf、b/207132597)- 設定と測定が常にペアで並ぶようになりました。パッケージ名とイテレーションをクエリできるようになりました(ただし、特定のウォームアップ シナリオではイテレーションが
null
になることがあります)。(Id3b68、b/208357448、b/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 を追加しました。(I99db1、b/204572664)
バグの修正
- 反復処理を実施するごとにデバイスを復帰させ、UI をテストできるようにします。これには、ロック画面を無効にすることが必要です。(Ibfa28、b/180963442)
- エミュレータや root 権限のないデバイスでの StackSampling のプロファイリング モードにおける複数のクラッシュを修正しました。(Icdbda、b/202719335)
- 各反復処理の最後の 0.5 秒間にわたるスリープを削除しました。この変更によって指標が欠落している場合は、バグを報告してください。(Iff6aa)
- データがドロップされる可能性を低減し、トレースによるメモリのオーバーヘッドを削減しました。(Id2544、b/199324831、b/204448861)
- コンパクトな sched ストレージ形式に切り替えることによって、トレースサイズを最大 40% 削減しました。(Id5fb6、b/199324831)
- 起動指標の実装を更新して、レンダリング スレッドの終了時に常に終了するようになりました。これにより、異なるプラットフォーム バージョン間でのデータの一貫性が高まり、より密接にアプリ内測定に対応するようになります。(Ic6b55)
バージョン 1.1.0-alpha11
2021 年 11 月 3 日
androidx.benchmark:benchmark-*:1.1.0-alpha11
がリリースされました。バージョン 1.1.0-alpha11 に含まれる commit については、こちらをご覧ください。
API の変更
- Macrobenchmark の
minSdkVersion
が23
になりました。(If2655) - アプリのクリティカル ユーザー ジャーニー用のベースライン プロファイルを生成できる新しい試験運用版
BaselineProfileRule
を追加します。詳細なドキュメントも追加されます。(Ibbefa、b/203692160) - Java 呼び出し元用に追加された measureRepeated インターフェースのバリアントは、メソッドの完了と解決の曖昧さの原因となっていたため、削除しました。Java 呼び出し元は、以前のように measureRepeated から Unit.Instance を返すことが必要になります。これが不便だと思われる場合は、バグの登録をお願いいたします。そうしていただければ、今後のバージョンで再検討いたします。(Ifb23e、b/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() をより適切に処理し、対応するコンテンツのレンダリングが完了するまで待機します。(If3ac9、b/183129298)
- Java 呼び出し元用に、複数の MacrobenchmarkScope メソッドに JvmOverloads を追加しました。(I644fe、b/184546459)
- Java 言語における慣用的な使用方法をサポートするため、
Consumer<MacrobenchmarkScope>
を使用する代替の MacrobenchmarkRule.measureRepeated 関数を提供します。(If74ab、b/184546459)
バグの修正
- トレースが十分に早く開始されず、指標データが見落とされる問題を修正しました。これにより、ライブラリ自体が原因で発生していた「ベンチマーク中に指標をまったく読み取れない」例外が解決することが期待されます。(I6dfcb、b/193827052、b/200302931)
- FrameNegativeSlack の名前を FrameOverrun に変更し、意味(フレームが時間予算をどれだけ超過したか)を明確にしました。(I6c2aa、b/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 の起動の精度が向上します。(Iecfdb、b/200160030)
バージョン 1.1.0-alpha08
2021 年 9 月 29 日
androidx.benchmark:benchmark-*:1.1.0-alpha08
がリリースされました。バージョン 1.1.0-alpha08 に含まれる commit については、こちらをご覧ください。
API の変更
- マクロベンチマークのスクロールを有効にしてAPI 23 に遡れるようにします。(If39c2、b/183129298)
- 反復処理ごとの複数のサンプルのパーセンタイルに焦点を当て、新しいタイプのサンプリングされた指標を UI と JSON 出力に追加します。(I56247、b/199940612)
- ベンチマーク ライブラリ全体で浮動小数点数指標に切り替えます(Studio UI では切り捨てられます)。(I69249、b/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 です。(I440d6、b/183129298)
バグの修正
- ベースライン プロファイルを使用するアプリで、
CompilationMode.BaselineProfile
を使って MacroBenchmark を簡単に実行できるように、ProfileInstaller
を修正しました。(I42657、b/196074999)注:androidx.profileinstaller:profileinstaller:1.1.0-alpha04
以降への更新も必要です。 StartupMode.COLD
とCompilationMode.None
のベンチマークの安定性が向上しました。(I770cd、b/196074999)
バージョン 1.1.0-alpha06
2021 年 8 月 18 日
androidx.benchmark:benchmark-*:1.1.0-alpha06
がリリースされました。バージョン 1.1.0-alpha06 に含まれる commit については、こちらをご覧ください。
API の変更
- ローカルでテスト / プロファイリングするときに反復回数を手動でオーバーライドできるように、
androidx.benchmark.iterations
計測引数を追加しました。(6188be、b/194137879)
バグの修正
- API 29 以降で、デフォルトのサンプリング プロファイラとして Simpleperf に切り替えました。(Ic4b34、b/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 の変更
- startActivityAndWait が
am start
で起動を呼び出すように切り替えられました。これにより、インテント Parcelable がサポートされなくなりますが、各測定イテレーションの時間が約 5 秒短縮されます。(I5a6f5、b/192009149)
バグの修正
- サーマル スロットル検出の積極性を下げ、スロットルが頻繁に検出される場合はベースラインを再計算します。(I7327b)
- Android S ベータ版で動作するように FrameTimingMetric を修正しました。(Ib60cc、b/193260119)
EmptyActivity
を使用して、ターゲット アプリを強制停止状態から解除し、CompilationMode.BaselineProfile
のサポートを改善します。(Id7cac、b/192084204)- プラットフォーム標準に合わせてトレース ファイル拡張子を
.perfetto-trace
に変更しました。(I4c236、b/174663039) - StartupTimingMetric は、アプリケーションのレンダリングが完了するまでの時間を測定する「fullyDrawnMs」指標を出力するようになりました。アプリに対してこの指標を定義するには、初期リストアイテムが DB やネットワークから読み込まれたときなど、初期コンテンツの準備ができたときに Activity.reportFullyDrawn を呼び出します(reportFullyDrawn メソッドは、ComponentActivity のビルド バージョン チェックなしで使用可能)。テストは指標を取得するのに十分な時間実行する必要があります(startActivityAndWait は reportFullyDrawn を待機しません)。(If1141、b/179176560)
- トレースへの Ui メタデータの追加にかかるコストを 50 ミリ秒以上削減します。(Ic8390、b/193923003)
- トレースを停止する際のポーリング頻度を大幅に増やしました。これにより、たとえば起動ベンチマークのランタイムを 30% 以上短縮できます。(Idfbc1、b/193723768)
バージョン 1.1.0-alpha03
2021 年 6 月 16 日
androidx.benchmark:benchmark-*:1.1.0-alpha03
がリリースされました。バージョン 1.1.0-alpha03 に含まれる commit については、こちらをご覧ください。
新機能
- 新しい
CompilationMode.BaselineProfile
を追加して、Jetpack ProfileInstaller ライブラリを使用してインストールされたプロファイルをサポートするようにしました。(aosp/1720930)
バグの修正
ベンチマーク エラーを抑制するための 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-junit4
と androidx.benchmark:benchmark-macro
)。
- ローカルまたは CI で、アプリの起動、スクロールまたはアニメーションのパフォーマンス指標をキャプチャします。
- Android Studio 内からトレースをキャプチャして検査します。
バグの修正
- Android 12 の出力ディレクトリにおけるシェル権限の問題を解決しました(注 - 影響を受けるデバイスで引き続き出力ファイルをキャプチャするには、Android Gradle プラグインを Android 7.0.0 Canary に、Android Studio を Arctic Fox(2020.3.1)に更新する必要があります)。(Icb039)
- BenchmarkPlugin の構成キャッシュのサポートを追加しました。(6be1c1、b/159804788)
- ファイル出力を簡素化しました。デフォルトでは、
requestLegacyExternalStorage=true
を必要としないディレクトリで有効になっています。(8b5a4d、b/172376362) - JIT スレッドが存在しないプラットフォーム バージョンで JIT スレッドが見つからないという logcat 警告をライブラリが出力する問題を修正しました。(I9cc63、b/161847393)
- デバイス読み取りの最大周波数に関する問題を修正しました。(I55c7a)
バージョン 1.1.0-alpha01
2020 年 6 月 10 日
androidx.benchmark:benchmark-common:1.1.0-alpha01
、androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
、androidx.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
エラーが表示される問題を修正しました。(I64988、b/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.0
、androidx.benchmark:benchmark-gradle-plugin:1.0.0
、androidx.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-rc01
、androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
、androidx.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-beta01
、androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
、androidx.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-alpha06
、androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
、androidx.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-alpha05
、androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
、androidx.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-alpha04
、androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
、androidx.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-alpha03
と androidx.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-alpha02
と androidx.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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。