Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

AIDL untuk Komposer Perangkat Keras HAL

Mulai Android 13, HAL Komposer Perangkat Keras (HWC) 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 kelebihan yang ditawarkan AIDL, vendor didorong untuk mengimplementasikan AIDL composer HAL mulai Android 13 alih-alih versi HIDL. Lihat bagian Implementasi untuk informasi lebih lanjut.

Perbedaan antara AIDL dan HIDL HALs

Komposer AIDL baru HAL, 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 Fast Message Queue (FMQ) demi perintah parcelable.

    AIDL HAL mendefinisikan antarmuka perintah berdasarkan tipe parcelable yang diketik dengan kuat sebagai lawan dari perintah serial melalui FMQ di HIDL. Ini menyediakan 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 parcelable yang diketik dengan kuat yang didefinisikan di DisplayCommand.aidl . Respons perintah adalah parcelable yang diketik dengan kuat yang didefinisikan dalam CommandResultPayload.aidl .

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

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

  • Penambahan bidang baru untuk mengontrol konten HDR.

    Dalam AIDL HAL, tumpukan lapisan SDR/HDR campuran 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, berlawanan dengan ruang gamma.

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

    Bidang dimmingStage memungkinkan HWC mengonfigurasi kapan RenderEngine harus meredupkan konten. Ini mengakomodasi ColorModes yang ditentukan vendor, yang mungkin lebih memilih untuk meredup dalam ruang gamma, untuk memungkinkan peningkatan kontras yang ditentukan vendor dalam saluran warna mereka.

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

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

  • Penambahan bidang baru yang expectedPresentTime ke DisplayCommand.aidl .

    Bidang expectedPresentTime memungkinkan SurfaceFlinger mengatur waktu sekarang yang diharapkan ketika konten saat ini harus ditampilkan di layar. Dengan fitur ini, SurfaceFlinger mengirimkan perintah saat ini ke implementasi sebelumnya, memungkinkannya untuk 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 cache dalam konfigurasi tampilan boot, dan boot 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 pilihan mereka.

    • Menggunakan clearBootDisplayConfig , kerangka kerja memberi tahu vendor untuk menghapus konfigurasi tampilan boot, dan mem-boot dalam konfigurasi tampilan pilihan mereka selama reboot berikutnya.

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

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

  • Penambahan API baru untuk mengontrol tampilan waktu idle.

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

    • Menggunakan callback IComposerCallback.onVsyncIdle menunjukkan ke platform bahwa tampilan tidak aktif dan irama vsync telah berubah. Platform merespons panggilan balik ini dengan menyetel ulang model vsync -nya. Ini memaksa sinkronisasi ulang vsync pada bingkai berikutnya, dan mempelajari irama vsync yang baru.

Penerapan

Vendor tidak diharuskan mengimplementasikan AIDL HAL untuk Android 13. Namun, mereka dianjurkan untuk mengimplementasikan AIDL composer HAL daripada versi HIDL untuk menggunakan fungsionalitas dan API baru.

Implementasi referensi untuk AIDL HWC HAL diimplementasikan di emulator Android.

Pengujian

Untuk menguji implementasi Anda, jalankan VtsHalGraphicsComposer3_TargetTest .