AIDL untuk Hardware Composer HAL

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

Karena kelebihan yang ditawarkan oleh AIDL, vendor dianjurkan untuk mengimplementasikan HAL komposer AIDL mulai Android 13, bukan versi HIDL. Lihat bagian Penerapan untuk informasi selengkapnya.

Perbedaan antara AIDL dan HIDL HAL

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

  • Penghapusan Fast Message Queue (FMQ) dan diganti dengan perintah parcelable.

    AIDL HAL menentukan antarmuka perintah berdasarkan jenis parcelable yang diketik dengan ketat, bukan perintah serial melalui FMQ di HIDL. Hal ini menyediakan antarmuka yang stabil untuk perintah dan definisi yang lebih mudah dibaca tentang cara payload perintah ditafsirkan.

    Metode executeCommands ditentukan dalam IComposerClient.aidl sebagai

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

    dengan setiap perintah adalah jenis parcelable dengan jenis parcelable yang ditentukan dalam DisplayCommand.aidl. Respons perintah adalah parcelable dengan jenis yang ketat 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 dalam ASurfaceTransaction_setColor.

  • Penambahan kolom baru untuk mengontrol konten HDR.

    Di AIDL HAL, campuran stack lapisan SDR/HDR mendukung peredupan lapisan SDR yang lancar 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, bukan ruang gamma.

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

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

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

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

  • Penambahan kolom expectedPresentTime baru ke DisplayCommand.aidl.

    Kolom expectedPresentTime memungkinkan SurfaceFlinger menetapkan waktu saat ini yang diharapkan ke saat konten saat ini harus ditampilkan di layar. Dengan fitur ini, SurfaceFlinger mengirimkan perintah present ke implementasi terlebih dahulu, sehingga dapat melakukan pipeline lebih banyak pekerjaan komposisi.

  • Penambahan API baru untuk mengontrol konfigurasi tampilan booting.

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

    • Dengan setBootDisplayConfig, framework memberi tahu vendor tentang konfigurasi tampilan waktu booting. Vendor harus menyimpan cache dalam konfigurasi tampilan booting, dan melakukan booting dalam konfigurasi ini saat memulai ulang berikutnya. Jika perangkat tidak dapat melakukan booting dalam konfigurasi ini, vendor harus menemukan konfigurasi yang cocok dengan resolusi dan kecepatan refresh konfigurasi ini. Jika konfigurasi tersebut tidak ada, vendor harus menggunakan konfigurasi tampilan pilihan mereka.

    • Dengan menggunakan clearBootDisplayConfig, framework akan memberi tahu vendor untuk menghapus konfigurasi tampilan booting, dan mem-booting dalam konfigurasi tampilan pilihan mereka selama mulai ulang berikutnya.

    • Dengan menggunakan getPreferredBootDisplayConfig, framework membuat kueri mode booting pilihan vendor.

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

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

    • Dengan menggunakan DISPLAY_IDLE_TIMER, vendor dapat menentukan bahwa timer tidak aktif diimplementasikan oleh vendor untuk tampilan ini. Saat tidak ada aktivitas, kemampuan ini mengubah kecepatan refresh ke setelan yang lebih rendah untuk menghemat daya. Platform ini menggunakan setIdleTimerEnabled untuk mengontrol waktu tunggu timer, dan dalam beberapa kasus, untuk menonaktifkannya agar mencegah peralihan kecepatan refresh yang tidak diinginkan saat tidak ada aktivitas.

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

Implementasi

Vendor tidak diwajibkan untuk menerapkan AIDL HAL untuk Android 13. Namun, mereka dianjurkan untuk menerapkan HAL composer AIDL, bukan versi HIDL, untuk menggunakan fungsi dan API baru.

Implementasi referensi untuk AIDL HWC HAL diimplementasikan di emulator Android.

Pengujian

Untuk menguji penerapan Anda, jalankan VtsHalGraphicsComposer3_TargetTest.