Pelacakan komposisi

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 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:

  1. Buka profiler:

    Android Studio - Mulai Profiling
    Gambar 2. Android Studio - Mulai Profiling
  2. Klik CPU timeline

    Android Studio Profiler - Linimasa CPU
    Gambar 3. Android Studio Profiler - Linimasa CPU
  3. Pilih aplikasi Anda ke UI yang ingin dilacak, lalu pilih System Trace dan Record

    Opsi pelacakan - Pelacakan sistem
    Gambar 4. Opsi pelacakan - Pelacakan sistem
  4. 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.

    Pelacakan sistem
    Gambar 5. Pelacakan sistem

    Mengklik dua kali composable di diagram akan mengarahkan Anda ke kode sumbernya.

  5. Anda juga dapat melihat composable di Flame Chart beserta file dan nomor baris:

    Flame chart
    Gambar 6. Flame chart

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

  1. Buat perintah record menggunakan fungsi di Perfetto.
  2. 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

  1. Luncurkan aplikasi dan siapkan bagian yang ingin direkam.
  2. 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
    
  3. Mulai perintah perekaman yang Anda buat sebelumnya.

Membuka rekaman aktivitas

  1. adb pull <location> rekaman aktivitas dari perangkat (lokasi yang ditentukan dalam perintah record).

  2. 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:

  1. 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")
    
  2. 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.