Donanım Oluşturucu (HWC) HAL, arabellekleri mevcut donanımla birleştirmenin en verimli yolunu belirler. Bir HAL olarak, uygulanması cihaza özeldir ve genellikle ekran donanımı OEM'si tarafından yapılır.
Bu yaklaşımın değeri, GPU yerine ekran donanımında birden fazla arabelleği birleştiren overlay katmanları dikkate alındığında kolayca anlaşılabilir. Örneğin, dikey yönde tutulan, üstte durum çubuğu, altta gezinme çubuğu ve diğer her yerde uygulama içeriği bulunan tipik bir Android telefonu ele alalım. Her katmanın içeriği ayrı arabelleklerde bulunur. Kompozisyonu aşağıdaki yöntemlerden birini kullanarak işleyebilirsiniz:
- Uygulama içeriğini bir çizim arabelleğine işleme, ardından durum çubuğunu bunun üzerine, gezinme çubuğunu da durum çubuğunun üzerine işleme ve son olarak çizim arabelleğini ekran donanımına aktarma.
- Üç arabelleğin tümünü ekran donanımına iletme ve ekranın farklı bölümleri için farklı arabelleklerden veri okuması talimatını verme.
İkinci yaklaşım çok daha verimli olabilir.
Ekran işlemcisinin özellikleri önemli ölçüde farklılık gösterir. Yer paylaşımlarının sayısı, katmanların döndürülüp döndürülemeyeceği veya karıştırılıp karıştırılamayacağı ve konumlandırma ile çakışma kısıtlamaları bir API aracılığıyla ifade etmek zor olabilir. HWC, bu seçenekleri karşılamak için aşağıdaki hesaplamaları yapar:
- SurfaceFlinger, HWC'ye katmanların tam listesini sağlar ve "Bunu nasıl işlemek istersiniz?" diye sorar.
- HWC, her katmanı cihaz veya istemci kompozisyonu olarak işaretleyerek yanıt verir.
- SurfaceFlinger, çıkış arabelleğini HWC'ye ileterek tüm istemcilerle ilgilenir ve gerisini HWC'nin halletmesine izin verir.
Donanım satıcıları karar verme kodunu özel olarak uyarlayabildiğinden her cihazdan en iyi performansı elde etmek mümkündür.
Ekranda hiçbir şey değişmediğinde, yer paylaşımı katmanları GL bileşiminden daha az verimli olabilir. Bu durum, özellikle yer paylaşımı içeriklerinde şeffaf pikseller olduğunda ve çakışan katmanlar karıştırıldığında geçerlidir. Bu gibi durumlarda, HWC bazı katmanlar veya tüm katmanlar için GLES bileşimi isteyebilir ve birleştirilmiş arabelleği koruyabilir. SurfaceFlinger aynı arabellek grubunun birleştirilmesini isterse HWC, daha önce birleştirilmiş geçici arabelleği gösterebilir. Bu, boşta duran bir cihazın pil ömrünü uzatabilir.
Android cihazlar genellikle dört katman düzlemini destekler. Yer paylaşımlarından daha fazla katmanı birleştirmeye çalışmak, sistemin bazı katmanlar için GLES birleştirme kullanmasına neden olur. Bu da bir uygulama tarafından kullanılan katman sayısının güç tüketimi ve performans üzerinde ölçülebilir bir etkisi olabileceği anlamına gelir.