Android 13'ten itibaren Hardware Composer (HWC) HAL, AIDL'de tanımlanır ve android.hardware.graphics.composer@2.1
ile android.hardware.graphics.composer@2.4
arasındaki HIDL sürümleri kullanımdan kaldırılır.
Bu sayfada, HWC için AIDL ve HIDL HAL arasındaki farklar ile AIDL HAL'nin 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 composer HAL'i uygulamaları önerilir. 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 composer HAL, IComposer.aidl
içinde tanımlanır.
Aşağıdaki değişikliklerle HIDL HAL'ye android.hardware.graphics.composer@2.4
benzer bir API sunar:
Parcelable komutları lehine Hızlı Mesaj Kuyruğu (FMQ) kaldırıldı.
AIDL HAL, HIDL'deki FMQ üzerinden seri hale getirilmiş komutların aksine, kesin olarak türü belirlenmiş parcelable türlerine dayalı komut arayüzünü tanımlar. Bu, komutlar için kararlı bir arayüz ve komut yükünün nasıl yorumlandığına dair daha okunabilir bir tanım sağlar.
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 kesin türü belirlenmiş bir paketlenebilir türdür. Komut yanıtları,CommandResultPayload.aidl
içinde tanımlanan kesin olarak yazılmış parcelable'lardır.Bu yöntem için etkin müşteri olmadığından
IComposerClient.getClientTargetSupport
kaldırıldı.ASurfaceTransaction_setColor
içinde tanımlandığı gibi Android'deki üst grafik yığınıyla daha iyi uyum sağlamak için renklerin bayt yerine kayan nokta olarak gösterilmesi.HDR içeriğini kontrol etmek için yeni alanlar eklendi.
AIDL HAL'de, karışık SDR/HDR katman yığınları, bir HDR katmanı aynı anda ekrandayken SDR katmanlarının sorunsuz şekilde karartılmasını destekler.
LayerCommand
içindekibrightness
alanı, SurfaceFlinger'ın katman başına parlaklık belirtmesine olanak tanır. Böylece HWC, katmanın içeriğini gama alanı yerine doğrusal ışık alanında karartır.ClientTargetPropertyWithBrightness
içindekibrightness
alanı, HWC'nin istemci kompozisyonu için parlaklık alanını belirtmesine veRenderEngine
'a istemci kompozisyonundaki SDR katmanlarını karartma talimatı vermesine olanak tanır.dimmingStage
alanı, HWC'ninRenderEngine
içeriğinin ne zaman karartılacağını yapılandırmasına olanak tanır. Bu, satıcı tarafından tanımlananColorModes
değerini destekler. Satıcı tarafından tanımlanan kontrast geliştirmelerine renk işlem hatlarında izin vermek için gama uzayında karartmayı tercih edebilir.Ekran süslemeleri için
Composition.aidl
'e yeni bir kompozisyon türüDISPLAY_DECORATION
eklendi.Bazı cihazlarda, yuvarlak köşeleri ve ekranlardaki kesikleri yumuşatan alfa maskesinin çizimini optimize etmek için özel donanım bulunur. Bu tür donanımlara sahip cihazlar, yeni
DisplayDecorationSupport.aidl
'da tanımlandığı gibi birDisplayDecorationSupport
yapısı döndürmek içinIComposerClient.getDisplayDecorationSupport
'ı uygulamalıdır. Bu yapıda, cihazın gerektirdiğiPixelFormat
veAlphaInterpretation
numaralandırmaları açıklanmaktadır. Bu uygulama üzerine, Sistem Kullanıcı Arayüzü, alfa maskesi katmanınıDISPLAY_DECORATION
olarak işaretler. Bu, özel donanımdan yararlanan yeni bir kompozisyon türüdür.DisplayCommand.aidl
'e yeni birexpectedPresentTime
alanı eklendi.expectedPresentTime
alanı, SurfaceFlinger'ın beklenen sunum zamanını, mevcut içeriğin ekranda gösterilmesi gereken zamana ayarlamasına olanak tanır. Bu özellik sayesinde SurfaceFlinger, uygulamaya önceden bir sunma komutu göndererek daha fazla birleştirme çalışmasının sıralı işlenmesine olanak tanır.Başlatma ekranı yapılandırmasını kontrol etmek için yeni API'ler eklendi.
BOOT_DISPLAY_CONFIG
kullanarak tedarikçiler, başlatma ekranı yapılandırmasının desteklendiğini belirtebilir.setBootDisplayConfig
,clearBootDisplayConfig
vegetPreferredBootDisplayConfig
yöntemleriBOOT_DISPLAY_CONFIG
değerini aşağıdaki gibi kullanır:setBootDisplayConfig
kullanılarak, çerçeve, satıcıları başlatma zamanı ekran yapılandırması hakkında bilgilendirir. Sağlayıcılar, önyükleme ekranı yapılandırmasında önbelleğe almalı ve bir sonraki yeniden başlatmada bu yapılandırmada önyükleme yapmalıdır. Cihaz bu yapılandırmada başlatılamıyorsa satıcı, bu yapılandırmanın çözünürlüğüne ve yenileme hızına uygun bir yapılandırma bulmalıdır. Böyle bir yapılandırma yoksa satıcı, tercih ettiği ekran yapılandırmasını kullanmalıdır.clearBootDisplayConfig
kullanıldığında çerçeve, satıcıları başlatma ekranı yapılandırmasını temizlemeleri ve bir sonraki yeniden başlatma sırasında tercih ettikleri ekran yapılandırmasında başlatmaları konusunda bilgilendirir.getPreferredBootDisplayConfig
kullanıldığında çerçeve, satıcının tercih ettiği başlatma modunu sorgular.
Önyükleme ekranı yapılandırması desteklenmediğinde bu yöntemler
UNSUPPORTED
değerini döndürür.Ekran boşta kalma zamanlayıcısını kontrol etmek için yeni API'ler eklendi.
Satıcılar,
DISPLAY_IDLE_TIMER
kullanarak bu gösterim için satıcı tarafından bir etkinlik dışı kalma zamanlayıcısı uygulandığını belirtebilir. Bu özellik, kullanılmadığı zamanlarda güç tasarrufu için yenileme hızını daha düşük bir ayara değiştirir. Platform, zamanlayıcının zaman aşımını kontrol etmek ve bazı durumlarda boşta kalma sırasında istenmeyen yenileme hızı geçişlerini önlemek için devre dışı bırakmak üzeresetIdleTimerEnabled
kullanır.IComposerCallback.onVsyncIdle
geri çağırması kullanıldığında platforma, ekranın boşta olduğu vevsync
sıklığının değiştiği belirtilir. Platform, bu geri çağırmayavsync
modelini sıfırlayarak yanıt verir. Bu işlem, sonraki karedevsync
yeniden senkronizasyonunu zorlar ve yenivsync
ritmini öğrenir.
Uygulama
Tedarikçilerin Android 13 için AIDL HAL'yi uygulaması gerekmez. Ancak yeni işlev ve API'leri kullanmak için HIDL sürümü yerine AIDL composer HAL'ı uygulamaları önerilir.
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.