Android 13'ten itibaren Donanım Oluşturucu (HWC) HAL'i AIDL'de tanımlanır ve android.hardware.graphics.composer@2.1
ile android.hardware.graphics.composer@2.4
arasındaki HIDL sürümlerinin desteği sonlandırılır.
Bu sayfada, HWC için AIDL ile HIDL HAL arasındaki farklar ve AIDL HAL'in uygulanması ve test edilmesi açıklanmaktadır.
AIDL'nin sunduğu avantajlar nedeniyle tedarikçilerin, Android 13'ten itibaren HIDL sürümü yerine AIDL besteci HAL'ini uygulamaya teşvik edilir. Daha fazla bilgi için Uygulama bölümüne bakın.
AIDL ve HIDL HAL'leri arasındaki farklar
android.hardware.graphics.composer3
adlı yeni AIDL derleyici HAL'i IComposer.aidl
içinde tanımlanır.
Aşağıdaki değişikliklerle HIDL HALandroid.hardware.graphics.composer@2.4
'e benzer bir API sağlar:
Paketlenebilir komutlar için Hızlı Mesaj Kuyruğu (FMQ) kaldırıldı.
AIDL HAL, komut arayüzünü HIDL'deki FMQ üzerinden serileştirilmiş komutların aksine, güçlü şekilde yazılmış ve bölünebilir türlere göre tanımlar. Bu sayede, komutlar için kararlı bir arayüz ve komut yükü'nün nasıl yorumlandığına dair daha okunaklı bir tanım sağlanır.
executeCommands
yöntemi,IComposerClient.aidl
içinde şu şekilde tanımlanır:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
Burada her komut,
DisplayCommand.aidl
içinde tanımlanan güçlü şekilde yazılmış bir paketlenebilir türdür. Komut yanıtları,CommandResultPayload.aidl
içinde tanımlanan güçlü şekilde yazılmış paketlenebilir öğelerdir.Bu yöntem için etkin müşteri olmadığından
IComposerClient.getClientTargetSupport
kaldırıldı.Android'deki üst grafik yığınıyla daha uyumlu olması için renklerin bayt yerine kayan nokta olarak gösterilmesi (
ASurfaceTransaction_setColor
'te tanımlandığı şekilde).HDR içeriğini kontrol etmek için yeni alanlar eklendi.
AIDL HAL'de, karma SDR/HDR katman yığınları, ekranda aynı anda bir HDR katmanı olduğunda SDR katmanlarının sorunsuz şekilde karartılmasını destekler.
LayerCommand
içindekibrightness
alanı, SurfaceFlinger'ın katman başına bir parlaklık belirtmesine olanak tanır. Böylece HWC, katmanın içeriğini gama alanının aksine doğrusal ışık alanında karartır.ClientTargetPropertyWithBrightness
içindekibrightness
alanı, HWC'nin istemci kompozisyonu için parlaklık alanını belirtmesine ve istemci kompozisyonundaki SDR katmanlarının karartılı olup olmayacağınıRenderEngine
yönetmesine olanak tanır.dimmingStage
alanı, HWC'ninRenderEngine
'ın içeriği ne zaman karartması gerektiğini yapılandırmasına olanak tanır. Bu, renk ardışık düzenlerinde tedarikçi firma tanımlı kontrast geliştirmelerine izin vermek için tedarikçi firma tanımlıColorModes
'yi (gama alanında karartmayı tercih edebilir) destekler.Ekran süslemeleri için
Composition.aidl
bölümünde yeni bir kompozisyon türüDISPLAY_DECORATION
eklendi.Bazı cihazlarda, ekranlardaki yuvarlatılmış köşeleri ve kesikleri yumuşatan alfa maskesinin çizimini optimize etmek için özel donanım bulunur. Bu tür donanıma sahip cihazlar, yeni
DisplayDecorationSupport.aidl
sürümünde tanımlandığı şekildeDisplayDecorationSupport
yapısı döndürmek içinIComposerClient.getDisplayDecorationSupport
uygulamalıdır. Bu yapı, cihazın ihtiyaç duyduğuPixelFormat
veAlphaInterpretation
enum'larını açıklar. Bu uygulamadan sonra Sistem UI, alfa maske katmanını özel donanımdan yararlanan yeni bir kompozisyon türü olanDISPLAY_DECORATION
olarak işaretler.DisplayCommand.aidl
alanına yeni birexpectedPresentTime
alanı eklendi.expectedPresentTime
alanı, SurfaceFlinger'ın beklenen mevcut zamanı geçerli içeriğin ekranda gösterilmesi gereken zamana ayarlamasına olanak tanır. SurfaceFlinger bu özellik sayesinde, uygulamaya önceden bir mevcut komut göndererek kompozisyon çalışmasının daha fazlasını ardışık düzene almasını sağlar.Açılış ekranı yapılandırmasını kontrol etmek için yeni API'ler eklendi.
Tedarikçiler,
BOOT_DISPLAY_CONFIG
kullanarak önyükleme ekranı yapılandırmasının desteklendiğini belirtebilir.setBootDisplayConfig
,clearBootDisplayConfig
vegetPreferredBootDisplayConfig
yöntemleriBOOT_DISPLAY_CONFIG
değerini aşağıdaki gibi kullanır:Çerçeve,
setBootDisplayConfig
'i kullanarak tedarikçi firmaları önyükleme süresi ekran yapılandırması hakkında bilgilendirir. Tedarikçi firmalar, önyükleme ekranı yapılandırmasında önbelleğe almalıdır ve sonraki yeniden başlatmada bu yapılandırmada önyükleme yapmalıdır. Cihaz bu yapılandırmada önyükleme yapamıyorsa tedarikçi firma, bu yapılandırmadaki çözünürlük ve yenileme hızıyla eşleşen bir yapılandırma bulmalıdır. Böyle bir yapılandırma yoksa tedarikçi, tercih ettiği görüntüleme yapılandırmasını kullanmalıdır.Çerçeve,
clearBootDisplayConfig
kullanarak tedarikçileri önyükleme ekranı yapılandırmasını temizlemeleri ve bir sonraki yeniden başlatma sırasında tercih ettikleri ekran yapılandırmasında önyükleme yapmaları konusunda bilgilendirir.Çerçeve,
getPreferredBootDisplayConfig
kullanarak tedarikçinin tercih ettiği önyükleme modunu sorgulayarak
Açılış ekranı yapılandırması desteklenmediğinde bu yöntemler
UNSUPPORTED
değerini döndürür.Ekrandaki boş zamanlayıcıyı kontrol etmek için yeni API'ler eklendi.
Satıcılar,
DISPLAY_IDLE_TIMER
değerini kullanarak bu ekran için satıcı tarafından bir etkin olmama zamanlayıcısının uygulandığını belirtebilir. Bu özellik, cihaz boştayken güç tasarrufu yapmak için yenileme hızını daha düşük bir ayara değiştirir. Platform, zamanlayıcının zaman aşım süresini kontrol etmek ve bazı durumlarda, boştayken istenmeyen yenileme hızı geçişlerini önlemek için devre dışı bırakmak amacıylasetIdleTimerEnabled
kullanır.IComposerCallback.onVsyncIdle
geri çağırma işlevinin kullanılması, platforma ekranın boşta olduğunu vevsync
ritiminin değiştiğini gösterir. Platform, bu geri aramayavsync
modelini sıfırlayarak yanıt verir. Sonraki karedevsync
senkronizasyonunu zorlar ve yenivsync
ritmi öğrenir.
Uygulama
Tedarikçi firmaların Android 13 için AIDL HAL'i uygulaması gerekmez. Ancak geliştiricilerin, yeni işlevleri ve API'leri kullanmak için HIDL sürümü yerine AIDL derleyici HAL'ini uygulamalarını öneririz.
Android emülatörlerinde AIDL HWC HAL için bir referans uygulama uygulanır.
Test
Uygulamanızı test etmek için VtsHalGraphicsComposer3_TargetTest
komutunu çalıştırın.