Donanım Oluşturucu HAL için AIDL

Android 13'ten itibaren Hardware Composer (HWC) HAL, AIDL'de tanımlanır ve android.hardware.graphics.composer@2.1 ile android.hardware.graphics.composer@2.4 arasındaki HIDL sürümleri kullanımdan kaldırılır.

Bu sayfada, HWC için AIDL ve HIDL HAL arasındaki farklar ile AIDL HAL'nin uygulanması ve test edilmesi açıklanmaktadır.

AIDL'nin sunduğu avantajlar nedeniyle, tedarikçilerin Android 13'ten itibaren HIDL sürümü yerine AIDL composer HAL'i uygulamaları önerilir. 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. Aşağıdaki değişikliklerle HIDL HAL'ye android.hardware.graphics.composer@2.4 benzer bir API sunar:

  • Parcelable komutları lehine Hızlı Mesaj Kuyruğu (FMQ) kaldırıldı.

    AIDL HAL, HIDL'deki FMQ üzerinden seri hale getirilmiş komutların aksine, kesin olarak türü belirlenmiş parcelable türlerine 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öntemi, IComposerClient.aidl içinde şu şekilde tanımlanır:

    CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
    

    Burada 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 olarak yazılmış parcelable'lardır.

  • Bu yöntem için etkin müşteri olmadığından IComposerClient.getClientTargetSupport kaldırıldı.

  • ASurfaceTransaction_setColor içinde tanımlandığı gibi Android'deki üst grafik yığınıyla daha iyi uyum sağlamak 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ı, bir HDR katmanı aynı anda ekrandayken 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. Böylece HWC, katmanın içeriğini gama alanı yerine doğrusal ışık alanında karartır.

    ClientTargetPropertyWithBrightness içindeki brightness alanı, HWC'nin istemci kompozisyonu için parlaklık alanını belirtmesine ve RenderEngine'a istemci kompozisyonundaki SDR katmanlarını karartma talimatı vermesine olanak tanır.

    dimmingStage alanı, HWC'nin RenderEngine içeriğinin ne zaman karartılacağını yapılandırmasına olanak tanır. Bu, satıcı tarafından tanımlanan ColorModes değerini destekler. Satıcı tarafından tanımlanan kontrast geliştirmelerine renk işlem hatlarında izin vermek için gama uzayında karartmayı tercih edebilir.

  • Ekran süslemeleri için Composition.aidl'e yeni bir kompozisyon türü DISPLAY_DECORATION eklendi.

    Bazı cihazlarda, yuvarlak köşeleri ve ekranlardaki kesikleri yumuşatan alfa maskesinin çizimini optimize etmek için özel donanım bulunur. Bu tür donanımlara sahip cihazlar, yeni DisplayDecorationSupport.aidl'da tanımlandığı gibi bir DisplayDecorationSupport yapısı döndürmek için IComposerClient.getDisplayDecorationSupport'ı uygulamalıdır. Bu yapıda, cihazın gerektirdiği PixelFormat ve AlphaInterpretation numaralandırmaları açıklanmaktadır. Bu uygulama üzerine, Sistem Kullanıcı Arayüzü, alfa maskesi katmanını DISPLAY_DECORATION olarak işaretler. Bu, özel donanımdan yararlanan yeni bir kompozisyon türüdür.

  • DisplayCommand.aidl'e yeni bir expectedPresentTime alanı eklendi.

    expectedPresentTime alanı, SurfaceFlinger'ın beklenen sunum zamanını, mevcut içeriğin ekranda gösterilmesi gereken zamana ayarlamasına olanak tanır. Bu özellik sayesinde SurfaceFlinger, uygulamaya önceden bir sunma komutu göndererek daha fazla birleştirme çalışmasının sıralı işlenmesine olanak tanır.

  • Başlatma ekranı yapılandırmasını kontrol etmek için yeni API'ler eklendi.

    BOOT_DISPLAY_CONFIG kullanarak tedarikçiler, başlatma ekranı yapılandırmasının desteklendiğini belirtebilir. setBootDisplayConfig, clearBootDisplayConfig ve getPreferredBootDisplayConfig yöntemleri BOOT_DISPLAY_CONFIG değerini aşağıdaki gibi kullanır:

    • setBootDisplayConfig kullanılarak, çerçeve, satıcıları başlatma zamanı ekran yapılandırması hakkında bilgilendirir. Sağlayıcılar, önyükleme ekranı yapılandırmasında ö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ı başlatma ekranı yapılandırmasını temizlemeleri ve bir sonraki yeniden başlatma sırasında tercih ettikleri ekran yapılandırmasında başlatmaları konusunda bilgilendirir.

    • getPreferredBootDisplayConfig kullanıldığında çerçeve, satıcının tercih ettiği başlatma 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.

    • Satıcılar, DISPLAY_IDLE_TIMER kullanarak bu gösterim için satıcı tarafından bir etkinlik dışı kalma zamanlayıcısı uygulandığını belirtebilir. Bu özellik, kullanılmadığı zamanlarda güç tasarrufu 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 kalma sırasında istenmeyen yenileme hızı geçişlerini önlemek için devre dışı bırakmak üzere setIdleTimerEnabled kullanır.

    • IComposerCallback.onVsyncIdle geri çağırması kullanıldığında platforma, ekranın boşta olduğu ve vsync sıklığının değiştiği belirtilir. 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 yeni işlev ve API'leri kullanmak için HIDL sürümü yerine AIDL composer HAL'ı uygulamaları önerilir.

Android emülatörlerinde AIDL HWC HAL için bir referans uygulama uygulanır.

Test

Uygulamanızı test etmek için VtsHalGraphicsComposer3_TargetTest komutunu çalıştırın.