AIDL untuk Komposer Perangkat Keras HAL

Mulai Android 13, Hardware Composer (HWC) HAL didefinisikan dalam AIDL dan versi HIDL mulai dari android.hardware.graphics.composer@2.1 hingga android.hardware.graphics.composer@2.4 tidak digunakan lagi.

Halaman ini menjelaskan perbedaan antara AIDL dan HIDL HAL untuk HWC serta implementasi dan pengujian AIDL HAL.

Karena keunggulan yang ditawarkan AIDL, vendor didorong untuk mengimplementasikan AIDL composer HAL mulai Android 13, bukan versi HIDL. Lihat bagian Implementasi untuk informasi lebih lanjut.

Perbedaan antara AIDL dan HIDL HAL

HAL komposer AIDL baru, bernama android.hardware.graphics.composer3 , didefinisikan dalam IComposer.aidl . Ini memperlihatkan API yang mirip dengan HIDL HAL android.hardware.graphics.composer@2.4 dengan perubahan berikut:

  • Penghapusan Antrian Pesan Cepat (FMQ) demi perintah yang dapat dibagi.

    AIDL HAL mendefinisikan antarmuka perintah berdasarkan tipe paket yang diketik dengan kuat sebagai lawan dari perintah serial melalui FMQ di HIDL. Ini memberikan antarmuka yang stabil untuk perintah dan definisi yang lebih mudah dibaca tentang bagaimana muatan perintah diinterpretasikan.

    Metode executeCommands didefinisikan di IComposerClient.aidl sebagai

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

    di mana setiap perintah adalah tipe parsel yang diketik dengan kuat yang ditentukan dalam DisplayCommand.aidl . Respons perintah adalah paket yang diketik dengan kuat yang ditentukan dalam CommandResultPayload.aidl .

  • Penghapusan IComposerClient.getClientTargetSupport karena tidak ada klien aktif untuk metode ini.

  • Representasi warna sebagai float, bukan byte, agar lebih selaras dengan tumpukan grafis atas di Android seperti yang didefinisikan dalam ASurfaceTransaction_setColor .

  • Penambahan bidang baru untuk mengontrol konten HDR.

    Di AIDL HAL, tumpukan lapisan campuran SDR/HDR mendukung peredupan lapisan SDR yang mulus saat lapisan HDR ditampilkan secara bersamaan di layar.

    Bidang brightness di LayerCommand memungkinkan SurfaceFlinger menentukan kecerahan per lapisan, sehingga HWC meredupkan konten lapisan dalam ruang cahaya linier, bukan dalam ruang gamma.

    Bidang brightness di ClientTargetPropertyWithBrightness memungkinkan HWC menentukan ruang kecerahan untuk komposisi klien dan menginstruksikan RenderEngine apakah akan meredupkan lapisan SDR dalam komposisi klien.

    Bidang dimmingStage memungkinkan HWC mengonfigurasi kapan RenderEngine harus meredupkan konten. Hal ini mengakomodasi ColorModes yang ditentukan vendor, yang mungkin lebih memilih untuk meredupkan ruang gamma, untuk memungkinkan peningkatan kontras yang ditentukan vendor dalam saluran warnanya.

  • Penambahan tipe komposisi baru DISPLAY_DECORATION di Composition.aidl untuk dekorasi layar.

    Beberapa perangkat memiliki perangkat keras khusus untuk mengoptimalkan gambar topeng alfa yang memperhalus sudut membulat dan potongan pada layar. Perangkat dengan perangkat keras tersebut harus mengimplementasikan IComposerClient.getDisplayDecorationSupport untuk mengembalikan struktur DisplayDecorationSupport seperti yang ditentukan dalam DisplayDecorationSupport.aidl yang baru. Struktur ini menjelaskan enum PixelFormat dan AlphaInterpretation yang diperlukan oleh perangkat. Setelah implementasi ini, UI Sistem menandai lapisan masker alfa sebagai DISPLAY_DECORATION , jenis komposisi baru yang memanfaatkan perangkat keras khusus.

  • Penambahan bidang expectedPresentTime baru ke DisplayCommand.aidl .

    Bidang expectedPresentTime memungkinkan SurfaceFlinger mengatur waktu sekarang yang diharapkan kapan konten saat ini harus ditampilkan di layar. Dengan fitur ini, SurfaceFlinger mengirimkan perintah ini ke implementasi sebelumnya, sehingga memungkinkannya menyalurkan lebih banyak pekerjaan komposisi.

  • Penambahan API baru untuk mengontrol konfigurasi tampilan boot.

    Menggunakan BOOT_DISPLAY_CONFIG , vendor dapat menentukan bahwa konfigurasi tampilan boot didukung. Metode setBootDisplayConfig , clearBootDisplayConfig , dan getPreferredBootDisplayConfig menggunakan BOOT_DISPLAY_CONFIG sebagai berikut:

    • Menggunakan setBootDisplayConfig , kerangka kerja memberi tahu vendor tentang konfigurasi tampilan waktu boot. Vendor harus melakukan cache dalam konfigurasi tampilan boot, dan melakukan booting dalam konfigurasi ini pada reboot berikutnya. Jika perangkat tidak dapat melakukan booting dalam konfigurasi ini, vendor harus menemukan konfigurasi yang cocok dengan resolusi dan kecepatan refresh konfigurasi ini. Jika tidak ada konfigurasi seperti itu, vendor harus menggunakan konfigurasi tampilan pilihannya.

    • Dengan menggunakan clearBootDisplayConfig , kerangka kerja memberi tahu vendor untuk menghapus konfigurasi tampilan boot, dan melakukan booting dalam konfigurasi tampilan pilihan mereka selama reboot berikutnya.

    • Menggunakan getPreferredBootDisplayConfig , kerangka kerja menanyakan mode boot pilihan vendor.

    Jika konfigurasi tampilan boot tidak didukung, metode ini akan mengembalikan nilai UNSUPPORTED .

  • Penambahan API baru untuk mengontrol tampilan waktu idle.

    • Dengan menggunakan DISPLAY_IDLE_TIMER , vendor dapat menentukan bahwa pengatur waktu tidak aktif diterapkan oleh vendor untuk tampilan ini. Saat idle, kemampuan ini mengubah kecepatan refresh ke pengaturan yang lebih rendah untuk menghemat daya. Platform ini menggunakan setIdleTimerEnabled untuk mengontrol batas waktu timer, dan dalam beberapa kasus, menonaktifkannya guna mencegah peralihan kecepatan refresh yang tidak diinginkan saat idle.

    • Menggunakan panggilan balik IComposerCallback.onVsyncIdle menunjukkan ke platform bahwa tampilan dalam keadaan diam dan irama vsync telah berubah. Platform merespons panggilan balik ini dengan menyetel ulang model vsync -nya. Ini memaksa sinkronisasi ulang vsync pada frame berikutnya, dan mempelajari irama vsync baru.

Penerapan

Vendor tidak diharuskan mengimplementasikan AIDL HAL untuk Android 13. Namun, mereka dianjurkan untuk mengimplementasikan AIDL composer HAL, bukan versi HIDL, agar dapat menggunakan fungsi dan API baru.

Implementasi referensi untuk AIDL HWC HAL diimplementasikan di emulator Android.

Pengujian

Untuk menguji penerapan Anda, jalankan VtsHalGraphicsComposer3_TargetTest .