Mengurangi overdraw

Halaman ini menjelaskan apa itu overdraw, cara mendiagnosisnya, dan cara untuk menghilangkan atau memitigasinya.

Jika aplikasi menggambar piksel yang sama lebih dari sekali dalam satu frame, hal ini disebut overdraw. Overdraw biasanya tidak diperlukan, dan sebaiknya dihilangkan. Overdraw menjadi masalah performa jika membuang waktu GPU untuk merender piksel yang tidak berkontribusi pada tampilan yang dilihat oleh pengguna di layar.

Tentang overdraw

Overdraw merujuk pada penggambaran piksel di layar oleh sistem beberapa kali dalam satu frame rendering. Misalnya, jika ada banyak kartu UI yang ditumpuk, setiap kartu menyembunyikan bagian kartu di bawahnya.

Namun, sistem masih perlu menggambar bagian kartu yang tersembunyi dalam tumpukan. Ini karena kartu yang ditumpuk dirender menurut algoritma pelukis—yaitu dalam urutan dari belakang ke depan. Dengan urutan rendering ini, sistem dapat menerapkan pencampuran alfa yang tepat pada objek transparan seperti bayangan.

Menemukan masalah overdraw

Platform menawarkan alat berikut untuk membantu Anda menentukan apakah overdraw memengaruhi performa aplikasi.

Alat Debug GPU overdraw

Alat Debug Overdraw GPU menggunakan kode warna untuk menampilkan frekuensi penggambaran setiap piksel di layar oleh aplikasi. Makin tinggi jumlahnya, makin besar kemungkinan overdraw memengaruhi performa aplikasi.

Untuk informasi selengkapnya, lihat Memvisualisasikan overdraw GPU.

Alat rendering GPU profil

Alat Rendering GPU Profil menampilkan waktu yang diperlukan oleh setiap tahap pipeline rendering untuk menampilkan satu frame sebagai histogram scroll. Bagian Proses di setiap batang, yang ditunjukkan dengan warna oranye, ditampilkan saat sistem menukar buffer. Metrik ini memberikan petunjuk penting tentang overdraw.

Pada GPU yang performanya lebih rendah, rasio pengisian yang tersedia—kecepatan GPU dapat mengisi buffering frame—bisa jadi agak rendah. Seiring bertambahnya jumlah piksel yang diperlukan untuk menggambar frame, GPU mungkin memerlukan waktu lebih lama untuk memproses perintah baru, dan meminta sistem lainnya untuk menunggu hingga prosesnya selesai. Batang Proses menunjukkan bahwa lonjakan ini terjadi saat GPU kewalahan mencoba menggambar piksel secepat mungkin. Masalah selain jumlah mentah piksel juga dapat menyebabkan metrik ini melonjak. Misalnya, jika alat Debug Overdraw GPU menunjukkan overdraw yang berat dan Proses yang melonjak, kemungkinan ada masalah dengan overdraw.

Untuk informasi selengkapnya, lihat Kecepatan rendering GPU profil.

Memperbaiki overdraw

Anda dapat melakukan hal berikut untuk mengurangi atau menghilangkan overdraw:

  • Menghapus latar belakang yang tidak diperlukan dalam tata letak.
  • Meratakan hierarki tampilan.
  • Mengurangi transparansi.

Bagian ini memberikan informasi tentang masing-masing pendekatan ini.

Menghapus latar belakang yang tidak diperlukan di tata letak

Secara default, tata letak tidak memiliki latar belakang, yang berarti tata letak tidak merender apa pun secara langsung dengan sendirinya. Namun, jika memiliki latar belakang, tata letak mungkin berkontribusi pada overdraw.

Anda dapat meningkatkan performa rendering dengan menghapus latar belakang yang tidak diperlukan. Latar belakang yang tidak diperlukan mungkin tidak terlihat karena tertutup sepenuhnya oleh semua yang digambar oleh aplikasi di atasnya. Misalnya, sistem mungkin sepenuhnya menutupi latar belakang induknya saat menggambar tampilan turunan di atasnya.

Untuk mengetahui penyebab Anda melakukan overdraw, lihat hierarki di alat Layout Inspector. Anda dapat mencari latar belakang yang tidak terlihat oleh pengguna dan menghilangkannya. Anda dapat menghapus latar belakang yang tidak diperlukan ketika ada banyak penampung yang memiliki warna latar belakang yang sama. Anda dapat menyetel latar belakang jendela ke warna latar belakang utama aplikasi, dan membiarkan semua penampung di atasnya tanpa nilai latar belakang yang ditentukan.

Meratakan hierarki tampilan

Tata letak modern membantu Anda menumpuk dan melapisi tampilan untuk menghasilkan desain yang indah. Namun, tindakan tersebut dapat menurunkan performa dengan menghasilkan overdraw, terutama dalam skenario saat setiap objek tampilan yang ditumpuk buram, sehingga harus menggambarkan baik piksel yang terlihat maupun yang tidak terlihat ke layar.

Jika mengalami masalah ini, Anda dapat meningkatkan performa dengan mengoptimalkan hierarki tampilan untuk mengurangi jumlah objek UI yang tumpang tindih. Untuk informasi selengkapnya tentang cara mencapai hal ini, lihat Performa dan hierarki tampilan.

Mengurangi transparansi

Rendering piksel transparan di layar, yang dikenal sebagai rendering alfa, adalah kontributor utama pada overdraw. Tidak seperti overdraw standar—ketika sistem sepenuhnya menyembunyikan piksel yang sudah digambar dengan menggambar piksel buram di atasnya—objek transparan mengharuskan piksel yang sudah ada untuk digambar terlebih dahulu, agar pencampuran yang tepat dapat terjadi.

Efek visual seperti animasi transparan, animasi memudar, dan drop shadow memerlukan beberapa transparansi, sehingga dapat berkontribusi secara signifikan pada overdraw. Anda dapat memperbaiki overdraw dalam situasi ini dengan mengurangi jumlah objek transparan yang Anda render. Misalnya, Anda dapat memperoleh teks abu-abu dengan menggambar teks hitam di TextView dengan nilai alfa transparan yang ditetapkan di atasnya. Namun, Anda bisa mendapatkan efek yang sama guna menghasilkan performa yang lebih baik dengan menggambar teks dengan warna abu-abu.

Untuk mempelajari biaya performa yang ditimbulkan oleh transparansi di seluruh pipeline menggambar lebih lanjut, tonton video Biaya Tersembunyi Transparansi.