Perintah debug untuk pembuatan profil lokal

Saat menguji integrasi ProfilingManager secara lokal, permintaan mungkin dibatasi oleh pembatasan kapasitas atau trace latar belakang mungkin tidak aktif saat menguji pemicu. Gunakan perintah adb di halaman ini untuk menonaktifkan throttling, mengambil profil, mempertahankan rekaman aktivitas yang tidak diredaksi, memicu pengambilan, dan memeriksa status layanan di perangkat pengujian.

Menonaktifkan pembatas kapasitas

Untuk menonaktifkan proses aplikasi dan pembatas kapasitas sistem untuk permintaan requestProfiling selama pengujian lokal, jalankan perintah device_config berikut:

adb shell device_config put profiling_testing rate_limiter.disabled true

Setelah Anda selesai menguji, reset flag:

adb shell device_config delete profiling_testing rate_limiter.disabled

Mengambil profil menggunakan ADB

Untuk memeriksa profil yang diredaksi secara lokal di perangkat dengan akses root, jalankan adb pull dengan jalur yang ditampilkan oleh getResultFilePath:

# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>

Mempertahankan hasil sementara dan yang tidak diredaksi

Saat menguji pembuatan profil secara lokal, Anda dapat menyimpan hasil di direktori sementara di /data/misc/perfetto-traces/profiling/. Membandingkan pelacakan sistem yang tidak diredaksi dengan pelacakan sistem yang diredaksi akan membantu Anda memahami data apa yang dihapus selama penyuntingan.

Cara hasil sementara dan tidak disamarkan dipertahankan bergantung pada versi Android yang dijalankan perangkat Anda:

  • Android 16 (level API 36) dan yang lebih tinggi: Anda dapat mempertahankan hasil yang tidak diredaksi (jika berlaku) dan yang diredaksi di direktori sementara, yang diperluas di Android 16 agar dapat diakses menggunakan adb pull di semua jenis build tanpa akses root (sedangkan Android 15 memerlukan akses root untuk membaca /data/misc/perfetto-traces/profiling/). Untuk mencegah sistem menghapus hasil sementara, jalankan perintah berikut:

    adb shell device_config put profiling_testing delete_temporary_results.disabled true
    
  • Android 15 (level API 35): Di direktori sementara, Anda hanya dapat mempertahankan hasil yang tidak diredaksi, yang hanya dapat diakses melalui adb pada build dengan akses root. (Aplikasi Anda masih menerima profil yang disamarkan dalam direktori /data/user/0/<app>/files/profiling/-nya sendiri, yang dapat dibaca atau disalin oleh kode aplikasi Anda pada build apa pun, meskipun menarik langsung dari /data/user/0/... dengan adb pull memerlukan akses root, atau adb shell run-as <app> pada build yang dapat di-debug.) Untuk mencegah sistem menghapus trace yang tidak diredaksi, jalankan perintah berikut:

    adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
    

Setelah mengambil profil, ambil file yang dipertahankan dari direktori sementara:

# Pull a retained redacted profile (Android 16 and higher)
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.<profile-type-ext>

# Pull an unredacted system trace
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.perfetto-trace-unredacted

Dalam perintah ini, <trace-name> adalah nama file dasar (tanpa ekstensi) dari jalur yang ditampilkan oleh ProfilingResult.getResultFilePath, dan salinan pelacakan sistem yang tidak disamarkan menambahkan -unredacted ke ekstensi .perfetto-trace. Untuk mengetahui detail tentang struktur nama file dan nilai <profile-type-ext>, lihat Lokasi file dan format penamaan.

adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled

Mengaktifkan paksa trace latar belakang untuk pengujian pemicu

Karena pelacakan latar belakang sistem berjalan pada interval acak dalam produksi, pengujian pembuatan profil berbasis pemicu secara lokal dapat menjadi sulit. Untuk memaksa sistem menjalankan pelacakan latar belakang berkelanjutan dan mengabaikan pembatas kapasitas tingkat sistem untuk pemicu aplikasi Anda, tetapkan system_triggered_profiling.testing_package_name:

adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>

Periode tunggu per pemicu yang dikonfigurasi dengan setRateLimitingPeriodHours masih berlaku. Karena mode ini berjalan terus-menerus hingga Anda menghapusnya, hapus flag setelah Anda selesai menguji:

adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name

Perintah proses debug yang berguna

Di Android 16 (level API 36) dan yang lebih tinggi dengan versi modul Profiling terbaru, Anda dapat menggunakan alat cmd profiling_service melalui adb untuk mengaktifkan logging panjang, memicu pengumpulan profil on demand, dan menguji pemicu langsung dari command line.

Mengaktifkan logging debug panjang

Untuk mengaktifkan log ProfilingService mendetail di logcat serta mendiagnosis penanganan dan pengiriman permintaan, jalankan perintah berikut:

adb shell cmd profiling_service enable-logs true

Meminta pengumpulan profil on-demand

Untuk memulai pengambilan profil langsung untuk paket tertentu dari command line, jalankan perintah berikut:

adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]

Dalam perintah ini, <profiling_type> adalah nilai konstanta bilangan bulat dari ProfilingManager (1 untuk heap dump Java, 2 untuk profil heap, 3 untuk pengambilan sampel stack, atau 4 untuk pelacakan sistem). Proses aplikasi target harus berjalan untuk profil memori dan stack, permintaan tunduk pada pembatas kapasitas kecuali jika dinonaktifkan, dan ProfilingResult yang telah selesai hanya dikirimkan ke pemroses global yang terdaftar di registerForAllProfilingResults.

Mendaftarkan dan menyimulasikan pemicu

Untuk mendaftarkan pemicu atau mengaktifkan peristiwa pemicu simulasi untuk paket dan memverifikasi penanganan callback pemicu, jalankan perintah berikut:

adb shell cmd profiling_service add-trigger <trigger_type> <com.example.myapp> [--user <user_id>]
adb shell cmd profiling_service trigger <trigger_type> <com.example.myapp> [--user <user_id>]

Dalam perintah ini, <trigger_type> adalah nilai konstanta bilangan bulat dari ProfilingTrigger (misalnya, 1 untuk TRIGGER_TYPE_APP_FULLY_DRAWN, 2 untuk TRIGGER_TYPE_ANR, atau 7 untuk TRIGGER_TYPE_OOM). Menjalankan add-trigger akan mendaftarkan pemicu dengan cooldown 0 jam, menggantikan pendaftaran yang ada untuk jenis pemicu tersebut. Menyimulasikan pemicu yang menyimpan snapshot rekaman aktivitas latar belakang (seperti 1 atau 2) memerlukan rekaman aktivitas latar belakang yang aktif (lihat Mengaktifkan paksa rekaman aktivitas latar belakang untuk pengujian pemicu).

Mengumpulkan status ProfilingManager secara keseluruhan

Di Android 16 (level API 36) dan yang lebih tinggi dengan versi modul Profiling terbaru, Anda dapat menjalankan dumpsys terhadap profiling_service untuk mendiagnosis masalah dan memeriksa status ProfilingManager saat ini:

adb shell dumpsys profiling_service

Output dumpsys profiling_service hanya ditujukan untuk tujuan informasi dan proses debug, dan formatnya dapat berubah. Layanan ini memberikan ringkasan status internal layanan, termasuk:

  • Status throttling dan pembatas kapasitas yang aktif.
  • Konfigurasi perangkat aktif.
  • Pemicu aplikasi yang terdaftar dan periode tunggu pembatasan kapasitasnya.
  • Sesi pembuatan profil aktif dan dalam antrean.
  • Permintaan pembuatan profil terbaru, kemunculan pemicu, dan peristiwa pengiriman hasil.