AIDL untuk Hardware Composer HAL

Mulai Android 13, HAL Hardware Composer (HWC) ditentukan di 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 dan penerapan serta pengujian AIDL HAL.

Karena kelebihan yang ditawarkan oleh AIDL, vendor disarankan untuk menerapkan HAL komposer AIDL dimulai Android 13, bukan versi HIDL. Lihat Penerapan untuk informasi selengkapnya.

Perbedaan antara AIDL dan HIDL HAL

Komposer AIDL baru HAL, bernama android.hardware.graphics.composer3, ditentukan dalam IComposer.aidl. Serangan ini mengekspos API yang mirip dengan HIDL HAL android.hardware.graphics.composer@2.4 dengan perubahan berikut:

  • Penghapusan Fast Message Queue (FMQ) di lebih memilih perintah parcelable.

    AIDL HAL mendefinisikan antarmuka perintah berdasarkan {i>parcelable<i} dibandingkan dengan perintah serial melalui FMQ di HIDL. Ini menyediakan antarmuka yang stabil untuk perintah dan definisi yang lebih mudah dibaca tentang {i>payload<i} perintah diinterpretasikan.

    executeCommands ditentukan dalam IComposerClient.aidl sebagai

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

    di mana setiap perintah adalah tipe {i> parcelable <i}yang sangat diketik di DisplayCommand.aidl Respons perintah adalah parcelable berformat kuat yang ditentukan di CommandResultPayload.aidl

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

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

  • Penambahan kolom baru untuk mengontrol konten HDR.

    Di AIDL HAL, campuran tumpukan lapisan SDR/HDR mendukung peredupan Lapisan SDR saat lapisan HDR ada di layar secara bersamaan.

    Kolom brightness di LayerCommand memungkinkan SurfaceFlinger menentukan kecerahan per-lapisan, sehingga HWC meredupkan konten lapisan dalam ruang cahaya linear, berlawanan dengan ruang gamma.

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

    dimmingStage memungkinkan HWC mengonfigurasi kapan RenderEngine harus meredupkan konten. Ini mengakomodasi ColorModes yang ditentukan vendor, yang mungkin memilih untuk redup di gamma ruang iklan, untuk memungkinkan penyempurnaan kontras yang ditentukan vendor dalam pipeline warna mereka.

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

    Beberapa perangkat memiliki perangkat keras khusus untuk mengoptimalkan menggambar {i>alpha mask<i} yang menghaluskan sudut membulat dan potongan di layar. Perangkat dengan perangkat keras seperti itu harus menerapkan IComposerClient.getDisplayDecorationSupport untuk menampilkan struktur DisplayDecorationSupport seperti yang ditentukan dalam DisplayDecorationSupport.aidl. Struktur ini mendeskripsikan PixelFormat dan AlphaInterpretation enum yang diperlukan oleh perangkat. Setelah implementasi ini, UI Sistem menandai lapisan mask alfa sebagai DISPLAY_DECORATION, jenis komposisi baru yang memanfaatkan perangkat keras khusus.

  • Penambahan expectedPresentTime baru ke DisplayCommand.aidl.

    Kolom expectedPresentTime memungkinkan SurfaceFlinger menetapkan waktu saat ini hingga konten yang aktif harus ditampilkan di layar. Dengan ini SurfaceFlinger, SurfaceFlinger mengirimkan perintah {i>present<i} ke implementasi sebelum lebih banyak, sehingga dapat menyalurkan lebih banyak karya komposisi.

  • Penambahan API baru untuk mengontrol konfigurasi tampilan booting.

    Dengan menggunakan BOOT_DISPLAY_CONFIG, vendor dapat menentukan apakah konfigurasi tampilan {i>boot<i} didukung. Tujuan setBootDisplayConfig, clearBootDisplayConfig, dan getPreferredBootDisplayConfig menggunakan BOOT_DISPLAY_CONFIG sebagai berikut:

    • Dengan menggunakan setBootDisplayConfig, kerangka kerja menginformasikan vendor tentang konfigurasi tampilan waktu {i>boot<i}. Vendor harus melakukan cache di konfigurasi tampilan booting, dan melakukan booting di konfigurasi ini pada mulai ulang. Jika perangkat tidak dapat melakukan {i>booting<i} dalam konfigurasi ini, vendor harus menemukan yang sesuai dengan resolusi dan kecepatan refresh konfigurasi ini. Jika tidak ada, vendor harus menggunakan konfigurasi tampilan yang mereka inginkan.

    • Dengan menggunakan clearBootDisplayConfig, kerangka kerja memberi tahu vendor untuk menghapus konfigurasi tampilan {i>boot<i}, dan {i>booting<i} di konfigurasi tampilan yang mereka inginkan selama {i>reboot <i}berikutnya.

    • Dengan menggunakan getPreferredBootDisplayConfig, kerangka kerja melakukan kueri terhadap mode {i>boot<i} yang disukai vendor.

    Jika konfigurasi tampilan booting tidak didukung, metode ini akan menampilkan senilai UNSUPPORTED.

  • Penambahan API baru untuk mengontrol tampilan timer tidak ada aktivitas.

    • Dengan menggunakan DISPLAY_IDLE_TIMER, vendor dapat menentukan bahwa {i>timer<i} tidak aktif diterapkan oleh vendor untuk tampilan ini. Saat tidak ada aktivitas, kemampuan ini mengubah kecepatan refresh menjadi lebih rendah untuk menghemat daya. Platform ini menggunakan setIdleTimerEnabled untuk mengontrol waktu tunggu timer, dan dalam beberapa kasus, menonaktifkannya untuk untuk mencegah pengalihan kecepatan refresh yang tidak diinginkan saat tidak ada aktivitas.

    • Menggunakan IComposerCallback.onVsyncIdle callback menunjukkan ke platform bahwa tampilan tidak ada aktivitas dan vsync irama telah berubah. Platform akan merespons callback ini dengan mereset ulang Model vsync. Fungsi ini memaksa sinkronisasi ulang vsync pada frame berikutnya, dan mempelajari Ritme vsync.

Implementasi

Vendor tidak diwajibkan untuk menerapkan AIDL HAL untuk Android 13. Namun, mereka disarankan untuk menerapkan AIDL komposer HAL alih-alih versi HIDL untuk menggunakan API dan fungsionalitas baru.

Penerapan referensi untuk AIDL HWC HAL diimplementasikan di emulator Android.

Pengujian

Untuk menguji penerapan Anda, jalankan VtsHalGraphicsComposer3_TargetTest.