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.
executeCommands5 yöntemi,IComposerClient.aidliçinde tanımlanmıştır:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);Her komut,
DisplayCommand.aidliçinde tanımlanan kesin türü belirlenmiş bir paketlenebilir türdür. Komut yanıtları,CommandResultPayload.aidliçinde tanımlanan kesin türü belirlenmiş paketlenebilirlerdir.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ç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.
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ı 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_DECORATIONbeste 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 birDisplayDecorationSupportyapısı döndürmelidir. Bu yapıda, cihazın gerektirdiğiPixelFormatveAlphaInterpretationsabitleri açıklanmaktadır. 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'e 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 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_CONFIGkullanarak başlangıç ekranı yapılandırmasının desteklendiğini belirtebilir.setBootDisplayConfig,clearBootDisplayConfigvegetPreferredBootDisplayConfigyöntemleriBOOT_DISPLAY_CONFIGdeğerini aşağıdaki şekilde kullanır:setBootDisplayConfigkullanı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.clearBootDisplayConfigkullanı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.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 ekranın boşta olduğunu vevsyncsıklığının değiştiğini gösterir. 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.