Google berkomitmen untuk mendorong terwujudnya keadilan rasial bagi komunitas Kulit Hitam. Lihat caranya.

Mengurangi overdraw

Aplikasi dapat menggambar pixel yang sama lebih dari satu kali dalam satu frame, peristiwa ini disebut dengan overdraw. Overdraw biasanya tidak diperlukan, dan sebaiknya dihilangkan. Overdraw termanifestasi sebagai masalah performa dengan menghabiskan waktu GPU untuk merender piksel yang tidak berkontribusi pada tampilan yang dilihat oleh pengguna di layar.

Dokumen ini menjelaskan overdraw: apa itu overdraw, cara mendiagnosisnya, dan tindakan yang dapat Anda lakukan untuk menghilangkan atau memitigasinya.

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 algoritme pelukis: yaitu dalam urutan dari belakang ke depan. Urutan rendering ini memungkinkan sistem 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 overdraw GPU

Alat Debug Overdraw GPU menggunakan kode warna untuk menampilkan frekuensi aplikasi menggambar setiap piksel di layar. Semakin tinggi frekuensinya, semakin besar kemungkinan overdraw memengaruhi performa aplikasi.

Untuk informasi selengkapnya, lihat cara memvisualisasikan overdraw GPU.

Alat rendering GPU profil

Alat Rendering GPU Profil menampilkan, dalam bentuk histogram scroll, waktu yang diperlukan oleh setiap tahap pipeline rendering untuk menampilkan satu frame. Bagian Proses dari setiap batang, yang ditunjukkan dengan warna oranye, muncul saat sistem bertukar buffering; 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 saat 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 cara membuat profil kecepatan rendering GPU.

Memperbaiki overdraw

Ada beberapa strategi yang dapat Anda lakukan untuk mengurangi atau menghilangkan overdraw:

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

Bagian ini memberikan informasi tentang masing-masing pendekatan ini.

Menghapus latar belakang yang tidak diperlukan pada tata letak

Secara default, tata letak tidak memiliki latar belakang, artinya tata letak tidak merender apa pun secara langsung dengan sendirinya. Akan tetapi, jika memiliki latar belakang, tata letak dapat berkontribusi pada overdraw.

Menghapus latar belakang yang tidak diperlukan adalah cara cepat untuk menyempurnakan performa rendering. Latar belakang yang tidak diperlukan mungkin tidak pernah terlihat karena sepenuhnya tertutup oleh semua item lain yang sedang digambar oleh aplikasi di atas tampilan tersebut. Misalnya, sistem dapat sepenuhnya menutupi latar belakang induknya saat menggambar tampilan turunan di atasnya.

Untuk mencari tahu penyebab Anda melakukan overdraw, lihat hierarki di alat Layout Inspector. Saat Anda melakukannya, cari latar belakang yang dapat Anda hilangkan, karena latar belakang tersebut tidak terlihat oleh pengguna. Kasus yang mana banyak container memiliki warna latar belakang yang sama menawarkan peluang lain untuk menghilangkan latar belakang yang tidak diperlukan: Anda dapat menyetel latar belakang jendela ke warna latar belakang utama aplikasi, dan membiarkan semua container di atasnya tanpa nilai latar belakang yang ditentukan.

Meratakan hierarki tampilan

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

Jika Anda mengalami masalah seperti ini, Anda mungkin dapat menyempurnakan performa dengan mengoptimalkan hierarki tampilan untuk mengurangi jumlah objek UI yang tumpang tindih. Untuk informasi selengkapnya tentang cara mencapainya, lihat Mengoptimalkan hierarki tampilan.

Mengurangi transparansi

Rendering piksel transparan di layar, yang dikenal sebagai rendering alfa, adalah kontributor utama pada overdraw. Tidak seperti overdraw standar, yang mana 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 persamaan pencampuran yang tepat dapat terjadi. Efek visual seperti animasi transparan, fade out, dan drop shadow, semuanya melibatkan sejenis transparansi, dan, oleh karena itu, 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 disetel di atasnya. Tetapi Anda dapat memperoleh efek yang sama dengan performa yang jauh lebih baik hanya dengan menggambar teks dalam warna abu-abu.

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