Microbenchmark

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.