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 pulldi 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 trueAndroid 15 (level API 35): Di direktori sementara, Anda hanya dapat mempertahankan hasil yang tidak diredaksi, yang hanya dapat diakses melalui
adbpada 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/...denganadb pullmemerlukan akses root, atauadb 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.