Hardware Composer (HWC) HAL menentukan cara paling efisien untuk menggabungkan buffer dengan perangkat keras yang tersedia. Sebagai HAL, implementasinya bersifat device-specific dan biasanya dilakukan oleh OEM hardware display.
Nilai dari pendekatan ini mudah dikenali saat Anda mempertimbangkan bidang overlay , yang menggabungkan beberapa buffer di perangkat keras tampilan daripada GPU. Misalnya, pertimbangkan ponsel Android biasa dalam orientasi potret, dengan bilah status di atas, bilah navigasi di bawah, dan konten aplikasi di tempat lain. Isi untuk setiap lapisan berada dalam buffer terpisah. Anda dapat menangani komposisi menggunakan salah satu metode berikut:
- Merender konten aplikasi ke dalam buffer awal, lalu merender bilah status di atasnya, bilah navigasi di atasnya, dan akhirnya meneruskan buffer awal ke perangkat keras tampilan.
- Melewati ketiga buffer ke perangkat keras tampilan dan menginstruksikannya untuk membaca data dari buffer yang berbeda untuk bagian layar yang berbeda.
Pendekatan terakhir dapat secara signifikan lebih efisien.
Kemampuan prosesor tampilan sangat bervariasi. Jumlah overlay, apakah layer bisa diputar atau dicampur, dan pembatasan posisi dan overlap bisa sulit diungkapkan melalui API. Untuk mengakomodasi opsi ini, HWC melakukan perhitungan berikut:
- SurfaceFlinger menyediakan HWC dengan daftar lengkap lapisan dan bertanya, "Bagaimana Anda ingin menangani ini?"
- HWC merespons dengan menandai setiap lapisan sebagai komposisi perangkat atau klien.
- SurfaceFlinger menangani setiap klien, meneruskan buffer output ke HWC, dan membiarkan HWC menangani sisanya.
Karena vendor perangkat keras dapat menyesuaikan kode pengambilan keputusan, memungkinkan untuk mendapatkan kinerja terbaik dari setiap perangkat.
Bidang overlay mungkin kurang efisien dibandingkan komposisi GL saat tidak ada perubahan pada layar. Ini terutama benar ketika konten overlay memiliki piksel transparan dan lapisan yang tumpang tindih dicampur. Dalam kasus seperti itu, HWC dapat meminta komposisi GLES untuk beberapa atau semua lapisan dan mempertahankan buffer komposit. Jika SurfaceFlinger meminta untuk menggabungkan kumpulan buffer yang sama, HWC dapat menampilkan buffer awal yang telah digabungkan sebelumnya. Ini dapat meningkatkan masa pakai baterai perangkat yang tidak digunakan.
Perangkat Android biasanya mendukung empat bidang overlay. Upaya untuk menggabungkan lebih banyak lapisan daripada lapisan menyebabkan sistem menggunakan komposisi GLES untuk beberapa lapisan, yang berarti jumlah lapisan yang digunakan oleh aplikasi dapat memiliki dampak terukur pada konsumsi daya dan kinerja.