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ümleri kullanımdan kaldı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'yi 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'a 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 serileştirilmiş komutlar yerine kesin olarak türlenmiş parcelable türlerine 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.
executeCommands5 yöntemi,IComposerClient.aidliçinde tanımlanmıştır:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);Her komut,
DisplayCommand.aidliçinde tanımlanan, kesin olarak türü belirlenmiş bir paketlenebilir türdür. Komut yanıtları,CommandResultPayload.aidliçinde tanımlanan kesin türü belirlenmiş paketlerdir.Etkin istemciler bu yöntemi kullanmadığı için
IComposerClient.getClientTargetSupportkaldırıldı.ASurfaceTransaction_setColortarafı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çeriklerin kontrolü için yeni alanlar eklendi.
AIDL HAL'de, karma SDR/HDR katman yığınları, HDR katmanı ekrandayken SDR katmanlarının sorunsuz şekilde karartılmasını destekler.
LayerCommandiçindekibrightnessalanı, 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.ClientTargetPropertyWithBrightnessiçindekibrightnessalanı, 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.dimmingStagealanı, HWC'ninRenderEngineiçeriği kararttığı zamanı yapılandırmasına olanak tanır. Bu, renk işlem hatlarında satıcı tarafından tanımlanan kontrast geliştirmelerini etkinleştirmek için gama alanında karartmayı tercih edebilecek satıcı tanımlıColorModesdeğerlerini karşılar.Ekran süslemeleri için
Composition.aidl'aDISPLAY_DECORATIONbeste türü eklendi.Bazı cihazlarda, ekranlardaki yuvarlak köşeleri ve kesikleri düzleştiren alfa maskesinin çizimini optimize etmek için özel donanım bulunur. Bu tür donanımlara sahip cihazlar
IComposerClient.getDisplayDecorationSupport'ı uygulamalı veDisplayDecorationSupport.aidl'da tanımlandığı gibi birDisplayDecorationSupportyapısı döndürmelidir. Bu yapı, cihazın gerektirdiğiPixelFormatveAlphaInterpretationsabit listelerini açıklar. Bu uygulama sonrasında, Sistem Kullanıcı Arayüzü, alfa maskesi katmanınıDISPLAY_DECORATIONolarak işaretler. Bu, özel donanımdan yararlanan bir kompozisyon türüdür.expectedPresentTimealanınınDisplayCommand.aidlöğesine eklenmesi.expectedPresentTimealanı, 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 çalışmasının 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_CONFIGkullanarak başlangıç ekranı yapılandırmasının desteklendiğini belirtebilir.setBootDisplayConfig,clearBootDisplayConfigvegetPreferredBootDisplayConfigyöntemleriBOOT_DISPLAY_CONFIGdeğerini aşağıdaki gibi kullanır:setBootDisplayConfigkullanılarak çerçeve, satıcıları başlatma süresi ekran yapılandırması hakkında bilgilendirir. Tedarikçiler, ö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.Çerçeve,
clearBootDisplayConfigkullanarak 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.getPreferredBootDisplayConfigkullanı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
UNSUPPORTEDdeğ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_TIMERkullanarak 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 üzeresetIdleTimerEnabledkullanır.IComposerCallback.onVsyncIdlegeri çağırmasını kullanmak, platforma gösterimin boşta olduğunu vevsyncsıklığının değiştiğini belirtir. Platform, bu geri çağırmayavsyncmodelini sıfırlayarak yanıt verir. Bu işlem, sonraki karedevsyncyeniden senkronizasyonunu zorlar ve yenivsyncritmini öğ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.