Android 13'ten itibaren Hardware Composer (HWC) HAL, AIDL'de tanımlanır. android.hardware.graphics.composer@2.1
ile android.hardware.graphics.composer@2.4
arasındaki HIDL sürümlerinin desteği sonlandırıldı.
Bu sayfada, HWC için AIDL ve HIDL HAL'leri arasındaki farklar ile AIDL HAL'nin nasıl uygulanacağı ve test edileceği açıklanmaktadır.
AIDL avantajlar sunduğundan, satıcılar Android 13'ten itibaren HIDL sürümü yerine AIDL composer HAL'i uygulayabilir. 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. API, HIDL HAL'e android.hardware.graphics.composer@2.4
benzer ancak aşağıdaki değişiklikleri içerir:
Parcelable komutları lehine Hızlı Mesaj Kuyruğu (FMQ) kaldırıldı.
AIDL HAL, HIDL'deki FMQ üzerinden seri hale getirilmiş komutlar yerine kesin olarak türü belirlenmiş paketlenebilir türlere dayalı komut arayüzünü tanımlar. Bu, komutlar için kararlı bir arayüz ve sistemin komut yükünü nasıl yorumladığına dair daha okunabilir bir tanım sağlar.
executeCommands
5 yöntemi,IComposerClient.aidl
içinde tanımlanmıştır:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
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 türü belirlenmiş paketlenebilirlerdir.Etkin istemciler bu yöntemi kullanmadığı için
IComposerClient.getClientTargetSupport
kaldırıldı.ASurfaceTransaction_setColor
tarafından tanımlandığı şekilde, Android'deki üst grafik yığınıyla uyumlu olması 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ı, HDR katmanı ekranda aynı anda açıkken 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. Bu, HWC'nin katmanın içeriğini gama alanı yerine doğrusal ışık alanında karartmasını sağlar.ClientTargetPropertyWithBrightness
içindekibrightness
alanı, HWC'nin istemci kompozisyonu için parlaklık alanını belirtmesine olanak tanır veRenderEngine
'ye istemci kompozisyonundaki SDR katmanlarını karartıp karartmaması gerektiğini bildirir.dimmingStage
alanı, HWC'ninRenderEngine
içeriği kararttığı zamanı yapılandırmasına olanak tanır. Bu, renk işlem hatlarında satıcı tanımlı kontrast geliştirmelerini etkinleştirmek için gama alanında karartmayı tercih edebilecek satıcı tanımlıColorModes
'yı destekler.Ekran süslemeleri için
Composition.aidl
'eDISPLAY_DECORATION
beste türü eklendi.Bazı cihazlarda, yuvarlak köşeleri ve kesikleri düzeltmek için alfa maskesinin çizimini optimize etmeye yönelik özel donanım bulunur. Bu tür donanımlara sahip cihazlar
IComposerClient.getDisplayDecorationSupport
'ı uygulamalı veDisplayDecorationSupport.aidl
'da tanımlandığı gibi birDisplayDecorationSupport
yapısı döndürmelidir. Bu yapıda, cihazın gerektirdiğiPixelFormat
veAlphaInterpretation
sabitleri açıklanmaktadır. Bu uygulama sonrasında, Sistem Kullanıcı Arayüzü alfa maskesi katmanınıDISPLAY_DECORATION
olarak işaretler. Bu, özel donanımdan yararlanan bir kompozisyon türüdür.expectedPresentTime
alanınınDisplayCommand.aidl
'e eklenmesi.expectedPresentTime
alanı, SurfaceFlinger'ın mevcut içeriğin ekranda ne zaman gösterilmesi gerektiğine dair beklenen sunum zamanını ayarlamasına olanak tanır. Bu özellik sayesinde SurfaceFlinger, uygulamaya önceden bir sunma komutu gönderir. Bu da daha fazla birleştirme işinin sıralanmasına olanak tanır.Başlatma ekranı yapılandırmasını kontrol etmek için yeni API'ler eklendi.
Tedarikçiler,
BOOT_DISPLAY_CONFIG
kullanarak başlangıç ekranı yapılandırmasının desteklendiğini belirtebilir.setBootDisplayConfig
,clearBootDisplayConfig
vegetPreferredBootDisplayConfig
yöntemleriBOOT_DISPLAY_CONFIG
değerini aşağıdaki şekilde kullanır:setBootDisplayConfig
kullanılarak çerçeve, satıcıları başlatma süresi ekran yapılandırması hakkında bilgilendirir. Sağlayı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 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ı ö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.getPreferredBootDisplayConfig
kullanılarak ç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'ler eklendi:
Tedarikçiler,
DISPLAY_IDLE_TIMER
kullanarak bu gösterim için tedarikçi tarafından bir etkinlik dışı kalma zamanlayıcısı uygulandığını belirtebilir. Bu özellik, boşta kalma durumunda gücü korumak 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 kalındığında istenmeyen yenileme hızı geçişlerini önlemek için devre dışı bırakmak üzeresetIdleTimerEnabled
kullanır.IComposerCallback.onVsyncIdle
geri çağırmasını kullanmak, platforma ekranın boşta olduğunu vevsync
sıklığının değiştiğini gösterir. 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 satıcılar, AIDL composer HAL'in işlevlerini ve API'lerini kullanmak için HIDL sürümü yerine AIDL composer HAL'i uygulamaya teşvik edilir.
Android emülatörleri, AIDL HWC HAL için bir referans uygulaması içerir.
Test
Uygulamanızı test etmek için VtsHalGraphicsComposer3_TargetTest
komutunu çalıştırın.