Menjalankan benchmark untuk aplikasi Anda

Benchmark adalah cara untuk menguji performa aplikasi Anda. Anda dapat menjalankan benchmark secara rutin untuk membantu menganalisis dan men-debug masalah performa dan memastikan tidak ada regresi terjadi dalam perubahan terbaru.

Ada dua library benchmark dan pendekatan yang ditawarkan Android, yang berguna untuk menganalisis dan menguji berbagai jenis situasi dalam aplikasi Anda: Benchmark dan Macrobenchmark.

Benchmark dibandingkan Macrobenchmark

Library Jetpack Benchmark memungkinkan Anda melakukan benchmark kode aplikasi langsung dalam satu lingkaran. Library ini dirancang untuk pengukuran kerja CPU yang akan menilai performa kasus terbaik (pemanasan JIT, akses disk yang di-cache), seperti yang mungkin Anda lihat dengan loop dalam atau fungsi hot tertentu.

Benchmark ditulis untuk langsung memanggil kode yang sedang diukur, seperti ini:

@get:Rule
val benchmarkRule = BenchmarkRule()

@Test
fun myBenchmarkTest() {
    benchmarkRule.measureRepeated {
        // code or function call that you want to benchmark
    }
}

Library benchmark hanya melaporkan informasi tentang aplikasi Anda, bukan tentang sistem secara keseluruhan. Karena itu, sebaiknya digunakan untuk menganalisis performa situasi khusus aplikasi, bukan situasi yang mungkin terkait dengan masalah sistem secara keseluruhan. Misalnya, pengaktifan aplikasi melibatkan operasi yang terjadi di luar aplikasi dan sebelum kode aplikasi dijalankan, sehingga ada baiknya untuk melihat informasi tersebut saat meneliti masalah performa pengaktifan. Pengujian Microbenchmark tidak berguna untuk mencoba memperbaiki kasus penggunaan ini.

Macrobenchmark mengukur interaksi pengguna akhir yang lebih besar, seperti pengaktifan, scroll, dan animasi. Tidak seperti library benchmark, Macrobenchmark memasukkan peristiwa dan memantau secara eksternal, dari aplikasi pengujian yang Anda berikan.

Macrobenchmark memberikan kontrol langsung atas lingkungan performa yang diuji. Misalnya, Anda dapat menentukan performa pengaktifan penginstalan cold pertama kali, selain opsi pengaktifan "warm" dan "hot", seperti yang ditampilkan dalam contoh ini yang diadaptasi dari contoh Macrobenchmark:

@Test
fun startup() = benchmarkRule.measureStartup(
    packageName = "mypackage.myapp",
    metrics = listOf(StartupTimingMetric()),
    iterations = 5,
    startupMode = StartupMode.COLD
) {
    pressHome()
    startActivityAndWait(Intent().apply {
        action = "mypackage.myapp.myaction"
    })
}

Sebagai bagian dari hasil, Macrobenchmark menghasilkan file rekaman aktivitas yang dapat Anda lihat di Android Studio untuk menunjukkan masalah performa terkait analisis dan proses debug.

Benchmark Macrobenchmark
Mengukur fungsi individual Mengukur titik masuk tingkat tinggi (misalnya, peluncuran aktivitas atau men-scroll daftar)
Pengujian di dalam proses kerja CPU Pengujian di luar proses terhadap aplikasi lengkap
Kecepatan iterasi tinggi (seringnya kurang dari 10 detik) Kecepatan iterasi sedang (seringnya lebih dari satu menit)
Pengambilan contoh dan perekaman aktivitas metode opsional Hasil dilengkapi dengan rekaman aktivitas pembuatan profil
Min API 14 Min API 23