Android 13'ten itibaren Donanım Oluşturucu (HWC) HAL, AIDL'de tanımlanmıştı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ılmıştı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 composer HAL, IComposer.aidl
içinde tanımlanır.
Aşağıdaki değişikliklerle birlikte HIDL HAL
android.hardware.graphics.composer@2.4
'ye benzer bir API sunar:
Paketlenebilir komutlar için Hızlı Mesaj Kuyruğu (FMQ) kaldırıldı.
AIDL HAL, komut arayüzünü, HIDL'de FMQ üzerinden serileştirilmiş komutların aksine, güçlü biçimde yazılan ayrıştırılabilir 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ü bir şekilde yazılmış ayrıştırılabilirlerdir.Bu yöntem için etkin istemci olmadığından
IComposerClient.getClientTargetSupport
kaldırıldı.ASurfaceTransaction_setColor
'te tanımlandığı gibi, Android'deki üst grafik yığınıyla daha iyi uyum sağlamak için renklerin bayt yerine kayan noktalı olarak temsil edilmesi.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 belirtmesini sağlar. Böylece HWC, gama alanında değil, doğrusal ışık alanında katmanın içeriğini kararı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ı,RenderEngine
ürününün içeriği karartacağı zamanı HWC'nin yapılandırmasına olanak tanır. Bu özellik, tedarikçi firma tarafından tanımlanan ve gama alanında loş yapmayı tercih edebilecekColorModes
özelliğine uyum sağlar. Böylece, tedarikçi firma tarafından belirlenen renk ardışık düzenlerinde kontrast geliştirmeleri yapılabilir.Ekran süslemeleri için
Composition.aidl
içineDISPLAY_DECORATION
adlı yeni kompozisyon türü eklendi.Bazı cihazlarda, ekranlardaki yuvarlatılmış köşeleri ve kesikleri düzelten alfa maskesinin çizimini optimize edecek özel bir donanım bulunur. Bu tür donanımlara sahip cihazların, yeni
DisplayDecorationSupport.aidl
bölümünde tanımlandığı gibiDisplayDecorationSupport
yapısı döndürmesi içinIComposerClient.getDisplayDecorationSupport
uygulaması gerekir. 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
bölümüne yeniexpectedPresentTime
alanının eklenmesi.expectedPresentTime
alanı, SurfaceFlinger'ın beklenen mevcut zamanı mevcut 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, başlatma ekranı yapılandırmasında önbelleğe almalı ve bir sonraki yeniden başlatmada bu yapılandırmada başlatılmalıdır. Cihaz bu yapılandırmada başlatılamıyorsa satıcının bu yapılandırmanın çözünürlüğüne ve yenileme hızına uygun bir yapılandırma bulması gerekir. 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 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.Çerçeve,
getPreferredBootDisplayConfig
kullanarak tedarikçinin tercih ettiği önyükleme modunu sorgulayarak
Başlatma 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
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 kullanılmadığında 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
tarafından yeniden senkronizasyon yapılmasını zorunlu kılar ve yenivsync
kadansını öğ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.