Donanım Bestecisi HAL

Donanım Oluşturucu (HWC) HAL, arabellekleri mevcut donanımla birleştirmenin en verimli yolunu belirler. Bir HAL olarak, uygulaması 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 kaplama katmanları göz önünde bulundurulduğunda 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 düşünün. Her katmanın içeriği ayrı arabelleklerde bulunur. Aşağıdaki yöntemlerden birini kullanarak kompozisyonu işleyebilirsiniz:

  • Uygulama içeriğini bir çizim arabelleğine işleme, ardından durum çubuğunu, gezinme çubuğunu ve son olarak çizim arabelleğini ekran donanımına aktarma.
  • Üç arabelleğin de ekran donanımına aktarılması ve ekranın farklı bölümleri için farklı arabelleklerden veri okuması talimatının verilmesi.

İkinci yaklaşım çok daha verimli olabilir.

Ekran işlemcisi özellikleri önemli ölçüde değişiklik 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:

  1. SurfaceFlinger, HWC'ye katmanların tam listesini sağlar ve "Bunu nasıl işlemek istersiniz?" diye sorar.
  2. HWC, her katmanı cihaz veya istemci kompozisyonu olarak işaretleyerek yanıt verir.
  3. 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ıları için GLES kompozisyonunu 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.