Donanım Bestecisi HAL için AIDL

Android 13'ten başlayarak Donanım Oluşturucu (HWC) HAL, AIDL'de tanımlanmıştır ve android.hardware.graphics.composer@2.1 ila 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, satıcıların HIDL sürümü yerine Android 13'ten başlayarak AIDL oluşturucu HAL'i uygulamaları teşvik ediliyor. Daha fazla bilgi için Uygulama bölümüne bakın.

AIDL ve HIDL HAL'ler arasındaki farklar

android.hardware.graphics.composer3 adlı yeni AIDL oluşturucusu HAL, IComposer.aidl tanımlanmıştır. Aşağıdaki değişikliklerle HIDL HAL android.hardware.graphics.composer@2.4 benzer bir API ortaya çıkarır:

  • Hızlı Mesaj Kuyruğunun (FMQ) parsellenebilir komutlar lehine kaldırılması.

    AIDL HAL, HIDL'de FMQ üzerinden serileştirilmiş komutların aksine, güçlü bir şekilde yazılan parsellenebilir türlere 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 şu şekilde tanımlanmıştır:

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

    burada her komut, DisplayCommand.aidl tanımlanmış, türü kesin olarak belirlenmiş bir parsellenebilir türdür. Komut yanıtları, CommandResultPayload.aidl tanımlanan kesin olarak yazılan ayrıştırılabilir öğelerdir.

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

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

  • HDR içeriğini kontrol etmek için yeni alanların eklenmesi.

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

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

    ClientTargetPropertyWithBrightness brightness alanı, HWC'nin istemci bileşimi için parlaklık alanını belirlemesine ve RenderEngine istemci bileşimindeki SDR katmanlarını karartıp karartmayacağına dair talimat vermesine olanak tanır.

    dimmingStage alanı, HWC'nin RenderEngine içeriği ne zaman karartması gerektiğini yapılandırmasını sağlar. Bu, renk ardışık düzenlerinde satıcı tarafından tanımlanan kontrast geliştirmelerine izin vermek için gama alanında karartmayı tercih edebilecek satıcı tanımlı ColorModes barındırır.

  • Ekran dekorasyonları için Composition.aidl 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ın, yeni DisplayDecorationSupport.aidl tanımlandığı gibi bir DisplayDecorationSupport yapısı döndürmek için IComposerClient.getDisplayDecorationSupport uygulamasını uygulaması gerekir. Bu yapı, cihazın gerektirdiği PixelFormat ve AlphaInterpretation numaralandırmalarını açıklar. Bu uygulamanın ardından, Sistem Kullanıcı Arayüzü alfa maskesi katmanını, özel donanımdan yararlanan yeni bir kompozisyon türü olan DISPLAY_DECORATION olarak işaretler.

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

    expectedPresentTime alanı, SurfaceFlinger'ın beklenen şimdiki zamanı geçerli içeriğin ekranda görüntülenmesi gereken zamana ayarlamasına olanak tanır. Bu özellik sayesinde SurfaceFlinger, uygulamaya önceden bir mevcut komut göndererek kompozisyon çalışmasının daha fazlasını gerçekleştirmesine olanak tanır.

  • Önyükleme ekranı yapılandırmasını denetlemek için yeni API'lerin eklenmesi.

    Satıcılar, BOOT_DISPLAY_CONFIG kullanarak önyükleme ekranı yapılandırmasının desteklendiğini belirtebilir. setBootDisplayConfig , clearBootDisplayConfig ve getPreferredBootDisplayConfig yöntemleri BOOT_DISPLAY_CONFIG aşağıdaki şekilde kullanır:

    • setBootDisplayConfig kullanarak çerçeve, satıcılara önyükleme zamanı görüntüleme yapılandırması hakkında bilgi verir. Satı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 önyükleme yapamıyorsa satıcının bu yapılandırmanın çözünürlüğü ve yenileme hızıyla eşleşen bir yapılandırma bulması gerekir. Böyle bir yapılandırma mevcut değilse satıcının tercih ettiği ekran yapılandırmasını kullanması gerekir.

    • clearBootDisplayConfig komutunu kullanarak çerçeve, satıcılara ö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 bilgi verir.

    • getPreferredBootDisplayConfig kullanarak ç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'lerin eklenmesi.

    • Satıcılar, DISPLAY_IDLE_TIMER kullanarak bu ekran için satıcı tarafından bir eylemsizlik zamanlayıcısının uygulandığını belirtebilir. Boştayken bu özellik, gücü korumak için yenileme hızını daha düşük bir ayara getirir. Platform, zamanlayıcının zaman aşımını kontrol etmek ve bazı durumlarda boştayken istenmeyen yenileme hızı geçişlerini önlemek amacıyla onu devre dışı bırakmak için setIdleTimerEnabled kullanır.

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

Uygulama

Satıcıların Android 13 için AIDL HAL'i uygulaması zorunlu değildir. Ancak, yeni işlevleri ve API'leri kullanmak için HIDL sürümü yerine AIDL oluşturucu HAL'yi uygulamaları teşvik edilmektedir.

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

Test yapmak

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