Mulai Android 13, Hardware Composer (HWC) HAL 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 keunggulan yang ditawarkan AIDL, vendor didorong untuk mengimplementasikan AIDL composer HAL mulai Android 13, bukan versi HIDL. Lihat bagian Implementasi untuk informasi lebih lanjut.
Perbedaan antara AIDL dan HIDL HAL
HAL komposer AIDL baru, 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 Antrian Pesan Cepat (FMQ) demi perintah yang dapat dibagi.
AIDL HAL mendefinisikan antarmuka perintah berdasarkan tipe paket yang diketik dengan kuat sebagai lawan dari perintah serial melalui FMQ di HIDL. Ini memberikan antarmuka yang stabil untuk perintah dan definisi yang lebih mudah dibaca tentang bagaimana muatan perintah diinterpretasikan.
Metode
executeCommands
didefinisikan diIComposerClient.aidl
sebagaiCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
di mana setiap perintah adalah tipe parsel yang diketik dengan kuat yang ditentukan dalam
DisplayCommand.aidl
. Respons perintah adalah paket yang diketik dengan kuat yang ditentukan dalamCommandResultPayload.aidl
.Penghapusan
IComposerClient.getClientTargetSupport
karena tidak ada klien aktif untuk metode ini.Representasi warna sebagai float, bukan byte, agar lebih selaras dengan tumpukan grafis atas di Android seperti yang didefinisikan dalam
ASurfaceTransaction_setColor
.Penambahan bidang baru untuk mengontrol konten HDR.
Di AIDL HAL, tumpukan lapisan campuran SDR/HDR mendukung peredupan lapisan SDR yang mulus saat lapisan HDR ditampilkan secara bersamaan di layar.
Bidang
brightness
diLayerCommand
memungkinkan SurfaceFlinger menentukan kecerahan per lapisan, sehingga HWC meredupkan konten lapisan dalam ruang cahaya linier, bukan dalam ruang gamma.Bidang
brightness
diClientTargetPropertyWithBrightness
memungkinkan HWC menentukan ruang kecerahan untuk komposisi klien dan menginstruksikanRenderEngine
apakah akan meredupkan lapisan SDR dalam komposisi klien.Bidang
dimmingStage
memungkinkan HWC mengonfigurasi kapanRenderEngine
harus meredupkan konten. Hal ini mengakomodasiColorModes
yang ditentukan vendor, yang mungkin lebih memilih untuk meredupkan ruang gamma, untuk memungkinkan peningkatan kontras yang ditentukan vendor dalam saluran warnanya.Penambahan tipe komposisi baru
DISPLAY_DECORATION
diComposition.aidl
untuk dekorasi layar.Beberapa perangkat memiliki perangkat keras khusus untuk mengoptimalkan gambar topeng alfa yang memperhalus sudut membulat dan potongan pada layar. Perangkat dengan perangkat keras tersebut harus mengimplementasikan
IComposerClient.getDisplayDecorationSupport
untuk mengembalikan strukturDisplayDecorationSupport
seperti yang ditentukan dalamDisplayDecorationSupport.aidl
yang baru. Struktur ini menjelaskan enumPixelFormat
danAlphaInterpretation
yang diperlukan oleh perangkat. Setelah implementasi ini, UI Sistem menandai lapisan masker alfa sebagaiDISPLAY_DECORATION
, jenis komposisi baru yang memanfaatkan perangkat keras khusus.Penambahan bidang
expectedPresentTime
baru keDisplayCommand.aidl
.Bidang
expectedPresentTime
memungkinkan SurfaceFlinger mengatur waktu sekarang yang diharapkan kapan konten saat ini harus ditampilkan di layar. Dengan fitur ini, SurfaceFlinger mengirimkan perintah ini ke implementasi sebelumnya, sehingga memungkinkannya 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. MetodesetBootDisplayConfig
,clearBootDisplayConfig
, dangetPreferredBootDisplayConfig
menggunakanBOOT_DISPLAY_CONFIG
sebagai berikut:Menggunakan
setBootDisplayConfig
, kerangka kerja memberi tahu vendor tentang konfigurasi tampilan waktu boot. Vendor harus melakukan cache dalam konfigurasi tampilan boot, dan melakukan booting 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 pilihannya.Dengan menggunakan
clearBootDisplayConfig
, kerangka kerja memberi tahu vendor untuk menghapus konfigurasi tampilan boot, dan melakukan booting dalam konfigurasi tampilan pilihan mereka selama reboot berikutnya.Menggunakan
getPreferredBootDisplayConfig
, kerangka kerja menanyakan mode boot pilihan vendor.
Jika konfigurasi tampilan boot tidak didukung, metode ini akan mengembalikan nilai
UNSUPPORTED
.Penambahan API baru untuk mengontrol tampilan waktu idle.
Dengan menggunakan
DISPLAY_IDLE_TIMER
, vendor dapat menentukan bahwa pengatur waktu tidak aktif diterapkan oleh vendor untuk tampilan ini. Saat idle, kemampuan ini mengubah kecepatan refresh ke pengaturan yang lebih rendah untuk menghemat daya. Platform ini menggunakansetIdleTimerEnabled
untuk mengontrol batas waktu timer, dan dalam beberapa kasus, menonaktifkannya guna mencegah peralihan kecepatan refresh yang tidak diinginkan saat idle.Menggunakan panggilan balik
IComposerCallback.onVsyncIdle
menunjukkan ke platform bahwa tampilan dalam keadaan diam dan iramavsync
telah berubah. Platform merespons panggilan balik ini dengan menyetel ulang modelvsync
-nya. Ini memaksa sinkronisasi ulangvsync
pada frame berikutnya, dan mempelajari iramavsync
baru.
Penerapan
Vendor tidak diharuskan mengimplementasikan AIDL HAL untuk Android 13. Namun, mereka dianjurkan untuk mengimplementasikan AIDL composer HAL, bukan versi HIDL, agar dapat menggunakan fungsi dan API baru.
Implementasi referensi untuk AIDL HWC HAL diimplementasikan di emulator Android.
Pengujian
Untuk menguji penerapan Anda, jalankan VtsHalGraphicsComposer3_TargetTest
.