Komposer Perangkat Keras HAL

Hardware Composer (HWC) HAL menentukan cara paling efisien untuk menggabungkan buffer dengan perangkat keras yang tersedia. Sebagai HAL, implementasinya spesifik pada perangkat dan biasanya dilakukan oleh OEM perangkat keras tampilan.

Nilai dari pendekatan ini mudah dikenali ketika Anda mempertimbangkan bidang overlay , yang menggabungkan beberapa buffer di perangkat keras layar, bukan di GPU. Misalnya, pertimbangkan ponsel Android biasa dalam orientasi potret, dengan bilah status di atas, bilah navigasi di bawah, dan konten aplikasi di mana pun. Konten 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 terakhir meneruskan buffer awal ke perangkat keras tampilan.
  • Melewati ketiga buffer ke perangkat keras tampilan dan menginstruksikannya untuk membaca data dari buffer berbeda untuk bagian layar berbeda.

Pendekatan yang terakhir ini bisa jauh lebih efisien.

Kemampuan prosesor tampilan sangat bervariasi. Jumlah overlay, apakah lapisan dapat diputar atau dicampur, dan pembatasan posisi dan tumpang tindih mungkin sulit diungkapkan melalui API. Untuk mengakomodasi pilihan-pilihan ini, HWC melakukan perhitungan berikut:

  1. SurfaceFlinger memberi HWC daftar lengkap lapisan dan bertanya, "Bagaimana Anda ingin menangani ini?"
  2. HWC merespons dengan menandai setiap lapisan sebagai komposisi perangkat atau klien.
  3. SurfaceFlinger menangani klien mana pun, meneruskan buffer keluaran ke HWC, dan membiarkan HWC menangani sisanya.

Karena vendor perangkat keras dapat menyesuaikan kode pengambilan keputusan secara khusus, kinerja terbaik dari setiap perangkat dapat diperoleh.

Bidang overlay mungkin kurang efisien dibandingkan komposisi GL ketika tidak ada perubahan pada layar. Hal ini terutama berlaku ketika konten overlay memiliki piksel transparan dan lapisan yang tumpang tindih dicampur. Dalam kasus seperti ini, 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 awal yang telah digabungkan sebelumnya. Hal ini dapat meningkatkan masa pakai 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 tersebut, yang berarti jumlah lapisan yang digunakan oleh suatu aplikasi dapat memiliki dampak terukur pada konsumsi daya dan kinerja.