Pelacakan sering kali menjadi sumber informasi terbaik saat pertama kali melihat masalah performa. Pelacakan memungkinkan Anda membuat hipotesis tentang apa masalahnya dan tempat untuk mulai mencarinya.
Ada dua tingkat pelacakan yang didukung di Android: pelacakan sistem dan pelacakan metode.
Karena pelacakan sistem hanya melacak area yang ditandai secara khusus untuk pelacakan, pelacakan tersebut memiliki overhead rendah dan tidak terlalu memengaruhi performa aplikasi Anda. Pelacakan sistem sangat cocok untuk melihat berapa lama waktu yang dibutuhkan untuk menjalankan bagian tertentu dari kode Anda.
Pelacakan metode melacak setiap panggilan fungsi di aplikasi Anda. Pelacakan ini sangat mahal sehingga akan sangat memengaruhi performa aplikasi Anda, tetapi akan memberi Anda gambaran total tentang apa yang terjadi, fungsi apa yang dipanggil, dan seberapa sering fungsi tersebut dipanggil.
Secara default, pelacakan sistem tidak menyertakan fungsi composable individual. Fungsi tersebut tersedia di pelacakan metode.
Saat ini, kami sedang menguji fungsi pelacakan sistem baru untuk menampilkan fungsi composable di dalam pelacakan sistem. Hal ini memberi Anda gangguan rendah dari pelacakan sistem, dengan detail tingkat pelacakan metode dalam komposisi.
Menyiapkan pelacakan komposisi
Untuk mencoba pelacakan rekomposisi di project, Anda harus mengupdate setidaknya ke versi berikut:
- Android Studio Flamingo
- Compose UI: 1.3.0
- Compose Compiler: 1.3.0
Perangkat atau emulator tempat Anda menjalankan pelacakan juga harus memiliki API level minimum 30.
Selain itu, Anda perlu menambahkan dependensi baru pada Compose Runtime Tracing:
implementation("androidx.compose.runtime:runtime-tracing:1.7.5")
Jika menggunakan BOM Compose, Anda tidak perlu menentukan versi:
val composeBom = platform("androidx.compose:compose-bom:2024.10.01")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Dengan dependensi ini, saat Anda mengambil pelacakan sistem yang menyertakan rekomposisi, Anda dapat melihat fungsi composable secara otomatis.
Melakukan pelacakan sistem
Untuk melakukan pelacakan sistem dan melihat cara kerja pelacakan rekomposisi yang baru, ikuti langkah-langkah ini:
Buka profiler:
Klik CPU timeline
Pilih aplikasi Anda ke UI yang ingin dilacak, lalu pilih System Trace dan Record
Menggunakan aplikasi Anda untuk menyebabkan rekomposisi dan berhenti merekam. Setelah rekaman aktivitas diproses dan muncul, Anda akan dapat melihat composable di rekaman aktivitas rekomposisi. Anda dapat menggunakan keyboard dan mouse untuk memperbesar/memperkecil dan menggeser rekaman aktivitas. Jika sudah terbiasa menavigasi rekaman aktivitas, lihat dokumentasi Merekam aktivitas.
Mengklik dua kali composable di diagram akan mengarahkan Anda ke kode sumbernya.
Anda juga dapat melihat composable di Flame Chart beserta file dan nomor baris:
Peringatan
Overhead ukuran APK
Meskipun kami ingin meminimalkan overhead fitur sebanyak mungkin, terdapat peningkatan ukuran APK untuk aplikasi Compose yang berasal dari pelacakan string yang disematkan dalam APK oleh compiler Compose. Peningkatan ukuran ini relatif kecil jika aplikasi Anda tidak menggunakan banyak Compose atau lebih besar untuk aplikasi Compose lengkap. String pelacakan ini juga tidak di-obfuscate sehingga dapat muncul di alat pelacakan, seperti yang ditunjukkan sebelumnya. Compiler Compose memasukkannya ke semua aplikasi, mulai dari versi 1.3.0.
String pelacakan dapat dihapus dalam build produksi Anda dengan menambahkan aturan proguard berikut:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
Fungsi ini dapat berubah di masa mendatang, tetapi setiap perubahan akan disebutkan dalam catatan rilis Compose.
Perlu diketahui bahwa mempertahankan APK, meskipun menimbulkan biaya ukuran APK, menjamin bahwa APK yang diprofilkan sama dengan yang dijalankan pengguna aplikasi.
Pengaturan waktu yang akurat
Untuk pembuatan profil yang akurat, seperti pengujian performa lainnya, Anda harus membuat
profileable
dan non-debuggable
aplikasi sesuai dengan Aplikasi Profileable.
Mengambil rekaman aktivitas dari terminal
Anda dapat merekam aktivitas komposisi dari terminal. Untuk melakukannya, Anda harus melakukan langkah-langkah yang biasanya dilakukan Android Studio untuk Anda secara otomatis.
Menambahkan dependensi
Pertama, tambahkan dependensi tambahan ke aplikasi Anda.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Membuat perintah record
- Buat perintah record menggunakan fungsi di Perfetto.
Tambahkan bagian sumber data
track_event
secara manual sesuai contoh berikut:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
Mengambil rekaman aktivitas
- Luncurkan aplikasi dan siapkan bagian yang ingin direkam.
Aktifkan perekaman aktivitas di aplikasi dengan membuat siaran.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
Mulai perintah perekaman yang Anda buat sebelumnya.
Membuka rekaman aktivitas
adb pull <location>
rekaman aktivitas dari perangkat (lokasi yang ditentukan dalam perintah record).Buka di Perfetto.
Merekam aktivitas dengan Jetpack Macrobenchmark
Anda dapat mengukur performa dengan Jetpack Macrobenchmark, yang memberikan rekaman aktivitas sebagai hasilnya. Untuk mengaktifkan pelacakan komposisi dengan macrobenchmark, Anda harus:
Tambahkan dependensi tambahan ini ke modul pengujian Macrobenchmark:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Tambahkan argumen instrumentasi
androidx.benchmark.fullTracing.enable=true
sebelum menjalankan benchmark. Lihat Argumen instrumentasi Macrobenchmark untuk mengetahui informasi selengkapnya tentang argumen instrumentasi Macrobenchmark.
Masukan
Kami ingin mendengar masukan Anda terkait fitur ini, bug yang Anda temukan di dalamnya, dan permintaan apa pun yang Anda miliki. Anda dapat mengirimkan masukan kepada kami melalui issue tracker.