6 月 3 日の「#Android11: The Beta Launch Show」にぜひご参加ください。

継続的インテグレーションでベンチマークを実行する

テストは、Gradle を使用せずに CI で実行するか、別のビルドシステムを使用している場合はローカルで実行するのが一般的です。このトピックでは、Gradle を使用せず実行時にベンチマーク ライブラリを設定する方法について説明します。

ベンチマークが CI で役立つ理由と、ベンチマーク データを使用して回帰を検出する方法については、Android デベロッパー ブログの CI のベンチマークによる回帰対策をご覧ください。

結果

ベンチマークは、テスト実行の結果とメタデータを含む JSON ファイルを出力します。この JSON ファイルは、デバイスの外部ストレージに書き込まれます。実行のたびにデバイスからファイルを pull する必要があります。

出力はデフォルトで無効になっていますが、次のインストゥルメンテーション引数を指定して am instrument コマンドに渡すことで、有効にできます。

    -e androidx.benchmark.output.enable true
    

デフォルトで、レポートはテスト対象アプリの外部ストレージのダウンロード ディレクトリに保存され、次のクエリで検索できます。

    adb shell content query --uri content://media/external/file --projection _data --where "\"_data LIKE '%Android'\""
    

次のインストゥルメンテーション引数を使用して、ベンチマークの書き込み先のパスを設定できます。

    -e additionalTestOutputDir "device_path_you_can_write_to"
    

ストレージと Android 10

Android Gradle のように、テストをアンインストールする前にデバイスから出力データを pull するのが困難な場合は、次のインストゥルメンテーション引数を渡すことができます。Android 10 以降を搭載しているデバイスでは、この引数を指定すると、アンインストール後もファイルが保持されます。

    -e no-isolated-storage 1
    

API 29 以降も対象とする場合は、ベンチマークのマニフェストでレガシー ストレージ オプションを明示的に許可する必要もあります。

    <application android:requestLegacyExternalStorage="true" ... >
    

対象範囲別ストレージからオプトアウトする方法については、限定ビューからオプトアウトするをご覧ください。

クロックをロックする

Benchmark Gradle プラグインには、ユーザーにルート権限のあるデバイスの CPU クロックをロックするコマンド ./gradlew lockClocks が用意されています。これは、「userdebug」ビルドなど、ユーザーにルート権限のあるデバイスにアクセスできる場合に安定性を確保するのに役立ちます。ライブラリのソースにある lockClocks.sh シェル スクリプトを使用して複製できます。

Linux または Mac ホストからスクリプトを直接実行することも、いくつかの adb コマンドを使用してデバイスに push することもできます。

    adb push path/lockClocks.sh /data/local/tmp/lockClocks.sh
    adb shell /data/local/tmp/lockClocks.sh
    adb shell rm /data/local/tmp/lockClocks.sh
    

シェル スクリプトをホスト上で直接実行すると、接続されたデバイスにこれらのコマンドがディスパッチされます。

インストゥルメンテーション引数

次のインストゥルメンテーション引数を指定して、ライブラリの動作を設定できます。

androidx.benchmark.startupMode.enable

  • 起動時のベンチマーク コードをサポートするようにループ動作を再設定します
  • ウォームアップ ループを無効にします
  • 測定値を 10 個キャプチャします
  • ループ平均化を無効にし、マイクロ ベンチマークのオーバーヘッドを最小限に抑えます
  • デフォルトは false です

androidx.benchmark.output.enable

  • 結果の JSON ファイルを外部ストレージに書き込めるようにします
  • デフォルトは false です

androidx.benchmark.suppressErrors

  • DEBUGGABLE,LOW-BATTERY など、警告に変わるエラーのカンマ区切りのリスト
  • デフォルトは空のリストです

additionalTestOutputDir

  • 完全な JSON ベンチマーク レポートをデバイスに保存する場所を設定します
  • デフォルトはテスト APK の外部ダウンロード ディレクトリです