HAL Hardware Composer (HWC) menentukan cara paling efisien untuk menggabungkan buffer dengan hardware yang tersedia. Sebagai HAL, implementasinya khusus untuk perangkat dan biasanya dilakukan oleh OEM hardware layar.
Nilai pendekatan ini mudah dikenali saat Anda mempertimbangkan bidang overlay, yang menggabungkan beberapa buffer di hardware layar, bukan GPU. Misalnya, pertimbangkan ponsel Android biasa dalam orientasi potret, dengan status bar di atas, kolom navigasi di bawah, dan konten aplikasi di tempat lain. Konten untuk setiap lapisan berada dalam buffer terpisah. Anda dapat menangani komposisi menggunakan salah satu metode berikut:
- Merender konten aplikasi ke dalam buffer sementara, lalu merender status bar di atasnya, menu navigasi di atasnya, dan terakhir meneruskan buffer sementara ke hardware layar.
- Meneruskan ketiga buffer ke hardware layar dan menginstruksikannya untuk membaca data dari buffer yang berbeda untuk bagian layar yang berbeda.
Pendekatan yang terakhir dapat jauh lebih efisien.
Kemampuan prosesor layar sangat bervariasi. Jumlah overlay, apakah lapisan dapat diputar atau digabungkan, dan batasan pada penempatan dan tumpang-tindih dapat sulit dinyatakan melalui API. Untuk mengakomodasi opsi ini, HWC melakukan perhitungan berikut:
- SurfaceFlinger memberikan daftar lengkap lapisan ke HWC dan bertanya, "Bagaimana Anda ingin menanganinya?"
- HWC merespons dengan menandai setiap lapisan sebagai komposisi perangkat atau klien.
- SurfaceFlinger akan menangani klien apa pun, meneruskan buffer output ke HWC, dan membiarkan HWC menangani sisanya.
Karena vendor hardware dapat menyesuaikan kode pengambilan keputusan, performa terbaik dapat diperoleh dari setiap perangkat.
Bidang overlay mungkin kurang efisien daripada komposisi GL saat tidak ada yang berubah di layar. Hal ini terutama berlaku saat konten overlay memiliki piksel transparan dan lapisan yang tumpang-tindih digabungkan. Dalam kasus seperti itu, HWC dapat meminta komposisi GLES untuk beberapa atau semua lapisan dan mempertahankan buffer yang dikomposisikan. Jika SurfaceFlinger meminta untuk menggabungkan set buffer yang sama, HWC dapat menampilkan buffer sementara yang sebelumnya digabungkan. Hal ini dapat meningkatkan daya tahan baterai perangkat yang tidak digunakan.
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 memberikan dampak yang terukur pada konsumsi daya dan performa.