Donanım Oluşturucu HAL

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'i tarafından yapılır.

Bu yaklaşımın değeri gösterge donanımı yerine GPU uçakları, kompozit birden tamponlarını bindirme göz önüne aldığımızda tanımak kolaydır. Örneğin, durum çubuğu üstte, gezinme çubuğu altta ve uygulama içeriği diğer her yerde olacak şekilde dikey yönde tipik bir Android telefon düşünün. Her katmanın içeriği ayrı arabelleklerde bulunur. Kompozisyonu aşağıdaki yöntemlerden birini kullanarak işleyebilirsiniz:

  • Uygulama içeriğini bir çalışma arabelleğine işlemek, ardından bunun üzerinde durum çubuğunu, bunun üzerinde gezinme çubuğunu oluşturmak ve son olarak çizik arabelleğini ekran donanımına geçirmek.
  • Üç ara belleğin tümünü ekran donanımına iletmek ve ekranın farklı bölümleri için farklı arabelleklerden veri okumasını istemek.

İkinci yaklaşım önemli ölçüde daha verimli olabilir.

Ekran işlemcisi özellikleri önemli ölçüde farklılık gösterir. 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 ve örtüşme üzerindeki kısıtlamaların bir API aracılığıyla ifade edilmesi zor olabilir. Bu seçeneklere uyum sağlamak için HWC aşağıdaki hesaplamaları yapar:

  1. SurfaceFlinger, HWC'ye tam bir katman listesi sağlar ve "Bunu nasıl halletmek istersiniz?" diye sorar.
  2. HWC, her katmanı cihaz veya istemci bileşimi olarak işaretleyerek yanıt verir.
  3. SurfaceFlinger, çıktı arabelleğini HWC'ye geçirerek herhangi bir istemciyle 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ı almak mümkündür.

Ekrandaki hiçbir şey değişmediğinde bindirme düzlemleri GL kompozisyonundan daha az verimli olabilir. Bu, özellikle bindirme içerikleri saydam piksellere sahip olduğunda ve örtüşen katmanlar karıştırıldığında geçerlidir. Bu gibi durumlarda, HWC, bazı veya tüm katmanlar için GLES bileşimi talep edebilir ve birleştirilmiş tamponu tutabilir. SurfaceFlinger aynı arabellek kümesini birleştirmeyi isterse, HWC önceden birleştirilmiş kazıma arabelleğini gösterebilir. Bu, boşta kalan bir cihazın pil ömrünü artırabilir.

Android cihazlar genellikle dört bindirme düzlemini destekler. Katmanlardan daha fazla katmanı birleştirmeye çalışmak, sistemin bazıları için GLES bileşimi 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 etkisi olabileceği anlamına gelir.