Memeriksa performa aplikasi dengan Macrobenchmark

1. Sebelum memulai

Dalam codelab ini, Anda akan mempelajari penggunaan library macrobenchmark. Anda akan mengukur waktu startup aplikasi, yang merupakan metrik utama untuk engagement pengguna, dan waktu render frame, yang menunjukkan lokasi munculnya jank di aplikasi Anda.

Yang akan Anda butuhkan

Yang akan Anda lakukan

  • Menambahkan modul benchmark ke aplikasi yang sudah ada
  • Mengukur waktu startup aplikasi dan waktu render frame

Yang akan Anda pelajari

  • Mengukur performa aplikasi secara andal

2. Mempersiapkan

Untuk memulai, clone repositori GitHub dari command line dengan menggunakan perintah berikut:

$ git clone https://github.com/android/codelab-android-performance.git

Atau, Anda dapat mendownload dua file ZIP:

Membuka Project ke Android Studio

  1. Di jendela Welcome to Android Studio, pilih c01826594f360d94.png Open an Existing Project
  2. Pilih folder [Download Location]/android-performance/benchmarking (tips: pastikan Anda memilih direktori benchmarking yang berisi build.gradle)
  3. Setelah Android Studio mengimpor project, pastikan Anda dapat menjalankan modul app untuk mem-build aplikasi contoh yang akan diukur dengan benchmark.

3. Pengantar Jetpack Macrobenchmark

Library Jetpack Macrobenchmark mengukur performa interaksi pengguna akhir yang lebih besar, seperti startup, berinteraksi dengan UI, dan animasi. Library ini menyediakan kontrol langsung atas lingkungan performa yang Anda uji. Hal ini memungkinkan Anda mengontrol kompilasi, memulai, dan menghentikan aplikasi untuk langsung mengukur startup aplikasi, waktu render frame, dan bagian kode yang dilacak.

Dengan Jetpack Macrobenchmark, Anda dapat:

  • mengukur aplikasi beberapa kali dengan kecepatan scroll dan pola peluncuran deterministik
  • menghaluskan varian performa dengan membuat rata-rata hasil pada beberapa pengujian
  • mengontrol status kompilasi aplikasi – faktor utama dalam stabilitas performa
  • memeriksa performa nyata dengan reproduksi lokal pengoptimalan waktu penginstalan yang dilakukan oleh Google Play Store

Instrumentasi yang menggunakan library ini tidak memanggil kode aplikasi Anda secara langsung, tetapi menavigasi aplikasi Anda seperti yang dilakukan pengguna – menyentuh, mengklik, menggeser, dll. Pengukuran terjadi di perangkat selama interaksi ini. Jika Anda ingin mengukur bagian-bagian kode aplikasi secara langsung, lihat Jetpack Microbenchmark.

Menulis benchmark sama seperti menulis pengujian berinstrumen, tetapi Anda tidak perlu memverifikasi status aplikasi Anda. Benchmark menggunakan sintaksis JUnit (@RunWith, @Rule, @Test, dll.), tetapi pengujian berjalan dalam proses terpisah untuk memungkinkan aplikasi Anda dimulai ulang atau dikompilasi terlebih dahulu. Ini memungkinkan kami menjalankan aplikasi Anda tanpa mengganggu status internalnya, seperti yang dilakukan pengguna. Kami melakukannya dengan menggunakan UiAutomator untuk berinteraksi dengan aplikasi target.

Aplikasi contoh

Dalam codelab ini, Anda akan menggunakan aplikasi contoh JetSnack. Ini adalah aplikasi pemesanan camilan virtual, menggunakan Jetpack Compose. Untuk mengukur performa aplikasi, Anda tidak perlu mengetahui detail cara aplikasi dirancang. Yang perlu Anda pahami adalah bagaimana aplikasi berperilaku dan struktur UI sehingga Anda dapat mengakses elemen UI dari benchmark. Jalankan aplikasi dan pahami layar dasarnya dengan memesan camilan pilihan Anda.

a1f684feb2456079.png

4. Menambahkan library Macrobenchmark

Macrobenchmark memerlukan penambahan modul Gradle baru ke project Anda. Cara termudah untuk menambahkannya ke project adalah dengan wizard modul Android Studio.

Buka dialog modul baru (misalnya, klik kanan project atau modul di panel Project, lalu pilih New > Module).

4ce8ef7fa59b41b8.png

Pilih Benchmark dari panel Templates, pastikan Macrobenchmark dipilih untuk bagian Benchmark module type dan periksa apakah detailnya seperti yang Anda inginkan:

24884734761bcfed.png

  • Target application – aplikasi yang akan diukur dengan benchmark
  • Module name – nama modul Gradle benchmark
  • Package name – nama paket untuk benchmark
  • Minimum SDK – setidaknya Android 6 (API level 23) atau yang lebih baru diperlukan

Klik Finish.

Perubahan yang dibuat oleh wizard modul

Wizard modul membuat beberapa perubahan pada project Anda.

Wizard ini menambahkan modul Gradle bernama macrobenchmark (atau nama yang Anda pilih pada wizard). Modul ini menggunakan plugin com.android.test, yang memberi tahu Gradle untuk tidak menyertakannya dalam aplikasi Anda, sehingga hanya dapat berisi kode pengujian (atau benchmark).

Wizard juga membuat perubahan pada modul aplikasi target yang Anda pilih. Secara khusus, wizard menambahkan jenis build benchmark baru ke modul :app build.gradle.kts, seperti dalam cuplikan berikut:

create("benchmark") {
   initWith(buildTypes.getByName("release"))
   matchingFallbacks += listOf("release")
   isDebuggable = false
}

buildType ini harus mengemulasikan buildType release Anda sedekat mungkin. Perbedaan dengan buildType release adalah signingConfig ditetapkan ke debug yang diperlukan agar Anda dapat mem-build aplikasi secara lokal tanpa memerlukan keystore produksi.

Namun, karena flag debuggable dinonaktifkan, wizard akan menambahkan tag <profileable> ke AndroidManifest.xml Anda untuk memungkinkan benchmark membuat profil aplikasi dengan performa rilis.

<application>

  <profileable
     android:shell="true"
     tools:targetApi="29" />

</application>

Untuk mendapatkan informasi selengkapnya tentang fungsi <profileable>, lihat dokumentasi kami.

Hal terakhir yang dilakukan wizard adalah membuat scaffold untuk menjalankan benchmark pada waktu startup (yang akan kita kerjakan pada langkah berikutnya).

Sekarang Anda siap untuk mulai menulis benchmark.

5. Mengukur startup aplikasi

Waktu startup aplikasi, atau waktu yang diperlukan pengguna untuk mulai menggunakan aplikasi, adalah metrik utama yang memengaruhi engagement pengguna. Wizard modul membuat class pengujian ExampleStartupBenchmark yang mampu mengukur waktu startup aplikasi Anda dan terlihat sebagai berikut:

@RunWith