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

Memeriksa Overdraw dan Kecepatan Rendering GPU

Android menyertakan beberapa opsi developer pada-perangkat yang membantu Anda memvisualisasikan di mana aplikasi Anda mungkin mengalami masalah saat merender UI-nya, misalnya saat menjalankan lebih banyak pekerjaan rendering daripada yang diperlukan, atau mengeksekusi thread yang panjang dan operasi GPU. Halaman ini menjelaskan cara debug overdraw GPU dan membuat profil rendering GPU.

Untuk mempelajari lebih lanjut tentang opsi developer pada-perangkat, termasuk cara mengaktifkannya, baca Mengonfigurasi Developer Options Pada-Perangkat.

Kecepatan Profile GPU Rendering

Alat Profile GPU Rendering menampilkan histogram scroll, sebuah representasi visual dari waktu yang diperlukannya untuk merender bingkai jendela UI dengan patokan benchmark 16 md per bingkai.

Pada GPU yang kurang bertenaga, fill-rate yang tersedia (kecepatan GPU mengisi buffer bingkai) boleh jadi sangat rendah. Seiring bertambahnya jumlah piksel yang diperlukan untuk menggambar bingkai, GPU mungkin perlu waktu lebih lama untuk memproses perintah baru, dan meminta sistem untuk menunggu hingga bisa menyusul ketertinggalannya. Alat pembuatan profil ini membantu Anda mengidentifikasi kapan GPU menjadi kewalahan saat mencoba menggambar piksel atau terbebani oleh overdraw berat.

Catatan: Alat pembuatan profil ini tidak dapat digunakan bersama aplikasi yang menggunakan NDK. Hal ini karena sistem mendorong pesan framework ke latar belakang ketika OpenGL mengambil konteks layar penuh. Dalam hal demikian, Anda mungkin akan terbantu oleh alat pembuatan profil yang disediakan oleh produsen GPU.

Mengaktifkan profiler

Sebelum Anda memulai, pastikan Anda menggunakan perangkat yang menjalankan Android 4.1 (API level16) atau yang lebih tinggi, dan mengaktifkan opsi developer. Untuk memulai pembuatan profil rendering GPU perangkat saat menggunakan aplikasi Anda, lakukan seperti berikut:

  1. Pada perangkat Anda, masuklah ke Settings dan tap Developer Options.
  2. Di bagian Monitoring, pilih Profile GPU Rendering.
  3. Dalam dialog Profile GPU Rendering, pilih On screen as bars untuk menghamparkan grafik pada layar perangkat Anda.
  4. Buka aplikasi yang ingin Anda profilkan.

Memeriksa keluaran

Dalam gambar grafik Profile GPU Rendering yang diperbesar seperti terlihat di gambar 1, Anda bisa melihat bagian berwarna, seperti yang ditampilkan pada Android 6.0 (API level 23).

Gambar 1. Grafik Profile GPU Rendering yang diperbesar.

Berikut ini adalah beberapa hal yang perlu diperhatikan tentang keluaran:

  • Untuk setiap aplikasi yang terlihat, alat ini menampilkan sebuah grafik.
  • Setiap bilah vertikal di sepanjang sumbu horizontal menyatakan sebuah bingkai, dan tinggi setiap bilah vertikal menyatakan jumlah waktu yang diperlukan untuk merender bingkai (dalam milidetik).
  • Garis hijau horizontal menyatakan 16 milidetik. Untuk mencapai 60 bingkai per detik, bilah vertikal setiap bingkai harus tetap berada di bawah garis ini. Ketika sebuah bilah melewati garis ini, maka akan ada jeda dalam animasi.
  • Alat ini akan menyoroti bingkai yang melebihi ambang 16 milidetik dengan membuat bilah yang bersangkutan menjadi lebih lebar dan kurang transparan.
  • Setiap bilah memiliki komponen berwarna yang memetakan ke suatu tahapan dalam saluran rendering. Jumlah komponen bervariasi, bergantung pada API level perangkat.

Tabel berikut menyediakan keterangan setiap segmen bilah vertikal dalam keluaran profiler saat menggunakan perangkat yang menjalankan Android 6.0 dan yang lebih tinggi.

Komponen BilahTahap RenderingKeterangan
Buffer Pertukaran Menyatakan waktu yang digunakan CPU untuk menunggu GPU menyelesaikan pekerjaannya. Jika bilah ini menjadi tinggi, artinya aplikasi melakukan terlalu banyak pekerjaan di GPU.
Pengeluaran Perintah Menyatakan waktu yang dihabiskan oleh renderer 2D Android untuk mengeluarkan perintah ke OpenGL untuk menggambar dan menggambar ulang daftar tampilan. Tinggi bilah ini sebanding dengan jumlah waktu yang diperlukan untuk mengeksekusi setiap daftar tampilan—daftar tampilan yang lebih banyak sama dengan bilah merah yang lebih tinggi.
Sinkronisasi & Upload Menyatakan waktu yang diperlukannya untuk mengupload informasi bitmap ke GPU. Segmen besar menunjukkan bahwa aplikasi memerlukan waktu lumayan banyak untuk memuat grafik dalam jumlah besar.
Menggambar Menyatakan waktu yang digunakan untuk membuat dan meng-update daftar tampilan suatu tampilan. Jika bagian bilah ini tinggi, mungkin ada banyak penggambaran tampilan khusus, atau banyak pekerjaan di metode onDraw.
Mengukur / Layout Menyatakan jumlah waktu yang dihabiskan pada callback onLayout dan onMeasure di hierarki tampilan. Segmen yang besar menunjukkan hierarki tampilan memerlukan banyak waktu untuk memproses.
Animasi Menyatakan waktu yang diperlukannya untuk mengevaluasi semua animator yang menjalankan bingkai itu. Jika segmen ini besar, aplikasi Anda boleh jadi menggunakan animator khusus yang tidak berfungsi dengan baik atau terjadi beberapa pekerjaan yang tidak diinginkan akibat properti yang diupdate.
Penanganan Masukan Menyatakan waktu yang dihabiskan aplikasi untuk mengeksekusi kode di dalam event callback masukan. Jika segmen ini besar maka itu menunjukkan bahwa aplikasi menghabiskan waktu terlalu banyak untuk memproses masukan pengguna. Pertimbangkan untuk mengalihkan beban seperti pemrosesan ke thread lain.
Waktu Lain-lain / Penundaan VSync Menyatakan waktu yang dihabiskan aplikasi untuk mengeksekusi operasi di antara dua bingkai berturut-turut. Hal ini dapat menjadi indikator atas terlalu banyaknya pemrosesan yang terjadi di thread UI yang dapat dialihkan bebannya ke thread lain.

Tabel 1. Bilah komponen di Android 6.0 dan yang lebih tinggi.

Versi-versi Android antara 4.0 (API level 14) dan 5.0 (API level 21) memiliki segmen berwarna biru, ungu, merah, dan oranye. Versi-versi Android di bawah 4.0 hanya memiliki komponen berwarna biru, merah, dan oranye. Tabel berikut menampilkan bilah komponen di Android 4.0 dan 5.0.

Komponen BilahTahap RenderingKeterangan
Proses Menyatakan waktu yang digunakan CPU untuk menunggu GPU menyelesaikan pekerjaannya. Jika bilah ini menjadi tinggi, berarti aplikasi melakukan terlalu banyak pekerjaan di GPU.
Eksekusi Menyatakan waktu yang dihabiskan oleh renderer 2D Android untuk mengeluarkan perintah ke OpenGL untuk menggambar dan menggambar ulang daftar tampilan. Tinggi bilah ini sebanding dengan jumlah waktu yang diperlukan untuk mengeksekusi setiap daftar tampilan—daftar tampilan yang lebih banyak sama dengan bilah merah yang lebih tinggi.
XFer Menyatakan waktu yang diperlukannya untuk mengupload informasi bitmap ke GPU. Segmen besar menunjukkan bahwa aplikasi memerlukan waktu lumayan banyak untuk memuat grafik dalam jumlah besar. Segmen ini tidak terlihat pada perangkat yang menjalankan Android 4.0 atau yang lebih rendah.
Update Menyatakan waktu yang digunakan untuk membuat dan meng-update daftar tampilan suatu tampilan. Jika bagian bilah ini tinggi, mungkin ada banyak penggambaran tampilan khusus, atau banyak pekerjaan di metode onDraw.

Tabel 2. Bilah komponen di Android 4.0 dan 5.0.

Untuk informasi selengkapnya tentang cara menafsirkan informasi yang disediakan oleh alat pembuatan profil, bacalah Menganalisis dengan Profile GPU Rendering.

Catatan: Walaupun alat ini dinamai Profile GPU Rendering, semua proses pemantauan sebenarnya terjadi di CPU. Rendering terjadi dengan mengirimkan perintah ke GPU, dan GPU akan merender layar secara tidak bersamaan. Dalam situasi tertentu, GPU boleh jadi memiliki terlalu banyak pekerjaan untuk dilakukan, dan CPU Anda harus menunggu sebelum ia dapat mengirimkan perintah baru. Bila hal ini terjadi, Anda akan melihat lonjakan di bilah oranye dan merah, dan pengiriman perintah akan terblokir hingga tersedia ruang lebih banyak di antrean perintah GPU.

Memvisualisasikan overdraw GPU

Fitur lainnya dalam opsi developer membantu Anda mengidentifikasi overdraw melalui coding warna UI Anda. Overdraw terjadi bila aplikasi Anda menggambar piksel yang sama lebih dari sekali dalam bingkai yang sama. Jadi visualisasi ini menampilkan lokasi aplikasi Anda mungkin melakukan pekerjaan lebih banyak daripada yang diperlukan, yang dapat menjadi masalah kinerja akibat upaya ekstra GPU untuk merender piksel yang tidak akan terlihat oleh pengguna. Jadi, Anda harus memperbaiki overdraw event bila memungkinkan.

Jika Anda belum melakukannya, aktifkan opsi developer. Kemudian, untuk memvisualisasikan overdraw pada perangkat Anda, lakukan seperti berikut:

  1. Pada perangkat Anda, masuklah ke Settings dan tap Developer Options.
  2. Scroll ke bawah ke bagian Hardware accelerated rendering, dan pilih Debug GPU Overdraw.
  3. Dalam dialog Debug GPU overdraw, pilih Show overdraw areas.

Android mewarnai elemen UI untuk mengidentifikasi jumlah overdraw seperti berikut:

  • Warna sejati: Tidak ada overdraw
  • Biru: Overdraw 1 kali
  • Hijau: Overdraw 2 kali
  • Merah Muda: Overdraw 3 kali
  • Merah: Overdraw 4 kali atau lebih

Gambar 2. Aplikasi saat terlihat normal (kiri), dan saat dengan mengaktifkan GPU Overdraw (kanan)

Perhatikan, warna-warna ini semi-transparan, jadi warna sebenarnya yang Anda lihat di layar bergantung pada konten UI Anda.

Karena Anda kini bisa mengenali tempat terjadinya overdraw di layout, bacalah cara mengurangi overdraw.

Ingatlah bahwa sebagian overdraw tidak bisa dihindari. Saat merapikan antarmuka pengguna aplikasi Anda, cobalah mampir ke visualisasi yang kebanyakan menampilkan warna-warna sejati atau hanya 1X overdraw (biru).

Gambar 3. Contoh aplikasi dengan banyak overdraw (kiri) dan dengan sedikit overdraw (kanan)