Microbenchmark

Library Jetpack Microbenchmark memungkinkan Anda menjalankan benchmark kode native Android (Kotlin atau Java) dengan cepat dari dalam Android Studio. Library ini menangani pemanasan, mengukur performa kode dan jumlah alokasi, serta menampilkan hasil benchmark ke konsol Android Studio dan file JSON dengan lebih detail.

Sebaiknya buat profil kode Anda sebelum menulis benchmark. Ini akan membantu Anda menemukan operasi berharga yang dapat dioptimalkan. Tindakan ini juga dapat mengetahui mengapa operasi lambat dengan menunjukkan hal yang terjadi saat operasi berjalan. Dukungan ini dapat berjalan di thread prioritas rendah, tidur karena akses disk, atau panggilan telepon yang tidak terduga ke fungsi yang mahal, seperti decoding bitmap.

Microbenchmark paling berguna untuk pekerjaan CPU yang dijalankan berkali-kali di aplikasi Anda, juga dikenal sebagai jalur kode panas. Contoh yang baik adalah men-scroll RecyclerView dengan satu item yang ditampilkan pada satu waktu, konversi/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 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 sementara dalam satu loop.

Kode yang jarang dijalankan

Kode yang dijalankan satu kali selama memulai aplikasi kecil kemungkinannya untuk dikompilasi secara JIT oleh Android Runtime (ART). Oleh karena itu, menjalankan benchmark pada kode ini dengan Microbenchmark—saat dijalankan dalam loop yang ketat—bukanlah cara yang realistis untuk mengukur performanya.

Untuk menjalankan benchmark pada kode semacam ini, sebaiknya gunakan Jetpack Macrobenchmark, yang mendukung pengukuran interaksi pengguna tingkat lebih tinggi, seperti peluncuran aplikasi dan performa scroll.

Mendapatkan benchmark yang konsisten

Frekuensi CPU pada perangkat seluler berubah secara dinamis dari kondisi tinggi (untuk performa) ke kondisi rendah (untuk menghemat daya, atau saat perangkat menjadi panas). Frekuensi CPU yang bervariasi ini dapat membuat hasil benchmark sangat bervariasi, sehingga library memberikan cara untuk mengatasi masalah ini.

Mengunci frekuensi CPU (membutuhkan perangkat yang telah di-root)

Mengunci frekuensi CPU adalah cara terbaik untuk mendapatkan performa yang stabil. Cara ini memastikan bahwa frekuensi CPU tidak terlalu tinggi sehingga membuat panas perangkat, atau rendah jika benchmark tidak sepenuhnya menggunakan CPU. Hal ini diterapkan secara otomatis saat menjalankan Microbenchmark dengan Gradle, atau dapat diterapkan secara manual di CI. Meskipun ini adalah cara terbaik untuk memastikan performa stabil, tetapi 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 maksimum yang lebih rendah. Saat berjalan di perangkat yang didukung, library Microbenchmark akan menggunakan kombinasi API ini dan meluncurkan aktivitasnya sendiri untuk mencegah penurunan frekuensi karena panas dan menstabilkan hasil.

Fungsionalitas ini diaktifkan secara default oleh testInstrumentationRunner yang disetel oleh plugin Gradle. Jika ingin menggunakan runner kustom, Anda dapat membuat subclass pada 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 penguncian frekuensi CPU atau performa berkelanjutan digunakan, library akan secara otomatis melakukan deteksi penurunan frekuensi karena panas. Jika diaktifkan, benchmark internal akan berjalan secara berkala untuk menentukan kapan suhu perangkat cukup tinggi yang akan menurunkan performa CPU. Saat penurunan performa CPU terdeteksi, library akan menjeda eksekusi untuk mendinginkan perangkat, dan mencoba kembali benchmark saat ini.

Contoh

Referensi lainnya

Berikan masukan

Untuk melaporkan masalah atau mengirimkan permintaan fitur saat menggunakan benchmark, lihat Issue Tracker publik.