Donanım Oluşturucu (HWC) HAL, arabellekleri mevcut donanımla birleştirmenin en etkili yolunu belirler. Bir HAL olarak uygulanması cihaza özeldir ve genellikle ekran donanımı OEM'i tarafından yapılır.
GPU yerine ekran donanımındaki birden fazla arabelleği birleştiren katman düzlemlerini düşündüğünüzde bu yaklaşımın değerini anlamak kolaydır. Örneğin, durum çubuğunun üstte, gezinme çubuğunun altta ve uygulama içeriğinin diğer her yerde olduğu dikey yöndeki tipik bir Android telefonu düşünün. Her katmanın içeriği ayrı arabelleklerde bulunur. Aşağıdaki yöntemlerden birini kullanarak kompozisyonu yönetebilirsiniz:
- Uygulama içeriğini bir karalama arabelleğine dönüştürmek, ardından durum çubuğunu bunun üzerinde, gezinme çubuğunu da onun üzerinde oluşturmak ve son olarak karalama arabelleğini ekran donanımına geçirmek.
- Üç arabelleğin tamamını ekran donanımına geçirmek ve ekrana ekranın farklı bölümleri için farklı arabelleklerden veri okuması talimatını vermek.
İkinci yaklaşım önemli ölçüde daha verimli olabilir.
Ekran işlemcisi yetenekleri önemli ölçüde farklılık gösterir. Kaplamaların sayısını, katmanların döndürülüp döndürülemeyeceğini veya karıştırılabileceğini ve konumlandırma ve örtüşmeyle ilgili kısıtlamaların bir API aracılığıyla ifade edilmesi zor olabilir. Bu seçenekleri karşılamak için HWC aşağıdaki hesaplamaları gerçekleştirir:
- SurfaceFlinger, HWC'ye katmanların tam listesini sağlar ve "Bunu nasıl halletmek istiyorsunuz?" diye sorar.
- HWC, her katmanı cihaz veya istemci bileşimi olarak işaretleyerek yanıt verir.
- SurfaceFlinger, çıktı arabelleğini HWC'ye aktararak tüm istemcilerle ilgilenir ve HWC'nin gerisini halletmesine izin verir.
Donanım satıcıları karar verme kodunu özel olarak özelleştirebildiğinden, her cihazdan en iyi performansı elde etmek mümkündür.
Ekranda hiçbir şey değişmediğinde kaplama düzlemleri GL kompozisyonundan daha az verimli olabilir. Bu, özellikle kaplama içeriklerinin şeffaf piksellere sahip olduğu ve üst üste binen katmanların harmanlandığı durumlarda geçerlidir. Bu gibi durumlarda HWC, katmanların bir kısmı veya tamamı için GLES bileşimi talep edebilir ve birleştirilmiş tamponu elinde tutabilir. SurfaceFlinger aynı arabellek kümesini birleştirmeyi isterse HWC önceden birleştirilmiş karalama arabelleğini gösterebilir. Bu, boşta olan bir cihazın pil ömrünü artırabilir.
Android cihazlar genellikle dört katman düzlemini destekler. Kaplamalardan daha fazla katmanı birleştirmeye çalışmak, sistemin bazıları için GLES kompozisyonunu kullanmasına neden olur; bu, bir uygulama tarafından kullanılan katman sayısının güç tüketimi ve performans üzerinde ölçülebilir bir etkiye sahip olabileceği anlamına gelir.