Benchmark
Update Terbaru | Rilis Stabil Saat Ini | Kandidat Rilis Berikutnya | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
10 Juni 2020 | 1.0.0 | - | - | 1.1.0-alpha01 |
Mendeklarasikan dependensi
Untuk menambahkan dependensi pada Benchmark, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.
Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle
bagi
aplikasi atau modul Anda:
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.0.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Library Benchmark juga menyediakan plugin Gradle untuk digunakan dengan modul benchmark Anda. Plugin ini menetapkan default konfigurasi build untuk modul, menyiapkan salinan output benchmark ke host, dan memberikan tugas ./gradlew lockClocks
.
Untuk menggunakan plugin ini, sertakan classpath
berikut dalam file build.gradle
level teratas:
buildscript { repositories { google() } dependencies { classpath "androidx.benchmark:benchmark-gradle-plugin:1.0.0" } }
Lalu terapkan plugin ke file build.gradle
modul benchmark Anda
apply plugin: "androidx.benchmark"
Masukan
Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau punya masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara pada masalah yang ada dengan mengklik tombol bintang.
Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.
Versi 1.1.0
Versi 1.1.0-alpha01
10 Juni 2020
androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
, dan androidx.benchmark:benchmark-junit4:1.1.0-alpha01
dirilis. Versi 1.1.0-alpha01 berisi commit berikut.
Fitur Baru Versi 1.1
- Metrik Alokasi - Benchmark kini menjalankan fase tambahan setelah pemanasan dan pengaturan waktu, yang merekam penghitungan alokasi. Alokasi dapat menyebabkan masalah performa pada versi platform lama (140 nd di O menjadi 8 nd di M - diukur di Nexus5X, dengan frekuensi cpu terkunci). Metrik ini ditampilkan di output konsol Android Studio, serta di
- Dukungan pembuatan profil - Anda kini dapat mengambil data pembuatan profil untuk menjalankan tolok ukur, guna memeriksa alasan kode Anda berjalan dengan lambat. Benchmark mendukung pengambilan data, baik dengan pelacakan metode, atau pengambilan sampel metode dari ART. File ini dapat diperiksa dengan Profiler di dalam Android Studio menggunakan File > Open.
- Plugin Benchmark Gradle kini menyediakan setelan default untuk penyiapan yang lebih sederhana:
testBuildType
ditetapkan untuk dirilis secara default, guna menghindari penggunaan dependensi dengan cakupan kode bawaan. BuildType rilis juga dikonfigurasi sebagai buildType default, yang memungkinkan Android Studio otomatis memilih varian build yang tepat saat membuka project untuk pertama kalinya. (b/138808399)signingConfig.debug
digunakan sebagai konfigurasi penandatanganan default (b/153583269)
** Perbaikan Bug **
- Mengurangi overhead transisi pemanasan secara signifikan, ketika pengukuran pertama untuk setiap tolok ukur lebih tinggi dari pengukuran lainnya secara buatan. Masalah ini lebih jelas dalam tolok ukur yang sangat kecil (1 mikrodetik atau kurang). (b/142058671)
- Memperbaiki error
InstrumentationResultParser
yang ditampilkan untuk setiap tolok ukur saat dijalankan dari command line. (I64988, b/154248456)
Masalah Umum
- Command line, pemanggilan Gradle pada Benchmark tidak menampilkan hasil secara langsung. Anda dapat mengatasi masalah ini dengan menjalankan Studio, atau mengurai file output JSON untuk hasil.
- Pelaporan Benchmark gagal mengambil laporan dari perangkat yang menginstal aplikasi dengan applicationId yang diakhiri dengan "android" atau "download" (tidak peka huruf besar/kecil). Pengguna yang memiliki masalah ini harus mengupgrade Plugin Android Gradle ke 4.2-alpha01 atau yang lebih baru.
Versi 1.0.0
Benchmark Versi 1.0.0
20 November 2019
androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
, dan androidx.benchmark:benchmark-junit4:1.0.0
dirilis tanpa perubahan dari versi 1.0.0-rc01. Versi 1.0.0 berisi commit berikut ini.
Fitur utama 1.0.0
Library Benchmark memungkinkan Anda menulis benchmark performa kode aplikasi dan mendapatkan hasilnya dengan cepat.
Hal ini mencegah masalah konfigurasi build dan runtime serta menstabilkan performa perangkat untuk memastikan bahwa pengukuran dilakukan secara akurat dan konsisten. Jalankan benchmark secara langsung di Android Studio, atau dalam Continuous Integration untuk mengamati performa kode dari waktu ke waktu, dan untuk mencegah regresi.
Fitur utama mencakup:
- Stabilisasi jam
- Penetapan prioritas thread otomatis
- Dukungan untuk pengujian performa UI, seperti dalam Contoh RecyclerView
- Perulangan dan pemanasan yang sensitif terhadap JIT
- Output benchmark JSON untuk pascapemrosesan
Versi 1.0.0-rc01
23 Oktober 2019
androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
, dan androidx.benchmark:benchmark-junit4:1.0.0-rc01
dirilis. Versi 1.0.0-rc01 berisi commit berikut.
Fitur baru
- Menambahkan perekaman aktivitas systrace ke benchmark
Perbaikan bug
- Memperbaiki masalah ketidakstabilan metrik dengan JIT yang tidak dapat diselesaikan sebelum pemanasan karena pembatalan prioritas (b/140773023)
- Direktori output JSON terpadu di Plugin Android Gradle 3.5 dan 3.6
Versi 1.0.0-beta01
9 Oktober 2019
androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
, dan androidx.benchmark:benchmark-junit4:1.0.0-beta01
dirilis. Versi 1.0.0-beta01 berisi commit berikut.
Fitur baru
- Menjalankan pembersihan sampah memori sebelum pemanasan untuk mengurangi tekanan memori dari satu benchmark agar disebarkan ke benchmark berikutnya (b/140895105)
Perbaikan bug
- Menambahkan dependensi
androidx.annotation:android-experimental-lint
sehingga kode Java akan menghasilkan error lint dengan benar ketika API eksperimental tidak digunakan, mirip dengan yang diberikan oleh anotasi eksperimental Kotlin untuk pemanggil Kotlin. - Penggunaan argumen instrumentasi
additionalTestOutputDir
kini dideteksi dengan benar untuk output di Plugin Android Gradle 3.6, untuk mengetahui kapan AGP akan menangani penyalinan data. - Memperbaiki frekuensi jam yang tidak terdeteksi di JSON agar mencetak
-1
dengan benar (b/141945670).
Versi 1.0.0-alpha06
18 September 2019
androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha06
dirilis. Versi 1.0.0-alpha06 berisi commit berikut.
Fitur baru
- Menambahkan pemeriksaan untuk kesalahan penggunaan paket lama bagi runner pengujian, yang kini memberikan pesan error yang lebih bermanfaat
Perubahan API
ExperimentalAnnotationReport
anotasi eksperimental kini sudah beralih ke publik dengan benar. Penggunaan API BenchmarkState#report eksperimental kini mewajibkan anotasi ini
Versi 1.0.0-alpha05
5 September 2019
androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha05
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Perubahan API
- API
BenchmarkState.reportData
kini ditandai sebagai eksperimental
Perbaikan bug
- Perbaikan untuk skrip penguncian jam, yang sebelumnya gagal di perangkat yang tidak memiliki utilitas shell
cut
atauexpr
. - Memperbaiki masalah tugas
./gradlew lockClocks
yang berhenti bekerja di perangkat yang telah di-root dengan versi lama utilitas su, yang tidak mendukung tanda-c
.
Versi 1.0.0-alpha04
7 Agustus 2019
androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha04
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Dokumentasi baru juga telah ditambahkan untuk mengetahui cara menggunakan library Benchmark tanpa Gradle, baik untuk penggunaan dengan sistem build yang berbeda (seperti Bazel atau Buck) maupun saat menjalankan library ini di CI. Untuk informasi selengkapnya, lihat Mem-build benchmark tanpa Gradle dan Menjalankan benchmark dalam Continuous Integration.
Fitur baru
- Plugin Gradle
- Cakupan pengujian kini dinonaktifkan secara otomatis, dan
AndroidBenchmarkRunner
ditetapkan secara default (b/138374050) - Menambahkan dukungan untuk salinan data berbasis AGP baru, saat menentukan tolok ukur dan saat menggunakan AGP 3.6+
- Cakupan pengujian kini dinonaktifkan secara otomatis, dan
- Penambahan format JSON
- Mengoutput total waktu pengujian benchmark (b/133147694)
- Benchmark
@Parameterized
yang menggunakan string nama (misalnya@Parameters(name = "size={0},depth={1}")
) kini menghasilkan output nama parameter dan nilai per benchmark dalam output JSON (b/132578772)
- Mode Dry Run (b/138785848)
- Menambahkan mode "dry run" untuk menjalankan setiap loop tolok ukur sekali saja, guna memeriksa apakah ada error/fungsi yang terhenti tanpa merekam pengukuran. Hal ini bisa bermanfaat untuk, misalnya, menjalankan benchmark dengan cepat saat presubmit untuk memeriksa apakah ada kerusakan.
Perubahan API
- Struktur modul telah diubah, dengan memisahkan library (b/138451391)
benchmark:benchmark-junit4
berisi class dengan dependensi JUnit:AndroidBenchmarkRunner
, danBenchmarkRule
, yang keduanya telah dialihkan ke paketandroidx.benchmark.junit4
benchmark:benchmark-common
berisi logika lainnya, termasuk BenchmarkState API- Pemisahan ini memungkinkan library mendukung benchmark tanpa JUnit4 API di masa mendatang
- Peringatan konfigurasi sekarang diperlakukan sebagai error, dan akan menyebabkan error pada pengujian (b/137653596)
- Hal ini dilakukan untuk meningkatkan akurasi pengukuran, terutama di CI
- Error ini dapat dikembalikan menjadi peringatan dengan argumen instrumentasi. Contoh:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Perbaikan bug
- Error saat menulis ke penyimpanan eksternal pada perangkat Android Q memberikan pesan yang lebih deskriptif, disertai saran cara menyelesaikan masalah tersebut
- Layar otomatis menyala selama proses benchmark berlangsung, bukannya menggagalkan proses saat layar mati
Kontribusi eksternal
- Terima kasih kepada Sergey Zakharov atas kontribusi penyempurnaan output JSON dan perbaikan untuk masalah layar mati!
Versi 1.0.0-alpha03
2 Juli 2019
androidx.benchmark:benchmark:1.0.0-alpha03
dan androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Fitur baru
- Menunjukkan durasi tidur karena throttling termal per benchmark dalam laporan JSON lengkap
Perbaikan bug
- Plugin Gradle tidak perlu lagi diterapkan setelah plugin Android dan blok Android
- Menambahkan dukungan untuk laporan tolok ukur pada perangkat Android 10 yang menggunakan penyimpanan terbatas
Versi 1.0.0-alpha02
6 Juni 2019
androidx.benchmark:1.0.0-alpha02
dan
androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
dirilis. Commit
yang disertakan dalam versi ini dapat dilihat di sini.
Perlu diperhatikan bahwa kami memperlakukan skema JSON sebagai API. Kami akan mengikuti batasan stabilitas yang sama dengan API lainnya: stabil (dengan pengecualian yang sangat jarang) setelah dalam versi beta, dan ditetapkan dalam rilis final, dengan hanya beberapa penambahan pada rilis kecil dan perubahan/penghapusan dalam rilis besar.
Perubahan API
Merombak skema JSON. Perubahan lebih lanjut pada skema JSON kemungkinan dibatasi pada penambahan:
- Mengatur ulang struktur objek hasil untuk mendukung grup metrik tambahan di masa mendatang (b/132713021)
- Menambahkan informasi konteks pengujian, seperti informasi perangkat dan build serta apakah jam dikunci, ke objek tingkat teratas (b/132711920)
- Metrik waktu sekarang memiliki 'ns' dalam namanya (b/132714527)
- Menambahkan statistik tambahan per metrik yang dilaporkan (maksimum, median, minimum), dan menghapus statistik ringkasan 'nanos' yang disederhanakan (b/132713851)
Menghapus output XML (b/132714414)
Deteksi throttle termal dihapus dari
BenchmarkState.reportData
API (b/132887006)
Perbaikan bug
- Memperbaiki
./gradlew lockClocks
yang tidak menempel pada beberapa perangkat OS terbaru (b/133424037) - Deteksi throttle dinonaktifkan untuk emulator (b/132880807)
Versi 1.0.0-alpha01
7 Mei 2019
androidx.benchmark:benchmark:1.0.0-alpha01
dirilis. Commit yang disertakan
dalam versi ini dapat dilihat
di sini.