Donanım Oluşturucu HAL'si için AIDL

Android 13'ten itibaren Donanım Oluşturucu (HWC) HAL, AIDL'de tanımlanmıştı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ılmıştı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 composer HAL, IComposer.aidl içinde tanımlanır. Aşağıdaki değişikliklerle birlikte HIDL HAL android.hardware.graphics.composer@2.4'ye benzer bir API sunar:

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

    AIDL HAL, komut arayüzünü, HIDL'de FMQ üzerinden serileştirilmiş komutların aksine, güçlü biçimde yazılan ayrıştırılabilir 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ü bir şekilde yazılmış ayrıştırılabilirlerdir.

  • Bu yöntem için etkin istemci olmadığından IComposerClient.getClientTargetSupport kaldırıldı.

  • ASurfaceTransaction_setColor'te tanımlandığı gibi, Android'deki üst grafik yığınıyla daha iyi uyum sağlamak için renklerin bayt yerine kayan noktalı olarak temsil edilmesi.

  • 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 belirtmesini sağlar. Böylece HWC, gama alanında değil, doğrusal ışık alanında katmanın içeriğini kararı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ı, RenderEngine ürününün içeriği karartacağı zamanı HWC'nin yapılandırmasına olanak tanır. Bu özellik, tedarikçi firma tarafından tanımlanan ve gama alanında loş yapmayı tercih edebilecek ColorModes özelliğine uyum sağlar. Böylece, tedarikçi firma tarafından belirlenen renk ardışık düzenlerinde kontrast geliştirmeleri yapılabilir.

  • Ekran süslemeleri için Composition.aidl içine DISPLAY_DECORATION adlı yeni kompozisyon türü eklendi.

    Bazı cihazlarda, ekranlardaki yuvarlatılmış köşeleri ve kesikleri düzelten alfa maskesinin çizimini optimize edecek özel bir donanım bulunur. Bu tür donanımlara sahip cihazların, yeni DisplayDecorationSupport.aidl bölümünde tanımlandığı gibi DisplayDecorationSupport yapısı döndürmesi için IComposerClient.getDisplayDecorationSupport uygulaması gerekir. 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 bölümüne yeni expectedPresentTime alanının eklenmesi.

    expectedPresentTime alanı, SurfaceFlinger'ın beklenen mevcut zamanı mevcut 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, başlatma ekranı yapılandırmasında önbelleğe almalı ve bir sonraki yeniden başlatmada bu yapılandırmada başlatılmalıdır. Cihaz bu yapılandırmada başlatılamıyorsa satıcının bu yapılandırmanın çözünürlüğüne ve yenileme hızına uygun bir yapılandırma bulması gerekir. 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 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.

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

    Başlatma 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 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 kullanılmadığında 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 tarafından yeniden senkronizasyon yapılmasını zorunlu kılar ve yeni vsync kadansını öğ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.