Memeriksa aktivitas CPU dengan CPU Profiler

Mengoptimalkan penggunaan CPU aplikasi Anda memiliki banyak keuntungan, misalnya memberikan pengalaman pengguna yang lebih cepat dan lebih lancar, serta menghemat masa pakai baterai perangkat.

Anda dapat menggunakan CPU Profiler untuk memeriksa penggunaan CPU dan aktivitas thread aplikasi Anda secara real time saat berinteraksi dengan aplikasi Anda, atau Anda dapat memeriksa detailnya di rekaman pelacakan metode, aktivitas fungsi, dan pelacakan sistem.

Jenis informasi spesifik yang direkam dan ditampilkan oleh CPU Profiler ditentukan oleh konfigurasi perekaman yang Anda pilih:

  • System Trace: Merekam detail akurat yang memungkinkan Anda memeriksa cara aplikasi Anda berinteraksi dengan resource sistem.
  • Method and function traces: Untuk setiap thread dalam proses aplikasi, Anda dapat mencari tahu metode (Java) atau fungsi (C/C++) mana yang dijalankan selama jangka waktu tertentu, serta resource CPU yang digunakan setiap metode atau fungsi selama eksekusinya. Anda juga dapat menggunakan rekaman pelacakan metode dan fungsi untuk mengidentifikasi pemanggil dan tujuan panggilan. Pemanggil adalah metode atau fungsi yang memanggil metode atau fungsi lainnya, dan tujuan panggilan adalah metode atau fungsi yang dipanggil oleh metode atau fungsi lainnya. Anda dapat menggunakan informasi ini untuk menentukan metode atau fungsi mana yang bertanggung jawab karena terlalu sering memanggil tugas tertentu dengan resource berat, serta mengoptimalkan kode aplikasi untuk menghindari pekerjaan yang tidak perlu.

    Saat merekam pelacakan metode, Anda dapat memilih rekaman dengan sampel atau yang berinstrumen. Saat merekam aktivitas fungsi, Anda hanya dapat menggunakan perekaman dengan sampel.

Untuk mengetahui detail tentang penggunaan dan pemilihan setiap opsi perekaman aktivitas ini, lihat Memilih konfigurasi perekaman.

Ringkasan CPU Profiler

Untuk membuka CPU Profiler, ikuti langkah-langkah berikut:

  1. Pilih View > Tool Windows > Profiler atau klik Profile pada toolbar.

    Jika diminta oleh dialog Select Deployment Target, pilih perangkat tujuan deployment aplikasi untuk pembuatan profil. Jika Anda telah menyambungkan perangkat melalui USB, tetapi tidak melihatnya tercantum, pastikan Anda telah mengaktifkan proses debug USB.

  2. Klik di mana saja dalam linimasa CPU untuk membuka CPU Profiler.

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

Gambar 1. Linimasa dalam CPU Profiler.

Seperti yang ditunjukkan pada gambar 1, tampilan default untuk CPU Profiler menyertakan linimasa berikut ini:

  1. Event timeline: Menunjukkan aktivitas dalam aplikasi Anda saat bertransisi melalui berbagai keadaan dalam siklus prosesnya, dan menunjukkan interaksi pengguna dengan perangkat, termasuk peristiwa rotasi layar. Untuk mengetahui informasi tentang cara mengaktifkan linimasa peristiwa di perangkat yang menjalankan Android 7.1 (API level 25) dan yang lebih rendah, lihat Mengaktifkan pembuatan profil lanjutan.
  2. CPU timeline: Menunjukkan penggunaan CPU secara real time oleh aplikasi Anda, berupa persentase dari total waktu CPU yang tersedia, dan total jumlah thread yang digunakan oleh aplikasi Anda. Linimasa ini juga menunjukkan penggunaan CPU oleh proses lainnya (seperti proses sistem atau aplikasi lainnya) sehingga Anda dapat membandingkannya dengan penggunaan oleh aplikasi Anda. Anda dapat memeriksa data penggunaan CPU secara historis dengan menggerakkan mouse di sepanjang sumbu horizontal linimasa.
  3. Thread activity timeline: Mencantumkan setiap thread yang termasuk dalam proses aplikasi dan menunjukkan aktivitasnya sepanjang linimasa tertentu menggunakan warna yang tercantum di bawah ini. Setelah merekam aktivitas, Anda dapat memilih thread dari linimasa ini untuk memeriksa datanya di panel rekaman aktivitas.
    • Hijau: Artinya thread aktif atau siap untuk menggunakan CPU. Dengan kata lain, thread sudah berjalan atau dalam keadaan dapat dijalankan.
    • Kuning: Thread aktif, tetapi sedang menunggu operasi I/O, seperti I/O jaringan atau disk, sebelum dapat menyelesaikan pekerjaannya.
    • Abu-Abu: Thread sedang tidur dan tidak menggunakan waktu CPU sama sekali. Hal ini terkadang terjadi ketika thread memerlukan akses ke resource yang belum tersedia. Thread akan tidur dengan sendirinya, atau kernel akan menidurkan thread hingga resource yang diperlukannya tersedia.

    CPU 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 (meskipun nama sebenarnya yang ditampilkan dalam linimasa aktivitas thread mungkin bervariasi). Android Studio melaporkan data ini agar Anda dapat mengidentifikasi kapan aktivitas thread dan penggunaan CPU sebenarnya disebabkan oleh kode aplikasi Anda.

Merekam aktivitas

Untuk mulai merekam aktivitas, pilih konfigurasi rekaman dari menu dropdown di atas atau di bawah CPU Profiler dan klik Record.

Gambar 2. CPU Profiler menampilkan status, durasi, dan jenis rekaman yang sedang dibuat.

Lakukan sesuatu dengan aplikasi, lalu klik Stop setelah selesai. Profiler otomatis menampilkan informasi pelacakannya pada panel rekaman aktivitas, seperti yang ditunjukkan pada gambar 3:

Gambar 3. CPU Profiler setelah merekam pelacakan metode.

  1. Selected range: Menentukan porsi waktu terekam yang akan diperiksa di panel rekaman aktivitas. Saat merekam aktivitas untuk kali pertama, CPU Profiler akan secara otomatis memilih keseluruhan panjang rekaman Anda di linimasa CPU. Anda dapat memeriksa data perekaman aktivitas untuk sebagian waktu yang terekam dengan menarik bagian tepi region yang disorot.
  2. Interaction section: Menampilkan interaksi pengguna dan peristiwa siklus proses aplikasi di sepanjang linimasa.
  3. Threads section: Menampilkan aktivitas status thread (seperti berjalan, tidur, dan sebagainya) dan Call Chart (atau diagram peristiwa rekaman aktivitas di System Trace) untuk setiap thread sepanjang linimasa.
    • Gunakan pintasan mouse dan keyboard untuk menavigasi linimasa.
    • Klik dua kali nama thread atau tekan Enter saat thread dipilih untuk meluaskan atau menciutkan thread.
    • Pilih thread untuk melihat informasi tambahan di Analysis pane. Tahan Shift atau Ctrl (Command di Mac) untuk memilih beberapa thread.
    • Pilih panggilan metode (atau peristiwa rekaman aktivitas di System Trace) untuk melihat informasi tambahan di Analysis pane.
  4. Analysis pane: Menampilkan data rekaman aktivitas untuk rentang waktu dan thread atau panggilan metode yang telah Anda pilih. Di panel ini, Anda dapat memilih cara melihat setiap pelacakan tumpukan (menggunakan tab analisis) dan cara mengukur waktu eksekusi (menggunakan menu dropdown referensi waktu).
  5. Analysis pane tabs: Pilih cara menampilkan detail rekaman aktivitas. Untuk mengetahui detail tentang setiap opsi, lihat Memeriksa rekaman aktivitas.
  6. Time reference menu: Pilih salah satu opsi berikut untuk menentukan cara mengukur informasi pengaturan waktu untuk setiap panggilan (hanya didukung di Sample/Trace Java Methods):
    • Wall clock time: Informasi pengaturan waktu yang menyatakan waktu berlalu yang sebenarnya.
    • Thread time: Informasi pengaturan waktu yang menyatakan waktu berlalu yang sebenarnya, dikurangi setiap bagian waktu tersebut ketika thread tidak memakai resource CPU. Untuk panggilan tertentu, waktu thread-nya selalu kurang dari atau sama dengan waktu jam dindingnya (wall clock time). Menggunakan waktu thread akan memberikan pemahaman yang lebih baik tentang banyaknya penggunaan CPU sesungguhnya oleh sebuah thread melalui metode atau fungsi tertentu.
  7. Filter: Memfilter data perekaman aktivitas menurut nama fungsi, metode, class, atau paket. Misalnya, jika Anda ingin mengidentifikasi data rekaman aktivitas terkait panggilan tertentu dengan cepat, ketik nama di kolom penelusuran. Di tab Flame chart, stack panggilan yang menyertakan panggilan, paket, atau kelas yang cocok dengan kueri penelusuran akan ditekankan. Di tab Top down dan Bottom up, stack panggilan tersebut akan lebih diprioritaskan daripada hasil rekaman aktivitas lainnya. Anda juga dapat mengaktifkan opsi berikut dengan mencentang kotak yang sesuai di samping kolom penelusuran:
    • Regex: Untuk menyertakan ekspresi reguler dalam penelusuran, gunakan opsi ini.
    • Match case: Jika penelusuran Anda peka dengan huruf besar/kecil, gunakan opsi ini.
Tips: Saat memeriksa linimasa Threads, tersedia pintasan berikut:
  • Memperbesar: Tekan W atau scroll roda mouse sambil menahan Ctrl (Command di Mac).
  • Memperkecil: Tekan S atau scroll roda mouse ke belakang sambil menahan Ctrl (Command di Mac).
  • Menggeser ke kiri: Tekan A atau tarik mouse ke kanan sambil menahan Space.
  • Menggeser ke kanan: Tekan D atau tarik mouse ke kiri sambil menahan Spasi.
  • Meluaskan atau menciutkan thread: Klik dua kali nama thread atau tekan Enter saat thread dipilih.

Memilih konfigurasi perekaman

Sebelum mulai merekam informasi aktivitas, pilih konfigurasi perekaman yang sesuai untuk informasi profiling yang ingin direkam:

  • Sample Java Methods: Merekam stack panggilan aplikasi dalam interval yang sering selama eksekusi kode berbasis Java milik aplikasi Anda. Profiler akan membandingkan kumpulan data yang direkam untuk memperoleh informasi pengaturan waktu dan penggunaan resource mengenai eksekusi kode berbasis Java milik aplikasi Anda.

    Masalah inheren dari perekaman aktivitas berbasis sampel adalah jika aplikasi Anda masuk ke suatu metode setelah perekaman stack panggilan selesai, dan aplikasi keluar dari metode tersebut sebelum perekaman berikutnya, panggilan metode tersebut tidak akan dicatat dalam log oleh profiler. Jika Anda memang ingin merekam aktivitas metode dengan siklus yang singkat seperti ini, gunakan perekaman aktivitas berinstrumen.

  • Trace Java Methods: Melengkapi aplikasi pada waktu proses untuk merekam stempel waktu di awal dan akhir setiap panggilan metode. Stempel waktu dikumpulkan dan dibandingkan untuk menghasilkan data perekaman aktivitas metode, termasuk informasi pengaturan waktu dan penggunaan CPU.

    Perlu diketahui bahwa overhead yang terkait dengan melengkapi setiap metode akan memengaruhi performa waktu proses dan dapat memengaruhi data profiling; hal ini bahkan lebih jelas untuk metode yang siklusnya relatif singkat. Selain itu, jika aplikasi mengeksekusi sejumlah besar metode dalam waktu singkat, profiler mungkin akan melampaui batas ukuran filenya dan mungkin tidak dapat merekam data aktivitas lebih lanjut.

  • Sample C/C++ Functions: Merekam aktivitas dengan sampel dari thread native aplikasi. Untuk menggunakan konfigurasi ini, Anda harus men-deploy aplikasi ke perangkat yang menjalankan Android 8.0 (API level 26) atau versi yang lebih tinggi.

    Secara internal, konfigurasi ini menggunakan simpleperf untuk merekam aktivitas kode native aplikasi Anda. Jika ingin menentukan opsi tambahan untuk simpleperf, seperti pengambilan sampel CPU perangkat tertentu atau menentukan durasi pengambilan sampel pada akurasi tinggi, Anda dapat menggunakan simpleperf dari command line.

  • Trace System Calls: Merekam detail akurat yang memungkinkan Anda memeriksa cara aplikasi berinteraksi dengan resource sistem. Anda dapat memeriksa pengaturan waktu dan durasi tepat status thread, memvisualkan bottleneck CPU di seluruh core, dan menambahkan peristiwa perekaman aktivitas khusus untuk dianalisis. Informasi tersebut bisa menjadi sangat penting saat Anda perlu memecahkan masalah performa. Untuk menggunakan konfigurasi ini, Anda harus men-deploy aplikasi ke perangkat yang menjalankan Android 7.0 (API level 24) atau versi yang lebih tinggi.

    Saat menggunakan konfigurasi perekaman aktivitas ini, Anda dapat menandai rutinitas kode penting secara visual dalam linimasa profiler dengan melengkapi kode Anda. Untuk melengkapi kode C/C++, gunakan API perekaman aktivitas native yang disediakan oleh trace.h. Untuk melengkapi kode Java, gunakan class Trace. Untuk mengetahui informasi selengkapnya, lihat Melengkapi kode aplikasi Anda.

    Konfigurasi perekaman aktivitas ini di-build berdasarkan systrace. Anda dapat menggunakan utilitas command line systrace untuk menentukan opsi di luar yang disediakan di CPU Profiler. Data level sistem tambahan yang disediakan oleh systrace dapat membantu Anda memeriksa proses sistem native dan memecahkan masalah frame yang menurun atau tertunda.

    Di perangkat yang menjalankan Android 9 (API level 28) atau yang lebih tinggi, Anda dapat menggunakan aplikasi sistem Perekaman Aktivitas Sistem untuk merekam aktivitas sistem di perangkat.

Membuat, mengedit, atau menampilkan konfigurasi perekaman

Anda dapat membuat, mengedit, dan menampilkan konfigurasi perekaman dalam dialog CPU Recording Configurations yang dapat dibuka dengan memilih Edit configurations dari menu drop-down konfigurasi perekaman di bagian atas CPU Profiler.

Untuk menampilkan setelan konfigurasi perekaman saat ini, pilih setelan di panel kiri dialog CPU Recording Configurations.

Untuk membuat konfigurasi perekaman baru, lakukan langkah berikut:

  1. Klik Add di bagian kiri atas dialog. Opsi ini akan membuat konfigurasi baru dengan beberapa setelan default.
  2. Beri nama konfigurasi Anda.
  3. Pilih Trace Technology.
  4. Untuk konfigurasi perekaman dengan sampel, tentukan Sampling interval dalam mikrodetik (μs). Nilai ini menyatakan waktu di antara setiap sampel stack panggilan aplikasi Anda. Semakin pendek interval yang ditentukan, semakin cepat Anda mencapai batas ukuran file untuk data yang direkam.
  5. Tentukan File size limit dalam megabyte (MB) untuk data terekam yang ditulis ke perangkat yang terhubung. Saat Anda berhenti merekam, Android Studio akan mengurai data ini dan menampilkannya di jendela profiler. Jadi, jika Anda menaikkan batasnya dan merekam data dalam jumlah besar, Android Studio membutuhkan waktu lebih lama untuk mengurai file dan dapat berhenti merespons.

    Catatan: Jika menggunakan perangkat terhubung yang menjalankan Android 8.0 (API level 26) atau lebih tinggi, tidak ada batas ukuran file untuk data perekaman aktivitas, dan nilai ini akan diabaikan. Namun, Anda masih harus berhati-hati tentang berapa banyak data yang dikumpulkan perangkat setelah setiap sesi perekaman; Android Studio mungkin mengalami kesulitan dalam menguraikan file rekaman aktivitas berukuran besar. Misalnya, jika merekam aktivitas dengan sampel dalam interval pengambilan sampel yang singkat atau merekam aktivitas yang diinstrumentasi saat aplikasi memanggil banyak metode dalam waktu singkat, Anda akan dengan cepat menghasilkan file rekaman aktivitas yang berukuran besar.

  6. Untuk menerima perubahan dan melanjutkan perubahan pada konfigurasi lain, klik Apply. Untuk menyetujui semua perubahan yang diterapkan dan menutup dialog, klik OK.

Merekam aktivitas CPU dengan Debug API

Anda dapat menggunakan Debug API agar aplikasi dapat memulai dan menghentikan perekaman aktivitas CPU di CPU Profiler.

CPU Profiler memulai perekaman saat aplikasi Anda memanggil startMethodTracing(String tracePath), dan CPU Profiler berhenti merekam saat aplikasi memanggil stopMethodTracing(). Selagi merekam aktivitas CPU yang dipicu menggunakan API ini, CPU profiler akan menampilkan Debug API sebagai konfigurasi perekaman CPU saat ini.

Untuk mengontrol perekaman aktivitas CPU dengan Debug API, deploy aplikasi yang diinstrumentasi ke perangkat yang menjalankan Android 8.0 (API level 26) atau yang lebih tinggi.

Penting: Debug API ditujukan untuk penggunaan di luar cara yang telah disediakan untuk memulai dan menghentikan perekaman aktivitas CPU, seperti tombol pada antarmuka pengguna grafis (GUI) CPU Profiler dan setelan dalam konfigurasi perekaman untuk perekaman otomatis saat aplikasi dimulai.

Karena batas ukuran buffer sebesar 8 MB, metode startMethodTracing(String tracePath) di Debug API didesain untuk interval atau skenario pendek yang sulit memulai/menghentikan perekaman secara manual. Untuk rekaman waktu yang lebih lama, gunakan UI profiler di Android Studio.

Untuk mengetahui informasi selengkapnya, lihat Menghasilkan log perekaman aktivitas dengan melengkapi aplikasi Anda.

Merekam aktivitas CPU saat aplikasi dimulai

Untuk otomatis memulai perekaman aktivitas CPU saat aplikasi dimulai, lakukan hal berikut:

  1. Pilih Run > Edit Configurations.
  2. Di tab Profiling, centang kotak di samping Start recording a method trace on startup.
  3. Pilih konfigurasi perekaman CPU dari menu.
  4. Klik Apply.
  5. Terapkan aplikasi Anda ke perangkat yang menjalankan Android 8.0 (level API 26) atau yang lebih baru dengan memilih Run > Profile.

Mengekspor rekaman aktivitas

Setelah merekam aktivitas CPU dengan CPU profiler, Anda dapat mengekspor datanya sebagai file .trace untuk dibagikan dengan orang lain atau diperiksa nanti.

Untuk mengekspor file rekaman aktivitas dari linimasa CPU, lakukan hal berikut:

  1. Di linimasa CPU, klik kanan rekaman aktivitas metode atau rekaman aktivitas sistem yang ingin diekspor.
  2. Pilih Export trace dari menu.
  3. Buka tempat Anda ingin menyimpan file, tentukan nama file, lalu klik OK.

Untuk mengekspor file rekaman aktivitas dari panel Session, lakukan hal berikut:

  1. Di panel Session, klik kanan rekaman aktivitas yang ingin diekspor.
  2. Klik tombol Export method trace atau Export system trace di bagian kanan entri sesi.
  3. Buka tempat Anda ingin menyimpan file, tentukan nama file, lalu klik OK.

Mengimpor rekaman aktivitas

Anda dapat mengimpor file .trace yang dibuat dengan Debug API atau CPU Profiler.

Impor file rekaman aktivitas dengan mengklik Start new profiler session di panel Sessions profiler, lalu memilih Load from file.

Anda dapat memeriksa rekaman aktivitas yang diimpor di CPU Profiler seperti ketika memeriksa rekaman aktivitas yang diambil langsung di CPU Profiler, dengan pengecualian berikut:

  • Aktivitas CPU tidak direpresentasikan di sepanjang linimasa CPU (kecuali di Rekaman Aktivitas Sistem).
  • Linimasa di bagian Threads tidak menampilkan status thread seperti berjalan, menunggu, atau tidur (kecuali di Rekaman Aktivitas Sistem).

Memeriksa rekaman aktivitas

Tampilan rekaman aktivitas di CPU Profiler menyediakan beberapa cara untuk melihat informasi dari rekaman aktivitas.

Untuk rekaman aktivitas metode dan rekaman aktivitas fungsi, Anda dapat melihat Call Chart langsung di linimasa Threads dan tab Flame Chart, Top Down, Bottom Up, dan Events dari panel Analysis. Untuk pelacakan sistem, Anda dapat melihatTrace Events langsung di linimasa Threads, dan tab Flame Chart, .Top Down, .Bottom Up, sertaEvents dari panel Analysis .

Pintasan mouse dan keyboard tersedia untuk memudahkan navigasi Call Charts atau Trace Events.

Memeriksa rekaman aktivitas menggunakan Call Chart

Call Chart memberikan representasi grafis dari rekaman aktivitas metode atau rekaman aktivitas fungsi, dengan periode dan waktu panggilan diwakili pada sumbu horizontal, dan tujuan panggilannya ditampilkan di sepanjang sumbu vertikal. Panggilan ke API sistem ditunjukkan dengan warna oranye, panggilan ke metode aplikasi Anda ditunjukkan dengan warna hijau, dan panggilan ke API pihak ketiga (termasuk API bahasa Java) ditunjukkan dengan warna biru. Gambar 4 menunjukkan contoh call chart dan menggambarkan konsep waktu mandiri (self), waktu turunan (children), dan total waktu untuk metode atau fungsi tertentu. Anda dapat mempelajari konsep-konsep ini lebih lanjut di bagian tentang cara memeriksa rekaman aktivitas menggunakan Top Down dan Bottom Up.

Gambar 4. Contoh call chart yang menggambarkan waktu mandiri, waktu turunan, dan total waktu untuk metode D.

Tips: Untuk melompati kode sumber suatu metode atau fungsi, klik kanan metode atau fungsi dan pilih Jump to Source. Cara ini dapat dilakukan dari tab panel Analysis mana pun.

Memeriksa rekaman aktivitas menggunakan tab Flame Chart

Tab Flame Chart menyediakan call chart terbalik yang menggabungkan stack panggilan identik. Artinya, metode atau fungsi identik yang memiliki urutan pemanggil yang sama akan dikumpulkan dan direpresentasikan sebagai batang yang lebih panjang dalam flame chart (bukan menampilkannya sebagai beberapa batang yang lebih pendek, seperti dalam call chart). Hal ini memudahkan Anda melihat metode atau fungsi mana yang paling banyak menghabiskan waktu. Namun, hal ini juga berarti sumbu horizontal tidak merepresentasikan linimasa; sebagai gantinya, sumbu ini menunjukkan jumlah waktu relatif yang dibutuhkan setiap metode atau fungsi untuk dieksekusi.

Untuk membantu menggambarkan konsep ini, pertimbangkan call chart pada gambar 5. Perlu diketahui bahwa metode D membuat beberapa panggilan ke B (B1, B2, dan B3), dan beberapa panggilan ke B tersebut membuat panggilan ke C (C1 dan C3).

Gambar 5. Call chart dengan beberapa panggilan metode yang memiliki urutan pemanggil yang sama.

Karena B1, B2, dan B3 memiliki urutan pemanggil yang sama (A → D → B), semuanya akan digabungkan, seperti dalam gambar 6. Demikian pula, C1 dan C3 digabungkan karena memiliki urutan pemanggil yang sama (A → D → B → C); perlu diketahui bahwa C2 tidak disertakan karena memiliki urutan pemanggil yang berbeda (A → D → C).

Gambar 6. Menggabungkan metode identik yang memiliki stack panggilan yang sama.

Panggilan yang digabungkan digunakan untuk membuat flame chart, seperti dalam gambar 7. Perlu diketahui bahwa untuk setiap panggilan tertentu dalam flame chart, tujuan panggilan yang memakai paling banyak waktu CPU akan muncul terlebih dahulu.

Gambar 7. Representasi flame chart dari call chart yang ditunjukkan dalam gambar 5.

Memeriksa rekaman aktivitas menggunakan Top Down dan Bottom Up

Tab Top Down menampilkan daftar panggilan, yang jika digunakan untuk memperluas node metode atau fungsi akan menampilkan tujuan panggilannya. Gambar 8 menunjukkan grafik top down untuk call chart dalam gambar 4. Setiap panah dalam grafik menunjuk dari pemanggil ke tujuan panggilan.

Seperti dalam gambar 8, memperluas node untuk metode A di tab Top Down akan menampilkan tujuan panggilannya, yaitu metode B dan D. Setelah itu, memperluas node untuk metode D akan menampilkan tujuan panggilannya, metode B dan C, dan seterusnya. Begitu juga dengan tab Flame chart, pohon top down menggabungkan informasi rekaman aktivitas untuk metode identik dengan stack panggilan yang sama. Artinya, tab Flame chart menyediakan representasi grafis dari tab Top down.

Tab Top Down menyediakan informasi berikut ini untuk membantu mendeskripsikan waktu CPU yang dihabiskan bagi setiap panggilan (waktu juga direpresentasikan sebagai persentase total waktu thread dalam rentang yang dipilih):

  • Self: waktu yang dihabiskan oleh panggilan metode atau fungsi untuk mengeksekusi kodenya sendiri, bukan milik tujuan panggilannya, seperti dalam gambar 4 untuk metode D.
  • Children: waktu yang dihabiskan oleh panggilan metode atau fungsi untuk mengeksekusi tujuan panggilannya, bukan kodenya sendiri, seperti dalam gambar 4 untuk metode D.
  • Total: jumlah waktu Self dan Children milik metode. Informasi ini menyatakan total waktu yang dihabiskan oleh aplikasi untuk mengeksekusi panggilan, seperti dalam gambar 4 untuk metode D.

Gambar 8. Pohon Top Down.

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

Tab Bottom Up menampilkan daftar panggilan, yang jika digunakan untuk memperluas node fungsi atau metode akan menampilkan pemanggilnya. Dengan menggunakan contoh rekaman aktivitas yang ditampilkan dalam gambar 8, gambar 9 memberikan 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. Perlu diketahui bahwa meskipun B memanggil C dua kali, B hanya akan muncul sekali saat memperluas node untuk metode C di pohon bottom up. Setelah itu, memperluas node untuk B akan menampilkan pemanggilnya, yaitu metode A dan D.

Tab Bottom Up berguna untuk mengurutkan metode atau fungsi berdasarkan yang paling banyak (atau paling sedikit) menghabiskan waktu CPU. Anda dapat memeriksa setiap node guna menentukan pemanggil mana yang menghabiskan paling banyak waktu CPU untuk memanggil metode atau fungsi tersebut. Dibandingkan pohon top down, informasi pengaturan waktu untuk setiap metode atau fungsi di pohon bottom up saling berhubungan dengan metode di bagian atas setiap pohon (node atas). Waktu CPU juga direpresentasikan sebagai persentase total waktu thread selama perekaman tersebut. Tabel berikut ini membantu menjelaskan cara menafsirkan informasi pengaturan waktu untuk node atas dan pemanggilnya (sub-node).

Mandiri Turunan Total
Metode atau fungsi di bagian atas pohon bottom up (node atas) Menyatakan total waktu yang dihabiskan oleh metode atau fungsi untuk mengeksekusi kodenya sendiri, bukan kode tujuan panggilannya. Dibandingkan pohon top down, informasi pengaturan waktu ini menyatakan jumlah semua panggilan ke metode atau fungsi ini selama durasi perekaman. Menyatakan total waktu yang dihabiskan oleh metode atau fungsi untuk mengeksekusi tujuan panggilannya, bukan kodenya sendiri. Dibandingkan pohon top down, informasi pengaturan waktu ini menyatakan jumlah semua panggilan ke tujuan panggilan metode atau fungsi ini selama durasi perekaman. Jumlah waktu mandiri dan waktu turunan.
Pemanggil (sub-node) Menyatakan total waktu mandiri tujuan panggilan ketika dipanggil oleh pemanggil. Menggunakan pohon bottom up dalam gambar 9 sebagai contoh, waktu mandiri untuk metode B akan sama dengan jumlah waktu mandiri untuk setiap eksekusi metode C ketika dipanggil oleh B. Menyatakan total waktu turunan dari tujuan panggilan ketika dipanggil oleh pemanggil. Menggunakan pohon bottom up dalam gambar 9 sebagai contoh, waktu turunan untuk metode B akan sama dengan jumlah waktu turunan untuk setiap eksekusi metode C ketika dipanggil oleh B. Jumlah waktu mandiri dan waktu turunan.

Catatan: Untuk perekaman tertentu, Android Studio akan berhenti mengumpulkan data baru ketika profiler mencapai batas ukuran file (namun, perekaman tidak akan dihentikan). Hal ini biasanya terjadi jauh lebih cepat saat melakukan perekaman aktivitas yang diinstrumentasi karena jenis rekaman aktivitas ini mengumpulkan lebih banyak data di waktu yang lebih singkat dibandingkan perekaman aktivitas dengan sampel. Jika Anda memperpanjang waktu pemeriksaan hingga periode perekaman yang terjadi setelah batas tercapai, data pengaturan waktu di panel rekaman aktivitas tidak akan berubah (karena tidak ada data baru yang tersedia). Selain itu, panel rekaman aktivitas akan menampilkan NaN untuk informasi pengaturan waktu jika Anda hanya memilih sebagian rekaman tanpa data yang tersedia.

Memeriksa rekaman aktivitas menggunakan tabel Events

Tabel Events mencantumkan semua panggilan dalam thread yang dipilih saat ini. Anda dapat mengurutkannya dengan mengklik header kolom. Dengan memilih baris dalam tabel, Anda dapat membuka linimasa untuk waktu mulai dan berakhir pada panggilan yang dipilih. Ini memungkinkan Anda untuk menemukan peristiwa secara akurat di linimasa.

Gambar 10. Melihat tab Events di panel Analysis.

Memeriksa rekaman aktivitas sistem

Saat memeriksa rekaman aktivitas sistem, Anda dapat memeriksa Trace Events di linimasa Threads untuk melihat detail peristiwa yang terjadi pada setiap thread. Arahkan kursor mouse ke suatu peristiwa untuk melihat nama peristiwa dan waktu yang dihabiskan dalam setiap status. Klik peristiwa untuk melihat informasi lebih lanjut di panel Analysis.

Memeriksa rekaman aktivitas sistem: inti CPU

Selain data penjadwalan CPU, rekaman aktivitas juga menyertakan frekuensi CPU berdasarkan core. Ini menunjukkan jumlah aktivitas pada setiap inti dan dapat memberikan ide tentang aktivitas mana yang merupakan inti"besar" atau "kecil" dalam prosesor seluler modern.

Gambar 11. Menampilkan aktivitas CPU dan peristiwa rekaman aktivitas untuk thread render.

Panel CPU Cores (seperti yang ditunjukkan pada gambar 11) menampilkan aktivitas thread yang dijadwalkan pada setiap inti. Arahkan kursor mouse ke aktivitas thread untuk melihat thread mana yang dijalankan inti ini pada waktu tertentu.

Untuk mengetahui informasi selengkapnya tentang pemeriksaan informasi rekaman aktivitas sistem, lihat bagian Memeriksa masalah performa UI dalam dokumentasi systrace.

Memeriksa rekaman aktivitas sistem: Linimasa rendering frame

Anda dapat memeriksa waktu yang dibutuhkan oleh aplikasi untuk merender setiap frame pada thread utama dan RenderThread untuk menyelidiki bottleneck yang menyebabkan UI menjadi lambat dan framerate menjadi rendah.

Untuk melihat data rendering frame, rekam aktivitas menggunakan konfigurasi yang memungkinkan Anda melacak panggilan sistem (Trace System Calls). Setelah merekam aktivitas, cari info tentang setiap frame di linimasa Frames di bagian Display, seperti yang ditunjukkan pada gambar 12.

Gambar 12. Setiap frame yang membutuhkan waktu lebih dari 16 md ditampilkan dalam warna merah.

Gambar 13. Tampilan mendetail tentang bagian Display.

Jalur yang ditampilkan di bagian Display adalah:

  • Frames: saat frame sedang dibuat. Frame panjang (lebih dari 16 md) berwarna merah.
  • SurfaceFlinger: saat SurfaceFlinger memproses buffer frame. SurfaceFlinger adalah proses sistem yang bertanggung jawab untuk mengirim buffer yang akan ditampilkan.
  • VSYNC: sinyal yang menyinkronkan pipeline tampilan. Frame yang melewatkan VSYNC akan menghasilkan latensi input tambahan. Hal ini terutama penting pada tampilan dengan rasio refresh tinggi.
  • BufferQueue: jumlah buffer frame yang dimasukkan ke dalam antrean, yang menunggu SurfaceFlinger digunakan. Untuk aplikasi yang di-deploy ke perangkat yang menjalankan Android 9 atau yang lebih tinggi, jalur ini menunjukkan jumlah buffer pada platform aplikasi BufferQueue (0, 1, atau 2). Dengan cara ini, Anda dapat memahami status buffer gambar saat beralih antar komponen grafis Android. Misalnya, nilai 2 berarti aplikasi saat ini memiliki tiga buffer, yang dapat menyebabkan latensi masukan tambahan.

Memeriksa rekaman aktivitas sistem: Process Memory (RSS)

Untuk aplikasi yang di-deploy ke perangkat yang menjalankan Android 9 atau yang lebih baru, bagian Process Memory (RSS) menampilkan jumlah memori fisik yang saat ini digunakan oleh aplikasi.

Gambar 14. Menampilkan memori fisik di profiler.

Total

Ini adalah jumlah total memori fisik yang saat ini digunakan oleh proses Anda Pada sistem berbasis Unix, ini dikenal sebagai "Resident Set Size", dan merupakan kombinasi dari semua memori yang digunakan oleh alokasi anonim, pemetaan file, dan alokasi memori bersama.

Untuk developer Windows, Resident Set Size serupa dengan Working Set Size.

Allocated

Penghitung ini melacak banyaknya memori fisik yang saat ini digunakan oleh alokasi memori normal proses. Ini adalah alokasi yang bersifat anonim (tidak didukung oleh file tertentu) dan pribadi (tidak dibagikan). Pada sebagian besar aplikasi, terdiri dari alokasi heap (dengan malloc atau new) dan memori tumpukan. Saat ditukar dari memori fisik, alokasi ini ditulis ke file swap sistem.

Pemetaan File

Penghitung ini melacak jumlah memori fisik yang digunakan proses untuk pemetaan file - yaitu, memori yang dipetakan dari file ke dalam region memori oleh pengelola memori.

Dibagikan

Penghitung ini melacak berapa banyak memori fisik yang digunakan untuk berbagi memori antara proses ini dan proses lainnya dalam sistem.