Profil Dasar Pengukuran

Profil Dasar Pengukuran meningkatkan kecepatan eksekusi kode sekitar 30% sejak peluncuran pertama dengan menghindari langkah interpretasi dan kompilasi tepat waktu (JIT) untuk jalur kode yang disertakan. Dengan mengirimkan Profil Dasar Pengukuran dalam aplikasi atau library, Android Runtime (ART) dapat mengoptimalkan jalur kode yang disertakan melalui kompilasi Ahead of Time (AOT), yang memberikan peningkatan performa untuk setiap pengguna baru dan setiap update aplikasi. Pengoptimalan yang dipandu profil (PGO) ini memungkinkan aplikasi mengoptimalkan startup, mengurangi jank interaksi, dan meningkatkan performa runtime secara keseluruhan untuk pengguna akhir sejak peluncuran pertama.

Peningkatan kecepatan ini secara langsung menghasilkan metrik bisnis yang lebih baik seperti retensi pengguna, transaksi, dan rating. Anda dapat membaca selengkapnya tentang pengaruh performa terhadap metrik bisnis dalam cerita dari Josh, Lyft, TikTok, dan Zomato.

Manfaat Profil Dasar Pengukuran

Dengan Profil Dasar Pengukuran, semua interaksi pengguna (seperti memulai aplikasi, menavigasi antar-layar, atau men-scroll konten) lebih lancar sejak pertama dijalankan. Peningkatan kecepatan dan responsivitas aplikasi akan meningkatkan jumlah pengguna aktif harian dan rata-rata rasio kunjungan kembali yang lebih tinggi.

Profil Dasar Pengukuran membantu memandu pengoptimalan di luar startup aplikasi dengan menyediakan interaksi pengguna umum yang membuat runtime aplikasi efektif sejak peluncuran pertama. Kompilasi AOT yang dipandu tidak mengandalkan perangkat pengguna dan dapat dilakukan sekali per rilis pada mesin pengembangan, bukan perangkat seluler. Dengan mengirimkan rilis menggunakan Profil Dasar Pengukuran, pengoptimalan aplikasi akan tersedia jauh lebih cepat daripada hanya mengandalkan Profil Cloud.

Jika tidak menggunakan Profil Dasar Pengukuran, semua kode aplikasi dikompilasi secara JIT dalam memori setelah diinterpretasikan, atau menjadi file odex di latar belakang saat perangkat tidak ada aktivitas. Pengguna akan mendapatkan pengalaman yang kurang optimal saat pertama kali menjalankan aplikasi setelah menginstal atau mengupdatenya, hingga jalur baru dioptimalkan. Peningkatan performa ini telah diukur sekitar 30% untuk banyak aplikasi.

Memulai

Untuk mulai mengoptimalkan performa di aplikasi yang sudah ada, lihat Membuat Profil Dasar Pengukuran.

Rantai dependensi menyediakan versi rilis stabil dan versi rilis pengembangan. Untuk membuat dan menginstal Profil Dasar Pengukuran, Anda harus menggunakan setidaknya versi minimum Plugin Android Gradle, library Macrobenchmark, dan Penginstal Profil yang didukung. Dependensi ini diperlukan pada waktu yang berbeda, dan berfungsi bersama sebagai toolchain untuk mengaktifkan Profil Dasar Pengukuran yang optimal.

  • Plugin Android Gradle: com.android.tools.build:7.4.1
  • Macrobenchmark: androidx.benchmark:benchmark-macro-junit4:1.1.1
  • Penginstal Profil: androidx.profileinstaller:profileinstaller:1.2.2

Contoh pembuatan profil

Berikut adalah contoh class untuk membuat Profil Pengukuran Dasar untuk memulai aplikasi, serta beberapa peristiwa navigasi dan scroll menggunakan library Macrobenchmark yang direkomendasikan.

@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collectBaselineProfile(packageName = PACKAGE_NAME) {
            // App startup journey
            startActivityAndWait()

            device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
            device.findObject(By.res("myLazyColumn")).also {
                it.fling(Direction.DOWN)
                it.fling(Direction.UP)
            }
            device.pressBack()
        }
    }
}

Anda dapat melihat kode ini dalam konteks lengkap dan detail selengkapnya sebagai bagian dari contoh performa di GitHub.

Yang harus disertakan

Saat menggunakan Profil Dasar Pengukuran dalam aplikasi, Anda dapat menyertakan kode startup aplikasi dan interaksi pengguna umum, seperti navigasi antar-layar atau scroll. Anda juga dapat mengumpulkan seluruh flow seperti pendaftaran, login, atau pembayaran.

Library dapat menyediakan Profil Dasar Pengukurannya sendiri dan mengirimkannya sebagai bagian dari rilis untuk meningkatkan performa aplikasi. Untuk mengetahui contohnya, lihat Menggunakan Profil Dasar Pengukuran dengan Compose.

Cara kerja Profil Dasar Pengukuran

Saat mengembangkan aplikasi atau library, sebaiknya tentukan Profil Dasar Pengukuran untuk mencakup interaksi pengguna umum yang mementingkan waktu rendering atau latensi.

  1. Aturan profil dibuat untuk aplikasi Anda dalam bentuk yang dapat dibaca manusia dan dikompilasi ke dalam bentuk biner dalam aplikasi, yang dapat Anda temukan di assets/dexopt/baseline.prof. Kemudian, Anda dapat mengupload AAB ke Google Play seperti biasa.

  2. Google Play memproses profil dan mengirimkannya langsung kepada pengguna beserta APK. Selama penginstalan, ART melakukan kompilasi metode AOT di profil, sehingga metode tersebut dieksekusi lebih cepat. Jika profil berisi metode yang digunakan dalam peluncuran aplikasi atau selama rendering frame, pengguna mungkin akan mengalami waktu peluncuran yang lebih cepat dan mengurangi jank.

  3. Flow ini bekerja sama dengan agregasi Profil Cloud untuk meningkatkan kualitas performa berdasarkan penggunaan aplikasi yang sebenarnya dari waktu ke waktu.

Gambar 1. Diagram ini menampilkan alur kerja profil dasar pengukuran dari upload hingga pengiriman ke pengguna akhir, dan bagaimana alur kerja tersebut berkaitan dengan profil cloud.

Profil Cloud

Profil Cloud menawarkan bentuk PGO tambahan, yang digabungkan oleh Google Play Store dan didistribusikan untuk kompilasi waktu penginstalan, beserta Profil Dasar Pengukuran. Meskipun Profil Cloud dioperasikan oleh interaksi pengguna dengan aplikasi di dunia nyata, perlu waktu beberapa hari hingga beberapa minggu hingga update selesai didistribusikan, sehingga membatasi ketersediaannya. Jika hanya mengandalkan Profil Cloud, pengguna baru dan yang mengupdate aplikasi akan mengalami performa yang kurang optimal hingga profil siap dan didistribusikan. Selain itu, Profil Cloud hanya mendukung perangkat Android yang menjalankan Android 9 (API level 29) atau yang lebih baru dan saat ini hanya dapat diskalakan dengan baik untuk aplikasi yang memiliki basis pengguna yang cukup besar.

Perilaku kompilasi di seluruh versi Android

Versi Platform Android telah menggunakan pendekatan kompilasi aplikasi yang berbeda, masing-masing dengan kompromi performa yang terkait. Profil Dasar Pengukuran meningkatkan metode kompilasi sebelumnya dengan menyediakan profil untuk semua penginstalan.

Versi Android Metode kompilasi Cara pengoptimalan
5 hingga 6 (API level 21 hingga 23) AOT Penuh Seluruh aplikasi dioptimalkan selama penginstalan, sehingga menyebabkan waktu tunggu yang lama untuk menggunakan aplikasi, peningkatan penggunaan RAM dan ruang disk, serta waktu yang lebih lama untuk memuat kode dari disk, yang berpotensi meningkatkan waktu cold startup.
7 hingga 8.1 (API level 24 hingga 27) AOT Sebagian (Profil Dasar Pengukuran) Profil Dasar Pengukuran diinstal oleh androidx.profileinstaller saat pertama kali dijalankan, saat modul aplikasi menentukan dependensi ini. ART dapat meningkatkan hal ini lebih lanjut dengan menambahkan aturan profil tambahan selama penggunaan aplikasi dan mengompilasinya saat perangkat sedang tidak digunakan. Tindakan ini mengoptimalkan ruang dan waktu disk untuk memuat kode dari disk, sehingga mengurangi waktu tunggu aplikasi.
9 (API level 28) dan yang lebih tinggi AOT Sebagian (Profil Dasar Pengukuran + Cloud) Play menggunakan Profil Dasar Pengukuran selama penginstalan aplikasi untuk mengoptimalkan APK dan profil Cloud (jika tersedia). Setelah penginstalan, profil ART akan diupload ke Play dan digabungkan, lalu disediakan sebagai Profil Cloud kepada pengguna lain saat mereka menginstal atau mengupdate aplikasi.

Masalah Umum

Saat ini, menggunakan Profil Dasar Pengukuran memiliki beberapa masalah umum:

  • Profil Dasar Pengukuran tidak dikemas dengan benar saat membuat APK dari app bundle. Untuk mengatasi masalah ini, terapkan com.android.tools.build:gradle:7.3.0 dan yang lebih tinggi (masalah).

  • Profil Dasar Pengukuran hanya dikemas dengan benar untuk file classes.dex utama. Hal ini memengaruhi aplikasi yang memiliki lebih dari satu file .dex. Untuk mengatasi masalah ini, terapkan com.android.tools.build:gradle:7.3.0 dan yang lebih tinggi.

  • Mereset cache profil ART tidak diizinkan di build user (non-root). Untuk mengatasi hal ini, androidx.benchmark:benchmark-macro-junit4:1.1.0 menyertakan perbaikan yang menginstal ulang aplikasi selama benchmark (masalah).

  • Profiler Android Studio tidak menginstal Profil Dasar Pengukuran saat membuat profil aplikasi (masalah).

  • Sistem build non-Gradle (Bazel, Buck, dll.) saat ini tidak mendukung kompilasi Profil Dasar Pengukuran menjadi APK output.

  • Saluran distribusi aplikasi non-Play Store mungkin tidak mendukung penggunaan Profil Dasar Pengukuran saat penginstalan. Pengguna aplikasi melalui saluran ini tidak mendapatkan manfaat hingga dexopt latar belakang dijalankan (kemungkinan dalam semalam).

  • Saat ini, compiler build hanya menerima satu baseline-prof.txt di folder src/main dan tidak mencerminkan file dalam berbagai ragam atau jenis build. Hal ini sedang diperbaiki secara aktif.

  • Pengoptimalan baterai dapat mengganggu penginstalan profil. Untuk memastikan profil Anda diinstal secara efektif, nonaktifkan pengoptimalan baterai di perangkat tolok ukur Anda.

  • Peningkatan performa dapat berbeda antara tolok ukur dan produksi. Hal ini terjadi karena tolok ukur lokal mengukur performa dengan Profil Dasar Pengukuran diaktifkan atau dinonaktifkan. Di aplikasi produksi, pengukuran semakin bertambah saat Anda menambahkan bagian baru aplikasi ke Profil Dasar Pengukuran, tempat bagian sudah dibuat profilnya melalui library yang berkontribusi.