lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

Memeriksa Aktivitas CPU dan Pelacakan Metode dengan CPU Profiler

CPU Profiler membantu Anda memeriksa penggunaan CPU oleh aplikasi Anda dan aktivitas thread secara real-time, serta merekam pelacakan metode, sehingga Anda bisa mengoptimalkan dan men-debug kode aplikasi.

Untuk membuka CPU Profiler, ikuti langkah-langkah ini:

  1. Klik View > Tool Windows > Android Profiler (Anda juga bisa mengklik Android Profiler di toolbar).
  2. Pilih perangkat dan proses aplikasi yang ingin Anda buat profilnya dari toolbar Android Profiler. Jika Anda menghubungkan perangkat melalui USB namun tidak melihatnya dicantumkan, pastikan Anda telah mengaktifkan proses debug USB.
  3. Klik di mana saja di timeline CPU untuk membuka CPU Profiler.

Mengapa Anda harus membuat profil penggunaan CPU

Meminimalkan penggunaan CPU oleh aplikasi Anda memiliki banyak keuntungan—misalnya memberikan pengalaman pengguna yang lebih cepat dan lebih mulus, serta menghemat masa pakai baterai perangkat. Hal ini juga membantu aplikasi Anda berjalan dengan baik pada berbagai perangkat lama maupun baru. Anda bisa menggunakan CPU profiler untuk memantau penggunaan CPU dan aktivitas thread saat berinteraksi dengan aplikasi Anda. Akan tetapi, untuk informasi lebih detail tentang cara aplikasi Anda mengeksekusi kodenya, Anda harus merekam dan memeriksa pelacakan metode.

Untuk setiap thread dalam proses aplikasi, Anda bisa mengetahui metode mana yang dieksekusi dalam satu jangka waktu dan sumber daya CPU yang dihabiskan oleh setiap metode selama eksekusinya. Anda juga bisa menggunakan pelacakan metode untuk mengidentifikasi pemanggil dan yang dipanggil. Pemanggil adalah metode yang memanggil metode lain, dan yang dipanggil adalah metode yang dipanggil oleh metode lain. Anda bisa menggunakan informasi ini untuk mengetahui metode mana yang bertanggung jawab memanggil tugas yang banyak menghabiskan sumber daya tertentu terlalu sering dan mencoba mengoptimalkan kode aplikasi untuk menghindari pekerjaan yang sebenarnya tidak perlu.

Jika Anda ingin mengumpulkan data detail tingkat sistem yang membantu Anda memeriksa proses sistem bawaan dan menangani UI yang lelet akibat bingkai yang menurun, maka Anda harus menggunakan systrace.

Atau, jika Anda ingin mengekspor file .trace yang Anda rekam menggunakan kelas Debug, maka Anda harus menggunakan Traceview.

Ringkasan CPU Profiler

Bila dibuka, CPU Profiler akan langsung mulai menampilkan penggunaan CPU dan aktivitas thread aplikasi Anda. Anda akan melihat tampilan seperti gambar 1.

Gambar 1. CPU Profiler.

Sebagaimana ditunjukkan dalam gambar 1, tampilan default untuk CPU Profiler menyertakan yang berikut ini:

  1. Event timeline: Menampilkan aktivitas dalam aplikasi Anda saat bertransisi melalui berbagai keadaan dalam daur hidupnya, dan menunjukkan interaksi pengguna dengan perangkat, termasuk event rotasi layar. Untuk mempelajari lebih lanjut tentang event timeline, termasuk cara mengaktifkannya, bacalah Mengaktifkan pembuatan profil lanjutan.
  2. CPU timeline: Menampilkan penggunaan CPU secara realtime oleh aplikasi Anda—berupa persentase total waktu CPU yang tersedia—dan total jumlah thread yang digunakan aplikasi Anda. Timeline juga menampilkan penggunaan CPU oleh proses lainnya (misalnya proses sistem atau aplikasi lainnya), sehingga Anda bisa membandingkannya dengan penggunaan oleh aplikasi Anda. Anda bisa memeriksa data penggunaan CPU secara historis dengan menggerakkan mouse di sepanjang sumbu horizontal timeline.
  3. Timeline aktivitas thread: Daftar setiap thread yang dimiliki proses aplikasi Anda dan menunjukkan aktivitasnya sepanjang timeline dengan menggunakan warna yang tercantum di bawah ini. Setelah merekam sebuah pelacakan metode, Anda bisa memilih sebuah thread dari timeline ini untuk memeriksa datanya di panel pelacakan.
    • Hijau: Thread aktif atau siap menggunakan CPU. Yaitu, dalam keadaan 'berjalan' atau 'dapat dijalankan'.
    • Kuning: Thread aktif, namun sedang menunggu di operasi I/O, misalnya I/O disk atau jaringan, sebelum bisa menyelesaikan pekerjaannya.
    • Abu-abu: Thread sedang tidur dan tidak sedang menggunakan waktu CPU. Ini kadang-kadang terjadi bila thread memerlukan akses ke sumber daya yang belum tersedia. Thread akan tidur dengan sendirinya, atau kernel akan menidurkan thread hingga tersedia sumber daya yang diperlukannya.
  4. Konfigurasi perekaman: Memungkinkan Anda memilih salah satu opsi berikut untuk mengetahui cara profiler merekam suatu pelacakan metode.
    • Bersampel: Konfigurasi default yang merekam tumpukan panggilan aplikasi Anda pada interval yang sering selama eksekusi aplikasi. Profiler akan membandingkan seperangkat data yang telah direkam untuk memperoleh informasi pengaturan waktu dan penggunaan sumber daya dalam eksekusi kode aplikasi Anda. Masalah inheren pelacakan berbasis sampel adalah jika aplikasi Anda memasuki suatu metode setelah perekaman tumpukan panggilan dan keluar dari metode tersebut sebelum perekaman berikutnya, panggilan metode itu tidak akan dicatat dalam log oleh profiler. Jika Anda tertarik melacak metode dengan daur hidup yang singkat, maka Anda harus menggunakan pelacakan berinstrumen.
    • Instrumented: Konfigurasi default yang menginstrumentasikan aplikasi Anda pada waktu proses untuk merekam stempel waktu di awal dan akhir setiap panggilan metode. Stempel waktu dikumpulkan dan dibandingkan untuk menghasilkan data pelacakan metode, termasuk informasi pengaturan waktu dan penggunaan CPU. Perhatikan, overhead yang berkaitan dengan instrumentasi setiap metode akan memengaruhi kinerja waktu proses dan mungkin akan memengaruhi data pembuatan profil—hal ini bahkan lebih kentara untuk metode yang daur hidupnya relatif singkat. Selain itu, jika aplikasi Anda mengeksekusi banyak metode dalam waktu singkat, profiler mungkin dengan cepat akan melebihi batas ukuran file-nya dan tidak dapat merekam data pelacakan lebih jauh.
    • Edit configurations: Memungkinkan Anda mengubah default tertentu dari konfigurasi perekaman bersampel dan berinstrumentasi yang dijelaskan di atas, serta menyimpannya sebagai konfigurasi khusus. Untuk mempelajari lebih lanjut, masuklah ke bagian tentang membuat konfigurasi perekaman.
  5. Tombol rekam: Memulai dan menghentikan perekaman pelacakan metode. Untuk mempelajari lebih lanjut, masuklah ke bagian tentang merekam dan memeriksa pelacakan metode.

Catatan: Profiler juga melaporkan penggunaan CPU oleh thread yang ditambahkan Android Studio dan platform Android ke proses aplikasi Anda—misalnya JDWP, Profile Saver, Studio:VMStats, Studio:Perfa, dan Studio:Heartbeat (walaupun, nama persis yang ditampilkan dalam timeline aktivitas thread mungkin bervariasi). Ini berarti penggunaan CPU oleh aplikasi Anda di timeline CPU juga melaporkan waktu CPU yang digunakan oleh thread ini. Anda bisa melihat sebagian dari thread ini dalam timeline aktivitas thread serta memantau aktivitasnya. (Akan tetapi, karena thread profiler mengeksekusi kode bawaan, maka Anda tidak bisa merekam data pelacakan metode untuknya.) Android Studio melaporkan data ini agar Anda bisa dengan mudah mengidentifikasi kapan aktivitas thread dan penggunaan CPU benar-benar disebabkan oleh kode aplikasi Anda.

Merekam dan memeriksa pelacakan metode

Untuk mulai merekam pelacakan metode, pilih konfigurasi perekaman Sampled atau Instrumented, atau konfigurasi perekaman khusus yang telah Anda buat, dari menu drop-down dan klik Record . Berinteraksilah dengan aplikasi Anda dan klik Stop recording setelah selesai. Profiler secara otomatis memilih jangka waktu yang telah direkam dan menampilkan informasi pelacakannya dalam panel pelacakan metode, seperti yang ditampilkan dalam gambar 2. Jika Anda ingin memeriksa pelacakan metode untuk thread berbeda, tinggal memilihnya dari timeline aktivitas thread.

Gambar 2. CPU Profiler setelah merekam pelacakan metode.

  1. Jangka waktu yang dipilih: Menentukan bagian jangka waktu yang direkam yang ingin Anda periksa dalam panel pelacakan. Bila Anda terlebih dahulu merekam pelacakan metode, CPU Profiler secara otomatis memilih keseluruhan panjang rekaman Anda di timeline CPU. Jika Anda ingin memeriksa data pelacakan metode hanya untuk sebagian jangka waktu yang direkam, Anda bisa mengklik dan menyeret tepi region yang disorot untuk memodifikasi panjangnya.
  2. Stempel waktu: Menunjukkan waktu awal dan akhir pelacakan metode yang direkam (relatif terhadap waktu profiler mulai mengumpulkan informasi penggunaan CPU dari perangkat Anda). Anda bisa mengklik stempel waktu untuk secara otomatis memilih keseluruhan rekaman sebagai jangka waktu pilihan Anda—ini khususnya berguna jika Anda ingin berpindah-pindah di antara banyak rekaman yang dimiliki.
  3. Panel pelacakan: Menampilkan data pelacakan metode untuk jangka waktu dan thread yang telah Anda pilih. Panel ini hanya muncul setelah Anda merekam setidaknya satu pelacakan metode. Di panel ini, Anda bisa memilih bagaimana Anda ingin menampilkan setiap pelacakan tumpukan (dengan menggunakan tab jejak) dan bagaimana Anda ingin mengukur waktu eksekusi (dengan menggunakan menu drop-down referensi waktu).
  4. Pilih untuk menampilkan pelacakan metode Anda sebagai pohon Top Down, pohon Bottom Up , Call Chart, atau Flame Chart. Anda bisa mempelajari lebih lanjut tentang setiap tab panel pelacakan di bagian di bawah ini.
  5. Pilih salah satu opsi berikut dari menu drop-down untuk mengetahui cara mengukur informasi pengaturan waktu untuk setiap panggilan metode:
    • Wall Clock Time: informasi pengaturan waktu menyatakan waktu sesungguhnya yang dihabiskan.
    • Thread Time: informasi pengaturan waktu menyatakan waktu sesungguhnya yang dihabiskan dikurangi bagian waktu ketika thread tidak menggunakan sumber daya CPU. Untuk metode tertentu, waktu thread-nya selalu kurang dari atau sama dengan waktu jam dindingnya. Penggunaan waktu thread memberi Anda pemahaman yang lebih baik mengenai banyaknya penggunaan CPU sesungguhnya oleh thread melalui metode tertentu.

Memeriksa jejak dengan menggunakan tab Call Chart

Tab Call Chart menyediakan representasi grafik dari pelacakan metode, dalam hal ini periode dan pengaturan waktu panggilan metode (atau pemanggil) dinyatakan dalam sumbu horizontal, dan yang dipanggilnya ditampilkan di sepanjang sumbu vertikal. Panggilan metode ke API sistem ditampilkan dalam warna oranye, panggilan ke metode sendiri aplikasi Anda ditampilkan dalam warna hijau, dan panggilan metode ke API pihak ketiga (termasuk API bahasa Java) ditampilkan dalam warna biru. Gambar 3 di bawah ini menampilkan contoh bagan panggilan dan mengilustrasikan konsep waktu sendiri, waktu anak, dan total waktu untuk metode tertentu. Anda akan mempelajari lebih lanjut semua konsep ini di bagian tentang cara memeriksa jejak menggunakan Top Down dan Bottom Up.

Gambar 3. Contoh Call Chart yang mengilustrasikan waktu sendiri, waktu anak, dan total waktu untuk metode D.

Tips: Untuk lompat ke kode sumber suatu metode, klik-kanan pada metode tersebut dan pilih Jump to Source. Cara ini dapat digunakan dari salah satu tab panel pelacakan.

Memeriksa jejak dengan menggunakan tab Flame Chart

Tab Flame Chart menyediakan Call Chart terbalik yang menggabungkan tumpukan panggilan identik. Yaitu, metode identik yang sama-sama menggunakan urutan pemanggil yang sama dikumpulkan dan dinyatakan sebagai satu bilah lebih panjang dalam Flame Chart (bukan menampilkannya sebagai beberapa bilah yang lebih pendek, seperti yang ditampilkan dalam Call Chart). Ini akan memudahkan dalam mengetahui metode mana yang paling banyak menghabiskan waktu. Akan tetapi, hal ini juga berarti sumbu horizontal tidak lagi menyatakan timeline—melainkan menunjukkan jumlah waktu relatif yang diperlukan untuk mengeksekusi setiap metode.

Untuk membantu mengilustrasikan konsep ini, perhatikan Call Chart dalam gambar 4 di bawah. Perhatikan, metode D membuat beberapa panggilan ke B (B1, B2, dan B3), serta sebagian dari panggilan itu ke B membuat panggilan ke C (C1 dan C3).

Gambar 4. Sebuah Call Chart dengan banyak panggilan metode yang berbagi urutan pemanggil bersama.

Karena B1, B2, dan B3 berbagi urutan pemanggil yang sama (A → D → B) maka semua digabung, seperti yang ditampilkan di bawah ini. Demikian pula, C1 dan C3 digabung karena semuanya berbagi urutan pemanggil yang sama (A → D → B → C)—perhatikan, C2 tidak disertakan karena memiliki urutan pemanggil yang berbeda (A → D → C).

Gambar 5. Menggabung metode identik yang berbagi tumpukan panggilan yang sama.

Panggilan metode gabungan digunakan untuk membuat Flame Chart, seperti yang ditampilkan dalam gambar 6. Perhatikan, untuk panggilan metode tertentu dalam Flame Chart, metode yang dipanggil yang menggunakan waktu CPU paling banyak akan muncul terlebih dahulu.

Gambar 6. Sebuah representasi Flame Chart dari Call Chart yang ditampilkan dalam gambar 4.

Memeriksa jejak dengan menggunakan Top Down dan Bottom Up

Tab Top Down menampilkan daftar panggilan metode dengan node metode diperluas yang menampilkan metode yang dipanggilnya. Gambar 7 menampilkan grafik atas-ke-bawah untuk Call Chart dalam gambar 3. Setiap panah di grafik menunjuk dari metode pemanggil ke metode yang dipanggil.

Seperti yang ditampilkan dalam gambar 7, meluaskan node untuk metode A di tab Top Down akan menampilkan metode yang dipanggilnya, yaitu metode B dan D. Setelah itu, meluaskan node untuk metode D akan menunjukkan metode yang dipanggilnya, metode B dan C, dan seterusnya. Demikian pula dengan tab Flame Chart, pohon atas-ke-bawah menggabungkan informasi jejak untuk metode identik yang berbagi tumpukan panggilan yang sama. Yaitu, tab Flame Chart menyediakan representasi grafik dari tab Top Down.

Tab Top Down menyediakan informasi berikut untuk membantu menjelaskan waktu CPU yang dihabiskan pada setiap panggilan metode (waktu juga dinyatakan berupa persentase total waktu thread selama durasi jangka waktu yang dipilih):

  • Sendiri: jumlah waktu yang dihabiskan panggilan metode untuk mengeksekusi kodenya sendiri dan bukan kode milik metode yang dipanggilnya, sebagaimana diilustrasikan dalam gambar 3 untuk metode D.
  • Anak: jumlah waktu yang dihabiskan panggilan metode untuk mengeksekusi metode yang dipanggilnya dan bukan kode miliknya sendiri, sebagaimana diilustrasikan dalam gambar 3 untuk metode D.
  • Total: jumlah waktu dari Sendiri dan Anak metode. Ini menyatakan total jumlah waktu yang dihabiskan aplikasi untuk mengeksekusi panggilan metode, sebagaimana diilustrasikan dalam gambar 3 untuk metode D.

Gambar 7. Pohon Top Down.

Gambar 8. Pohon Bottom Up untuk metode C dari gambar 7.

Tab Bottom Up menampilkan daftar panggilan metode dengan node metode diperluas yang menampilkan pemanggilnya. Dengan menggunakan contoh jejak yang ditampilkan dalam gambar 7, gambar 8 menyediakan pohon Bottom Up untuk metode C. Membuka node untuk metode C di pohon Bottom Up akan menampilkan setiap pemanggil uniknya, yaitu metode B dan D. Perhatikan, walaupun B memanggil C dua kali, B hanya muncul sekali saat meluaskan node untuk metode C di pohon Bottom Up. Setelah itu, meluaskan node untuk B akan menampilkan pemanggilnya, yaitu metode A dan D.

Tab Bottom Up berguna untuk mengurutkan metode berdasarkan mana yang paling banyak (atau sedikit) menghabiskan waktu CPU. Anda juga bisa memeriksa setiap node untuk mengetahui pemanggil mana yang paling banyak menghabiskan waktu CPU saat memanggil metode itu. Dibandingkan pohon Top Down, informasi pengaturan waktu untuk setiap metode di pohon Bottom Up berhubungan dengan metode di bagian atas setiap pohon (node atas). Waktu CPU juga dinyatakan sebagai persentase total waktu thread selama perekaman itu. Tabel berikut ini membantu menjelaskan cara menafsirkan informasi pengaturan waktu untuk node atas dan metode pemanggilnya (sub-node).

Sendiri Anak Total
Metode di bagian atas pohon bottom up (node atas) Menyatakan total jumlah waktu yang dihabiskan metode untuk mengeksekusi kode miliknya sendiri dan bukan kode milik metode yang dipanggilnya. Dibandingkan dengan pohon top down, informasi pengaturan waktu ini menyatakan jumlah semua panggilan ke metode ini selama durasi perekaman. Menyatakan total jumlah waktu yang dihabiskan metode untuk mengeksekusi metode yang dipanggilnya dan bukan kode miliknya sendiri. Dibandingkan dengan pohon top down, informasi pengaturan waktu ini menyatakan jumlah semua panggilan ke metode yang dipanggil metode ini selama durasi perekaman. Jumlah waktu milik sendiri dan waktu milik anak.
Metode pemanggil (sub-node) Menyatakan total waktu sendiri dari metode yang dipanggil saat dipanggil oleh pemanggil. Dengan menggunakan pohon bottom up dalam gambar 8 sebagai contoh, waktu sendiri untuk metode B akan sama dengan jumlah waktu sendiri untuk setiap eksekusi metode C saat dipanggil oleh B. Menyatakan total waktu anak dari metode yang dipanggil saat sedang dipanggil oleh pemanggil. Dengan menggunakan pohon bottom up dalam gambar 8 sebagai contoh, waktu anak untuk metode B akan sama dengan jumlah waktu anak untuk setiap eksekusi metode C saat dipanggil oleh B. Jumlah waktu milik sendiri dan waktu milik anak.

Catatan: Untuk perekaman tertentu, Android Studio menghentikan pengumpulan data baru bila profiler mencapai batas ukuran file (akan tetapi, hal ini tidak menghentikan perekaman). Ini biasanya terjadi jauh lebih cepat saat melakukan pelacakan berinstrumen karena tipe pelacakan ini mengumpulkan lebih banyak data dalam waktu lebih singkat dibandingkan pelacakan bersampel. Jika Anda memperpanjang jangka waktu pemeriksaan ke periode perekaman yang terjadi setelah mencapai batas, data pengaturan waktu di panel pelacakan tidak akan berubah (karena tidak ada data baru yang tersedia). Selain itu, panel pelacakan akan menampilkan NaN untuk informasi pengaturan waktu bila Anda memilih hanya suatu bagian perekaman yang tidak berisi data.

Membuat konfigurasi perekaman

Anda bisa memilih salah satu konfigurasi perekaman yang disediakan Android Studio untuk Anda, misalnya Sampled atau Instrumented, atau membuatnya sendiri. Untuk membuat atau mengedit konfigurasi khusus, atau memeriksa konfigurasi default yang ada, bukalah dialog CPU Recording Configurations dengan memilih Edit configurations dari menu drop-down konfigurasi perekaman.

Gambar 9. Dialog CPU Recording Configurations memungkinkan Anda membuat atau mengedit konfigurasi perekaman khusus, atau memeriksa konfigurasi default yang ada.

Anda bisa memeriksa setelan konfigurasi yang ada dengan memilihnya dari panel kiri, atau membuat konfigurasi perekaman baru seperti berikut:

  1. Klik Add di bagian kiri atas dialog. Ini akan membuat konfigurasi baru dengan beberapa setelan default.
  2. Namai konfigurasi Anda.
  3. Pilih Sampled atau Instrumented di bagian Trace Technology. Masing-masing opsi ini bekerja seperti yang dijelaskan dalam Ringkasan CPU Profiler.
  4. Untuk konfigurasi perekaman bersampel, tetapkan Sampling interval dalam mikrodetik (μs). Nilai ini menyatakan durasi antara setiap sampel tumpukan panggilan aplikasi Anda. Ingat, semakin singkat durasi yang Anda tetapkan, semakin cepat Anda mencapai batas ukuran file untuk data yang direkam.
  5. Tetapkan File size limit, dalam megabyte (MB), untuk data rekaman yang dituliskan ke perangkat terhubung. Bila Anda menghentikan perekaman, Android Studio akan mengurai data ini dan menampilkannya dalam jendela profiler. Jadi, jika Anda menambah batas dan merekam data dalam jumlah besar, Android Studio akan butuh waktu lebih lama lagi untuk mengurai file tersebut dan mungkin menjadi tidak responsif.

    Catatan: Jika Anda menggunakan perangkat terhubung yang menjalankan API level 26 atau yang lebih tinggi, maka tidak ada batas untuk ukuran file data pelacakan, dan nilai ini diabaikan. Akan tetapi, Anda tetap perlu berhati-hati dengan berapa banyak data yang dikumpulkan perangkat setelah setiap perekaman—Android Studio mungkin kesulitan mengurai file pelacakan yang besar. Misalnya, jika Anda merekam pelacakan bersampel dengan interval sampling yang singkat atau pelacakan berinstrumen saat aplikasi Anda memanggil banyak metode dalam waktu singkat, Anda akan menghasilkan file jejak yang besar dengan cepat.

  6. Klik Apply atau OK. Jika Anda telah membuat perubahan pada konfigurasi perekaman lainnya, perubahan itu juga akan diterapkan.

Setelah membuat konfigurasi baru, konfigurasi itu secara otomatis akan dipilih dari menu drop-down konfigurasi perekaman dan Anda bisa menggunakannya untuk perekaman berikutnya.