Menjalankan benchmark dalam Continuous Integration

Sudah umum untuk menjalankan pengujian dalam CI tanpa Gradle, atau secara lokal jika Anda menggunakan sistem build yang berbeda. Topik ini menjelaskan cara mengonfigurasi library Benchmark pada runtime tanpa Gradle.

Untuk mempelajari manfaat Benchmark dalam CI dan cara menggunakan data benchmark untuk mendeteksi regresi, lihat Mengatasi Regresi dengan Benchmark dalam CI di blog Developer Android.

Hasil

Benchmark menghasilkan file JSON dengan hasil dan metadata dari menjalankan pengujian. File JSON ini ditulis ke penyimpanan eksternal perangkat. Anda harus mengambil file dari perangkat di setiap pengujian.

Output dinonaktifkan secara default, tetapi Anda dapat mengaktifkannya menggunakan argumen instrumentasi berikut, yang diteruskan ke perintah am instrument:

-e androidx.benchmark.output.enable true

Secara default, laporan disimpan di perangkat dalam direktori download untuk penyimpanan eksternal aplikasi yang diuji, yang dapat ditemukan dengan kueri berikut:

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

Anda dapat mengonfigurasi jalur operasi tulis Benchmark menggunakan argumen instrumentasi berikut:

-e additionalTestOutputDir "device_path_you_can_write_to"

Penyimpanan dan Android 10

Jika, seperti di Android Gradle, data output sulit diambil dari perangkat sebelum pengujian di-uninstal, Anda dapat meneruskan argumen instrumentasi berikut. Pada perangkat yang menjalankan Android 10 dan versi lebih tinggi, argumen ini memungkinkan file tetap disimpan setelah uninstal:

-e no-isolated-storage 1

Jika API 29 dan level lebih tinggi juga ditargetkan, Anda harus secara eksplisit mengizinkan opsi penyimpanan lama dalam manifes benchmark:

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

Untuk informasi selengkapnya, lihat Memilih tidak menggunakan penyimpanan terbatas untuk sementara.

Mengunci frekuensi CPU

Plugin Gradle Benchmark memberikan perintah ./gradlew lockClocks untuk mengunci frekuensi CPU perangkat yang telah di-root. Ini berguna untuk memastikan stabilitas saat Anda memiliki akses ke perangkat yang telah di-root, seperti build "userdebug". Anda dapat mereplika ini menggunakan skrip shell lockClocks.sh, yang tersedia di sumber library.

Anda dapat menjalankan skrip tersebut secara langsung dari host Linux atau Mac, atau mengirimnya ke perangkat dengan beberapa perintah adb:

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

Jika Anda menjalankan skrip shell secara langsung di host, host akan mengirimkan perintah ini ke perangkat yang tersambung.

Argumen instrumentasi

Anda dapat mengonfigurasi perilaku library dengan argumen instrumentasi berikut:

androidx.benchmark.startupMode.enable

  • Mengonfigurasi ulang perilaku berulang untuk mendukung kode benchmark selama startup
  • Menonaktifkan pengulangan pemanasan
  • Melakukan 10 pengukuran
  • Menonaktifkan rata-rata pengulangan, yang mengurangi overhead di benchmark mikro
  • Default-nya adalah false

androidx.benchmark.output.enable

  • Mengaktifkan penulisan file JSON hasil ke penyimpanan eksternal
  • Default-nya adalah false

androidx.benchmark.suppressErrors

  • Daftar error yang dipisahkan koma, seperti DEBUGGABLE,LOW-BATTERY, akan diubah menjadi peringatan
  • Default ke daftar kosong

androidx.benchmark.profiling.mode

  • Salah satu dari none, method, atau sampled
  • Default ke none
  • Untuk informasi selengkapnya, lihat Pembuatan profil.

additionalTestOutputDir

  • Mengonfigurasi tempat laporan benchmark JSON dan hasil pembuatan profil akan disimpan di perangkat
  • Default ke direktori download eksternal APK pengujian