AIDL untuk HAL Hardware Composer

Mulai Android 13, Hardware Composer (HWC) HAL ditentukan dalam AIDL. Versi HIDL yang berkisar dari android.hardware.graphics.composer@2.1 hingga android.hardware.graphics.composer@2.4 tidak digunakan lagi.

Halaman ini menjelaskan perbedaan antara HAL AIDL dan HIDL untuk HWC, serta cara mengimplementasikan dan menguji HAL AIDL.

Karena AIDL menawarkan keunggulan, vendor dapat mengimplementasikan HAL composer AIDL mulai Android 13, bukan versi HIDL. Untuk mengetahui informasi selengkapnya, lihat bagian Implementasi.

Perbedaan antara HAL AIDL dan HIDL

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

  • Penghapusan Fast Message Queue (FMQ) untuk mendukung perintah parcelable.

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

    Metode executeCommands 5 ditentukan dalam IComposerClient.aidl:

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

    Setiap perintah adalah jenis parcelable yang sangat diketik yang ditentukan dalam DisplayCommand.aidl. Respons perintah adalah parcelable yang sangat diketik yang ditentukan dalam CommandResultPayload.aidl.

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

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

  • Penambahan kolom baru untuk mengontrol konten HDR.

    Di HAL AIDL, stack lapisan SDR/HDR campuran mendukung peredupan lapisan SDR yang lancar saat lapisan HDR berada di layar pada saat yang sama.

    Kolom brightness di LayerCommand memungkinkan SurfaceFlinger menentukan kecerahan per lapisan. Hal ini memungkinkan HWC meredupkan konten lapisan dalam ruang cahaya linear, bukan ruang gamma.

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

    Kolom dimmingStage memungkinkan HWC mengonfigurasi kapan RenderEngine meredupkan konten. Hal ini mengakomodasi ColorModes yang ditentukan vendor yang mungkin lebih suka meredupkan dalam ruang gamma untuk mengaktifkan peningkatan kontras yang ditentukan vendor dalam pipeline warna mereka.

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

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

  • Penambahan kolom expectedPresentTime ke DisplayCommand.aidl.

    Kolom expectedPresentTime memungkinkan SurfaceFlinger menetapkan waktu tampilan yang diharapkan untuk kapan konten saat ini harus ditampilkan di layar. Dengan fitur ini, SurfaceFlinger mengirimkan perintah tampilan ke implementasi lebih awal, yang memungkinkannya untuk memproses lebih banyak pekerjaan komposisi.

  • Penambahan API baru untuk mengontrol konfigurasi tampilan booting.

    Dengan 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 dalam cache konfigurasi tampilan booting, dan melakukan booting dalam konfigurasi ini saat booting 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 tidak ada konfigurasi seperti itu, vendor harus menggunakan konfigurasi tampilan pilihan mereka.

    • Dengan clearBootDisplayConfig, framework memberi tahu vendor untuk menghapus konfigurasi tampilan booting, dan melakukan booting dalam konfigurasi tampilan pilihan mereka selama booting ulang berikutnya.

    • Dengan getPreferredBootDisplayConfig, framework mengkueri mode booting pilihan vendor.

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

  • Penambahan API baru untuk mengontrol timer tidak ada aktivitas layar:

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

    • Menggunakan callback IComposerCallback.onVsyncIdle menunjukkan kepada platform bahwa layar tidak ada aktivitas dan irama vsync telah berubah. Platform merespons callback ini dengan mereset model vsync. Platform ini memaksa sinkronisasi ulang vsync pada frame berikutnya, dan mempelajari irama vsync baru.

Implementasi

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

Emulator Android menyertakan implementasi referensi untuk HAL HWC AIDL.

Pengujian

Untuk menguji implementasi Anda, jalankan VtsHalGraphicsComposer3_TargetTest.