Donanım Oluşturucu HAL için AIDL

Android 13'ten itibaren Donanım Oluşturucu (HWC) HAL'i AIDL'de tanımlanır ve android.hardware.graphics.composer@2.1 ile android.hardware.graphics.composer@2.4 arasındaki HIDL sürümlerinin desteği sonlandırılır.

Bu sayfada, HWC için AIDL ile HIDL HAL arasındaki farklar ve AIDL HAL'in 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 besteci HAL'ini uygulamaya teşvik edilir. 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 derleyici HAL'i IComposer.aidl içinde tanımlanır. Aşağıdaki değişikliklerle HIDL HALandroid.hardware.graphics.composer@2.4'e benzer bir API sağlar:

  • Paketlenebilir komutlar için Hızlı Mesaj Kuyruğu (FMQ) kaldırıldı.

    AIDL HAL, komut arayüzünü HIDL'deki FMQ üzerinden serileştirilmiş komutların aksine, güçlü şekilde yazılmış ve bölünebilir türlere göre tanımlar. Bu sayede, komutlar için kararlı bir arayüz ve komut yükü'nün nasıl yorumlandığına dair daha okunaklı bir tanım sağlanır.

    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 güçlü şekilde yazılmış bir paketlenebilir türdür. Komut yanıtları, CommandResultPayload.aidl içinde tanımlanan güçlü şekilde yazılmış paketlenebilir öğelerdir.

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

  • Android'deki üst grafik yığınıyla daha uyumlu olması için renklerin bayt yerine kayan nokta olarak gösterilmesi (ASurfaceTransaction_setColor'te tanımlandığı şekilde).

  • HDR içeriğini kontrol etmek için yeni alanlar eklendi.

    AIDL HAL'de, karma SDR/HDR katman yığınları, ekranda aynı anda bir HDR katmanı olduğunda SDR katmanlarının sorunsuz şekilde karartılmasını destekler.

    LayerCommand içindeki brightness alanı, SurfaceFlinger'ın katman başına bir parlaklık belirtmesine olanak tanır. Böylece HWC, katmanın içeriğini gama alanının aksine doğrusal ışık alanında karartır.

    ClientTargetPropertyWithBrightness içindeki brightness alanı, HWC'nin istemci kompozisyonu için parlaklık alanını belirtmesine ve istemci kompozisyonundaki SDR katmanlarının karartılı olup olmayacağını RenderEngine yönetmesine olanak tanır.

    dimmingStage alanı, HWC'nin RenderEngine'ın içeriği ne zaman karartması gerektiğini yapılandırmasına olanak tanır. Bu, renk ardışık düzenlerinde tedarikçi firma tanımlı kontrast geliştirmelerine izin vermek için tedarikçi firma tanımlı ColorModes'yi (gama alanında karartmayı tercih edebilir) destekler.

  • Ekran süslemeleri için Composition.aidl bölümünde yeni bir kompozisyon türü DISPLAY_DECORATION eklendi.

    Bazı cihazlarda, ekranlardaki yuvarlatılmış köşeleri ve kesikleri yumuşatan alfa maskesinin çizimini optimize etmek için özel donanım bulunur. Bu tür donanıma sahip cihazlar, yeni DisplayDecorationSupport.aidl sürümünde tanımlandığı şekilde DisplayDecorationSupport yapısı döndürmek için IComposerClient.getDisplayDecorationSupport uygulamalıdır. Bu yapı, cihazın ihtiyaç duyduğu PixelFormat ve AlphaInterpretation enum'larını açıklar. Bu uygulamadan sonra Sistem UI, alfa maske katmanını özel donanımdan yararlanan yeni bir kompozisyon türü olan DISPLAY_DECORATION olarak işaretler.

  • DisplayCommand.aidl alanına yeni bir expectedPresentTime alanı eklendi.

    expectedPresentTime alanı, SurfaceFlinger'ın beklenen mevcut zamanı geçerli içeriğin ekranda gösterilmesi gereken zamana ayarlamasına olanak tanır. SurfaceFlinger bu özellik sayesinde, uygulamaya önceden bir mevcut komut göndererek kompozisyon çalışmasının daha fazlasını ardışık düzene almasını sağlar.

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

    Tedarikçiler, BOOT_DISPLAY_CONFIG kullanarak önyükleme 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:

    • Çerçeve, setBootDisplayConfig'i kullanarak tedarikçi firmaları önyükleme süresi ekran yapılandırması hakkında bilgilendirir. Tedarikçi firmalar, önyükleme ekranı yapılandırmasında önbelleğe almalıdır ve sonraki yeniden başlatmada bu yapılandırmada önyükleme yapmalıdır. Cihaz bu yapılandırmada önyükleme yapamıyorsa tedarikçi firma, bu yapılandırmadaki çözünürlük ve yenileme hızıyla eşleşen bir yapılandırma bulmalıdır. Böyle bir yapılandırma yoksa tedarikçi, tercih ettiği görüntüleme yapılandırmasını kullanmalıdır.

    • Çerçeve, clearBootDisplayConfig kullanarak tedarikçileri ö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.

    • Çerçeve, getPreferredBootDisplayConfig kullanarak tedarikçinin tercih ettiği önyükleme modunu sorgulayarak

    Açılış ekranı yapılandırması desteklenmediğinde bu yöntemler UNSUPPORTED değerini döndürür.

  • Ekrandaki boş zamanlayıcıyı kontrol etmek için yeni API'ler eklendi.

    • Satıcılar, DISPLAY_IDLE_TIMER değerini kullanarak bu ekran için satıcı tarafından bir etkin olmama zamanlayıcısının uygulandığını belirtebilir. Bu özellik, cihaz boştayken güç tasarrufu yapmak için yenileme hızını daha düşük bir ayara değiştirir. Platform, zamanlayıcının zaman aşım süresini kontrol etmek ve bazı durumlarda, boştayken istenmeyen yenileme hızı geçişlerini önlemek için devre dışı bırakmak amacıyla setIdleTimerEnabled kullanır.

    • IComposerCallback.onVsyncIdle geri çağırma işlevinin kullanılması, platforma ekranın boşta olduğunu ve vsync ritiminin değiştiğini gösterir. Platform, bu geri aramaya vsync modelini sıfırlayarak yanıt verir. Sonraki karede vsync senkronizasyonunu zorlar ve yeni vsync ritmi öğrenir.

Uygulama

Tedarikçi firmaların Android 13 için AIDL HAL'i uygulaması gerekmez. Ancak geliştiricilerin, yeni işlevleri ve API'leri kullanmak için HIDL sürümü yerine AIDL derleyici HAL'ini uygulamalarını öneririz.

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.