HAL Hardware Composer (HWC) menentukan cara paling efisien untuk menggabungkan buffering dengan hardware yang tersedia. Sebagai HAL, implementasinya bersifat khusus perangkat dan biasanya dilakukan oleh OEM hardware layar.
Nilai pendekatan ini mudah dikenali saat Anda mempertimbangkan bidang overlay, yang menggabungkan beberapa buffering di hardware layar, bukan GPU. Misalnya, pertimbangkan ponsel Android standar dalam orientasi potret, dengan status bar di bagian atas, menu navigasi di bagian bawah, dan konten aplikasi di tempat lain. Konten untuk setiap lapisan berada dalam {i>buffer<i} terpisah. Anda dapat menangani komposisi menggunakan salah satu metode berikut:
- Merender konten aplikasi ke buffer awal, lalu merender status panel di atasnya, menu navigasi di atasnya, dan terakhir meneruskan buffer awal ke hardware layar.
- Meneruskan ketiga buffering ke hardware layar dan menginstruksikannya untuk membaca data dari buffering yang berbeda untuk bagian layar yang berbeda.
Pendekatan yang terakhir dapat jauh lebih efisien.
Kemampuan prosesor layar bervariasi secara signifikan. Jumlah overlay, apakah lapisan dapat diputar atau digabungkan, dan batasan pada pemosisian dan tumpang-tindih mungkin sulit untuk dinyatakan melalui API. Untuk mengakomodasi opsi ini, HWC melakukan perhitungan berikut:
- SurfaceFlinger menyediakan daftar lengkap lapisan untuk HWC dan bertanya, "Bagaimana Anda ingin menanganinya?"
- HWC merespons dengan menandai setiap lapisan sebagai komposisi perangkat atau klien.
- SurfaceFlinger menangani klien apa pun, meneruskan buffer output ke HWC, dan memungkinkan HWC menangani sisanya.
Karena vendor hardware dapat menyesuaikan kode pengambilan keputusan secara khusus, Anda dapat mendapatkan performa terbaik dari setiap perangkat.
Bidang overlay mungkin kurang efisien daripada komposisi GL jika tidak ada yang berubah di layar. Hal ini terutama berlaku saat konten overlay memiliki piksel transparan dan lapisan yang tumpang-tindih digabungkan. Dalam kasus tersebut, HWC dapat meminta komposisi GLES untuk beberapa atau semua lapisan dan mempertahankan buffer gabungan. Jika SurfaceFlinger meminta untuk menggabungkan kumpulan buffer yang sama, HWC dapat menampilkan buffer goresan yang sebelumnya digabungkan. Hal ini dapat meningkatkan masa pakai baterai perangkat yang tidak ada aktivitasnya.
Perangkat Android biasanya mendukung empat bidang overlay. Mencoba menggabungkan lebih banyak lapisan daripada overlay menyebabkan sistem menggunakan komposisi GLES untuk beberapa lapisan, yang berarti jumlah lapisan yang digunakan oleh aplikasi dapat memiliki dampak yang dapat diukur pada konsumsi daya dan performa.