Halaman ini menunjukkan cara merekam rekaman aktivitas sistem menggunakan ProfilingManager
API.
Menambahkan dependensi
Untuk mendapatkan pengalaman terbaik dengan ProfilingManager
API, tambahkan library Jetpack berikut ke file build.gradle.kts
Anda.
Kotlin
dependencies { implementation("androidx.tracing:tracing:1.3.0") implementation("androidx.core:core:1.16.0") }
Groovy
dependencies { implementation 'androidx.tracing:tracing:1.3.0' implementation 'androidx.core:core:1.16.0' }
Merekam pelacakan sistem
Setelah menambahkan dependensi yang diperlukan, gunakan kode berikut untuk merekam rekaman aktivitas sistem. Contoh ini menunjukkan penyiapan dasar dalam Activity
untuk memulai dan mengelola sesi pembuatan profil.
Kotlin
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) fun sampleRecordSystemTrace() { val mainExecutor: Executor = Dispatchers.IO.asExecutor() // Your choice of executor for the callback to occur on. val resultCallback = Consumer<ProfilingResult> { profilingResult -> if (profilingResult.errorCode == ProfilingResult.ERROR_NONE) { Log.d( "ProfileTest", "Received profiling result file=" + profilingResult.resultFilePath ) } else { Log.e( "ProfileTest", "Profiling failed errorcode=" + profilingResult.errorCode + " errormsg=" + profilingResult.errorMessage ) } } val stopSignal = CancellationSignal() val requestBuilder = SystemTraceRequestBuilder() requestBuilder.setCancellationSignal(stopSignal) requestBuilder.setTag("FOO") // Caller supplied tag for identification requestBuilder.setDurationMs(60000) requestBuilder.setBufferFillPolicy(BufferFillPolicy.RING_BUFFER) requestBuilder.setBufferSizeKb(20971520) requestProfiling(applicationContext, requestBuilder.build(), mainExecutor, resultCallback) // Wait some time for profiling to start. Trace.beginSection("MyApp:HeavyOperation") heavyOperation() Trace.endSection() // Once the interesting code section is profiled, stop profile stopSignal.cancel() } fun heavyOperation() { // Computations you want to profile }
Java
void heavyOperation() { // Computations you want to profile } void sampleRecordSystemTrace() { Executor mainExecutor = Executors.newSingleThreadExecutor(); Consumer<ProfilingResult> resultCallback = new Consumer<ProfilingResult>() { @Override public void accept(ProfilingResult profilingResult) { if (profilingResult.getErrorCode() == ProfilingResult.ERROR_NONE) { Log.d( "ProfileTest", "Received profiling result file=" + profilingResult.getResultFilePath()); } else { Log.e( "ProfileTest", "Profiling failed errorcode=" + profilingResult.getErrorCode() + " errormsg=" + profilingResult.getErrorMessage()); } } }; CancellationSignal stopSignal = new CancellationSignal(); SystemTraceRequestBuilder requestBuilder = new SystemTraceRequestBuilder(); requestBuilder.setCancellationSignal(stopSignal); requestBuilder.setTag("FOO"); requestBuilder.setDurationMs(60000); requestBuilder.setBufferFillPolicy(BufferFillPolicy.RING_BUFFER); requestBuilder.setBufferSizeKb(20971520); Profiling.requestProfiling(getApplicationContext(), requestBuilder.build(), mainExecutor, resultCallback); // Wait some time for profiling to start. Trace.beginSection("MyApp:HeavyOperation"); heavyOperation(); Trace.endSection(); // Once the interesting code section is profiled, stop profile stopSignal.cancel(); }
Kode contoh menyiapkan dan mengelola sesi pembuatan profil dengan melakukan langkah-langkah berikut:
Siapkan eksekutor. Buat
Executor
untuk menentukan thread yang akan menerima hasil pembuatan profil. Pembuatan profil terjadi di latar belakang. Menggunakan eksekutor thread non-UI membantu mencegah error Aplikasi Tidak Merespons (ANR) jika Anda menambahkan lebih banyak pemrosesan ke callback nanti.Menangani hasil pembuatan profil. Buat objek
Consumer<ProfilingResult>
. Sistem menggunakan objek ini untuk mengirim hasil pembuatan profil dariProfilingManager
kembali ke aplikasi Anda.Buat permintaan pembuatan profil. Buat
SystemTraceRequestBuilder
untuk menyiapkan sesi pembuatan profil Anda. Builder ini memungkinkan Anda menyesuaikan setelan rekaman aktivitasProfilingManager
. Penyesuaian builder bersifat opsional; jika tidak dilakukan, sistem akan menggunakan setelan default.- Tentukan tag. Gunakan
setTag()
untuk menambahkan tag ke nama rekaman aktivitas. Tag ini membantu Anda mengidentifikasi rekaman aktivitas. - Opsional: Tetapkan durasi. Gunakan
setDurationMs()
untuk menentukan durasi pembuatan profil dalam milidetik. Misalnya,60000
menetapkan rekaman aktivitas 60 detik. Perekaman aktivitas akan otomatis berakhir setelah durasi yang ditentukan jikaCancellationSignal
tidak dipicu sebelum itu. - Pilih kebijakan buffer. Gunakan
setBufferFillPolicy()
untuk menentukan cara penyimpanan data rekaman aktivitas.BufferFillPolicy.RING_BUFFER
berarti bahwa saat buffer penuh, data baru akan menggantikan data terlama, sehingga mencatat aktivitas terbaru secara berkelanjutan. - Tetapkan ukuran buffer. Gunakan
setBufferSizeKb()
untuk menentukan ukuran buffer untuk pelacakan yang dapat Anda gunakan untuk mengontrol ukuran file rekaman aktivitas output.
- Tentukan tag. Gunakan
Opsional: Kelola siklus proses sesi. Buat
CancellationSignal
. Objek ini memungkinkan Anda menghentikan sesi pembuatan profil kapan pun Anda mau, sehingga Anda dapat mengontrol durasinya secara tepat.Mulai dan terima hasil. Saat Anda memanggil
requestProfiling()
,ProfilingManager
akan memulai sesi pembuatan profil di latar belakang. Setelah pembuatan profil selesai,ProfilingResult
akan dikirim ke metoderesultCallback#accept
Anda. Jika pembuatan profil berhasil diselesaikan,ProfilingResult
akan memberikan jalur tempat rekaman aktivitas disimpan di perangkat Anda melaluiProfilingResult#getResultFilePath
. Anda bisa mendapatkan file ini secara terprogram atau, untuk pembuatan profil lokal, dengan menjalankanadb pull <trace_path>
dari komputer Anda.Tambahkan titik rekaman aktivitas kustom. Anda dapat menambahkan titik rekaman aktivitas kustom dalam kode aplikasi Anda. Dalam contoh kode sebelumnya, slice rekaman aktivitas bernama
MyApp:HeavyOperation
ditambahkan menggunakanTrace.beginSection()
danTrace.endSection()
. Slice kustom ini muncul di profil yang dihasilkan, menyoroti operasi tertentu dalam aplikasi Anda.