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 diIComposerClient.aidl
sebagaiCommandResultPayload[] 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 dalamCommandResultPayload.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
diLayerCommand
memungkinkan SurfaceFlinger menentukan kecerahan per-lapisan, sehingga HWC meredupkan konten lapisan dalam ruang cahaya linier, berlawanan dengan ruang gamma.Bidang
brightness
diClientTargetPropertyWithBrightness
memungkinkan HWC menentukan ruang kecerahan untuk komposisi klien dan untuk menginstruksikanRenderEngine
apakah akan meredupkan lapisan SDR dalam komposisi klien.Bidang
dimmingStage
memungkinkan HWC mengonfigurasi kapanRenderEngine
harus meredupkan konten. Ini mengakomodasiColorModes
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
diComposition.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 strukturDisplayDecorationSupport
seperti yang didefinisikan dalamDisplayDecorationSupport.aidl
baru. Struktur ini menjelaskan enumPixelFormat
danAlphaInterpretation
diperlukan oleh perangkat. Setelah implementasi ini, UI Sistem menandai lapisan topeng alfa sebagaiDISPLAY_DECORATION
, jenis komposisi baru yang memanfaatkan perangkat keras khusus.Penambahan bidang baru yang
expectedPresentTime
keDisplayCommand.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. MetodesetBootDisplayConfig
,clearBootDisplayConfig
, dangetPreferredBootDisplayConfig
menggunakanBOOT_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 menggunakansetIdleTimerEnabled
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 iramavsync
telah berubah. Platform merespons panggilan balik ini dengan menyetel ulang modelvsync
-nya. Ini memaksa sinkronisasi ulangvsync
pada bingkai berikutnya, dan mempelajari iramavsync
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
.