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
executeCommands5 ditentukan dalamIComposerClient.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 dalamCommandResultPayload.aidl.Penghapusan
IComposerClient.getClientTargetSupportkarena 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
brightnessdiLayerCommandmemungkinkan SurfaceFlinger menentukan kecerahan per lapisan. Hal ini memungkinkan HWC meredupkan konten lapisan dalam ruang cahaya linear, bukan ruang gamma.Kolom
brightnessdiClientTargetPropertyWithBrightnessmemungkinkan HWC menentukan ruang kecerahan untuk komposisi klien dan menginstruksikanRenderEngineapakah akan meredupkan lapisan SDR dalam komposisi klien.Kolom
dimmingStagememungkinkan HWC mengonfigurasi kapanRenderEnginemeredupkan konten. Hal ini mengakomodasiColorModesyang 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, diComposition.aidluntuk 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 strukturDisplayDecorationSupportseperti yang ditentukan dalamDisplayDecorationSupport.aidl. Struktur ini menjelaskanPixelFormatdanAlphaInterpretationenum yang diperlukan oleh perangkat. Setelah implementasi ini, UI Sistem menandai lapisan mask alpha sebagaiDISPLAY_DECORATION, jenis komposisi yang memanfaatkan hardware khusus.Penambahan kolom
expectedPresentTimekeDisplayCommand.aidl.Kolom
expectedPresentTimememungkinkan 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. MetodesetBootDisplayConfig,clearBootDisplayConfig, dangetPreferredBootDisplayConfigmenggunakanBOOT_DISPLAY_CONFIGsebagai 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 menggunakansetIdleTimerEnableduntuk 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.onVsyncIdlemenunjukkan kepada platform bahwa layar tidak ada aktivitas dan iramavsynctelah berubah. Platform merespons callback ini dengan mereset modelvsync. Platform ini memaksa sinkronisasi ulangvsyncpada frame berikutnya, dan mempelajari iramavsyncbaru.
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.