Donanım Oluşturucu HAL için AIDL

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çindeki brightness 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çindeki brightness alanı, HWC'nin istemci kompozisyonu için parlaklık alanını belirtmesine olanak tanır ve RenderEngine'ye istemci kompozisyonundaki SDR katmanlarını karartıp karartmaması gerektiğini bildirir.

    dimmingStage alanı, HWC'nin RenderEngine 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'e DISPLAY_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ı ve DisplayDecorationSupport.aidl'da tanımlandığı gibi bir DisplayDecorationSupport yapısı döndürmelidir. Bu yapıda, cihazın gerektirdiği PixelFormat ve AlphaInterpretation 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ın DisplayCommand.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 ve getPreferredBootDisplayConfig yöntemleri BOOT_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 üzere setIdleTimerEnabled kullanır.

    • IComposerCallback.onVsyncIdle geri çağırmasını kullanmak, platforma ekranın boşta olduğunu ve vsync sıklığının değiştiğini gösterir. Platform, bu geri çağırmaya vsync modelini sıfırlayarak yanıt verir. Bu işlem, sonraki karede vsync yeniden senkronizasyonunu zorlar ve yeni vsync 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.