Android 13'ten başlayarak Donanım Oluşturucu (HWC) HAL, AIDL'de tanımlanmıştır ve android.hardware.graphics.composer@2.1
ila 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, satıcıların HIDL sürümü yerine Android 13'ten başlayarak AIDL oluşturucu HAL'i uygulamaları teşvik ediliyor. Daha fazla bilgi için Uygulama bölümüne bakın.
AIDL ve HIDL HAL'ler arasındaki farklar
android.hardware.graphics.composer3
adlı yeni AIDL oluşturucusu HAL, IComposer.aidl
tanımlanmıştır. Aşağıdaki değişikliklerle HIDL HAL android.hardware.graphics.composer@2.4
benzer bir API ortaya çıkarır:
Hızlı Mesaj Kuyruğunun (FMQ) parsellenebilir komutlar lehine kaldırılması.
AIDL HAL, HIDL'de FMQ üzerinden serileştirilmiş komutların aksine, güçlü bir şekilde yazılan parsellenebilir türlere 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öntemiIComposerClient.aidl
şu şekilde tanımlanmıştır:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
burada her komut,
DisplayCommand.aidl
tanımlanmış, türü kesin olarak belirlenmiş bir parsellenebilir türdür. Komut yanıtları,CommandResultPayload.aidl
tanımlanan kesin olarak yazılan ayrıştırılabilir öğelerdir.Bu yöntem için etkin istemci olmadığından
IComposerClient.getClientTargetSupport
kaldırılması.ASurfaceTransaction_setColor
tanımlandığı gibi, Android'deki üst grafik yığınıyla daha iyi uyum sağlamak için renklerin bayt yerine kayan nokta olarak temsil edilmesi.HDR içeriğini kontrol etmek için yeni alanların eklenmesi.
AIDL HAL'de, karışık SDR/HDR katman yığınları, bir HDR katmanı aynı anda ekranda olduğunda SDR katmanlarının kesintisiz karartılmasını destekler.
LayerCommand
brightness
alanı, SurfaceFlinger'ın katman başına bir parlaklık belirlemesine olanak tanır, böylece HWC, katmanın içeriğini gama alanının aksine doğrusal ışık alanında karartır.ClientTargetPropertyWithBrightness
brightness
alanı, HWC'nin istemci bileşimi için parlaklık alanını belirlemesine veRenderEngine
istemci bileşimindeki SDR katmanlarını karartıp karartmayacağına dair talimat vermesine olanak tanır.dimmingStage
alanı, HWC'ninRenderEngine
içeriği ne zaman karartması gerektiğini yapılandırmasını sağlar. Bu, renk ardışık düzenlerinde satıcı tarafından tanımlanan kontrast geliştirmelerine izin vermek için gama alanında karartmayı tercih edebilecek satıcı tanımlıColorModes
barındırır.Ekran dekorasyonları için
Composition.aidl
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ın, yeni
DisplayDecorationSupport.aidl
tanımlandığı gibi birDisplayDecorationSupport
yapısı döndürmek içinIComposerClient.getDisplayDecorationSupport
uygulamasını uygulaması gerekir. Bu yapı, cihazın gerektirdiğiPixelFormat
veAlphaInterpretation
numaralandırmalarını açıklar. Bu uygulamanın ardından, Sistem Kullanıcı Arayüzü alfa maskesi katmanını, özel donanımdan yararlanan yeni bir kompozisyon türü olanDISPLAY_DECORATION
olarak işaretler.DisplayCommand.aidl
dosyasına yeni birexpectedPresentTime
alanı eklendi.expectedPresentTime
alanı, SurfaceFlinger'ın beklenen şimdiki zamanı geçerli içeriğin ekranda görüntülenmesi gereken zamana ayarlamasına olanak tanır. Bu özellik sayesinde SurfaceFlinger, uygulamaya önceden bir mevcut komut göndererek kompozisyon çalışmasının daha fazlasını gerçekleştirmesine olanak tanır.Önyükleme ekranı yapılandırmasını denetlemek için yeni API'lerin eklenmesi.
Satıcılar,
BOOT_DISPLAY_CONFIG
kullanarak önyükleme ekranı yapılandırmasının desteklendiğini belirtebilir.setBootDisplayConfig
,clearBootDisplayConfig
vegetPreferredBootDisplayConfig
yöntemleriBOOT_DISPLAY_CONFIG
aşağıdaki şekilde kullanır:setBootDisplayConfig
kullanarak çerçeve, satıcılara önyükleme zamanı görüntüleme yapılandırması hakkında bilgi verir. Satıcılar, önyükleme ekranı yapılandırmasını önbelleğe almalı ve bir sonraki yeniden başlatmada bu yapılandırmada önyükleme yapmalıdır. Cihaz bu yapılandırmada önyükleme yapamıyorsa satıcının bu yapılandırmanın çözünürlüğü ve yenileme hızıyla eşleşen bir yapılandırma bulması gerekir. Böyle bir yapılandırma mevcut değilse satıcının tercih ettiği ekran yapılandırmasını kullanması gerekir.clearBootDisplayConfig
komutunu kullanarak çerçeve, satıcılara ö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 bilgi verir.getPreferredBootDisplayConfig
kullanarak çerçeve, satıcının tercih ettiği önyükleme 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'lerin eklenmesi.
Satıcılar,
DISPLAY_IDLE_TIMER
kullanarak bu ekran için satıcı tarafından bir eylemsizlik zamanlayıcısının uygulandığını belirtebilir. Boştayken bu özellik, gücü korumak için yenileme hızını daha düşük bir ayara getirir. Platform, zamanlayıcının zaman aşımını kontrol etmek ve bazı durumlarda boştayken istenmeyen yenileme hızı geçişlerini önlemek amacıyla onu devre dışı bırakmak içinsetIdleTimerEnabled
kullanır.IComposerCallback.onVsyncIdle
geri çağrısının kullanılması, platforma ekranın boşta olduğunu vevsync
temposunun değiştiğini gösterir. Platform bu geri aramayavsync
modelini sıfırlayarak yanıt verir. Bir sonraki karedevsync
yeniden senkronizasyonunu zorlar ve yenivsync
temposunu öğrenir.
Uygulama
Satıcıların Android 13 için AIDL HAL'i uygulaması zorunlu değildir. Ancak, yeni işlevleri ve API'leri kullanmak için HIDL sürümü yerine AIDL oluşturucu HAL'yi uygulamaları teşvik edilmektedir.
AIDL HWC HAL için bir referans uygulaması Android emülatörlerinde uygulanmaktadır.
Test yapmak
Uygulamanızı test etmek için VtsHalGraphicsComposer3_TargetTest
çalıştırın.