Library Jetpack Microbenchmark memungkinkan Anda menjalankan benchmark kode native Android—Kotlin atau Java—dari dalam Android Studio. Library ini menangani warmup, mengukur performa kode dan jumlah alokasi, serta menampilkan hasil benchmark ke konsol Android Studio dan file JSON dengan lebih mendetail.
Sebaiknya buat profil kode Anda sebelum menulis benchmark. Cara ini akan membantu Anda menemukan operasi yang boros dan cocok untuk dioptimalkan. Tindakan ini juga dapat menunjukkan penyebab operasi lambat dengan menunjukkan hal yang terjadi saat operasi tersebut berjalan. Misalnya, karena operasi berjalan di thread prioritas rendah, dalam mode tidur untuk mengakses disk, atau panggilan yang tidak terduga ke fungsi yang boros waktu, seperti decoding bitmap.
Microbenchmark paling berguna untuk tugas CPU yang dijalankan berkali-kali di aplikasi Anda,
juga dikenal sebagai jalur hot code. Praktik terbaiknya adalah scroll RecyclerView
dengan
satu item yang ditampilkan pada satu waktu, konversi atau pemrosesan data, dan potongan kode lainnya
yang digunakan berulang kali.
Jenis kode lainnya lebih sulit diukur dengan library Microbenchmark. Karena benchmark berjalan dalam satu loop, setiap kode yang jarang dijalankan atau berperforma berbeda saat dipanggil beberapa kali mungkin tidak sesuai untuk menjalankan benchmark.
Untuk mempelajari cara menggunakan library dalam lingkungan Continuous Integration (CI), lihat Menjalankan benchmark dalam Continuous Integration.
Menghindari pengukuran cache
Coba hindari pengukuran hanya cache. Misalnya, benchmark tata letak tampilan kustom mungkin hanya mengukur performa cache tata letak. Untuk menghindarinya, Anda dapat meneruskan parameter tata letak yang berbeda di setiap loop. Dalam kasus lain, seperti saat mengukur performa sistem file, tindakan ini mungkin sulit karena OS menyimpan cache sistem file saat berada di loop.
Mendapatkan benchmark yang konsisten
Clock pada perangkat seluler berubah secara dinamis dari kondisi tinggi untuk performa, menjadi kondisi rendah untuk menghemat daya atau saat perangkat menjadi panas. Clock yang bervariasi ini dapat membuat hasil benchmark sangat bervariasi, sehingga library memberikan beberapa cara untuk mengatasi masalah ini.
Mengunci frekuensi CPU (membutuhkan perangkat yang telah di-root)
Mengunci clock adalah cara terbaik untuk mendapatkan performa yang stabil. Cara ini memastikan bahwa
clock tidak terlalu tinggi sehingga membuat perangkat panas, atau rendah jika benchmark tidak
sepenuhnya menggunakan CPU. Hal ini dapat diterapkan dengan tugas Gradle
(gradlew lockClocks
) atau secara manual di CI. Meskipun cara ini paling cocok untuk
membantu memastikan performa yang stabil, cara ini tidak didukung di sebagian besar perangkat karena
memerlukan perangkat Android yang di-root.
Mode performa berkelanjutan
Window.setSustainedPerformanceMode()
adalah fitur yang didukung oleh perangkat
yang memungkinkan aplikasi memilih frekuensi CPU maksimal yang lebih rendah. Saat berjalan di perangkat yang
didukung,
library Microbenchmark akan menggunakan kombinasi API ini dan meluncurkan
aktivitasnya sendiri untuk mencegah throttling termal dan menstabilkan hasil.
Fitur ini diaktifkan secara default oleh testInstrumentationRunner
yang ditetapkan
oleh plugin Android Gradle. Jika ingin menggunakan runner kustom, Anda dapat
membuat subclass AndroidBenchmarkRunner
dan menggunakannya sebagai
testInstrumentationRunner
.
Runner meluncurkan aktivitas layar penuh buram untuk memastikan bahwa benchmark berjalan di latar depan dan tidak ada penggambaran aplikasi lain.
Penjedaan eksekusi otomatis
Jika Anda tidak menggunakan penguncian clock atau performa berkelanjutan, library akan melakukan deteksi throttling termal secara otomatis. Jika diaktifkan, benchmark internal akan berjalan secara berkala untuk menentukan kapan suhu perangkat cukup tinggi sehingga dapat menurunkan performa CPU. Saat mendeteksi penurunan performa CPU, library akan menjeda eksekusi untuk mendinginkan perangkat, lalu mencoba ulang benchmark saat ini.
Kompilasi AOT
Microbenchmark kompleks butuh waktu lama untuk menstabilkan, dan
stabilisasi sangat sulit dideteksi. Pengukuran yang konsisten
dan kecepatan
kecepatan iterasi merupakan prioritas utama, plugin androidx.benchmark
akan
mengompilasi apk microbenchmark secara default, mirip dengan
CompilationMode.Full
di Macrobenchmark. Perilaku ini memerlukan Benchmark
1.3.0-beta01+
, dan Plugin Android Gradle 8.4.0+
. Anda dapat memilih untuk tidak ikut serta
perilaku Anda dengan menetapkan androidx.benchmark.forceaotcompilation=false
di
File gradle.properties
.
Contoh
Lihat contoh berikut di repositori GitHub:
Referensi lainnya
Memberikan masukan
Untuk melaporkan masalah atau mengirimkan permintaan fitur saat menggunakan benchmark, lihat issue tracker publik.
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Menjalankan benchmark untuk aplikasi
- Membuat Profil Dasar Pengukuran {:#creating-profile-rules}
- Library JankStats