Mulai Android 13, HAL Hardware Composer (HWC) ditentukan di
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 dan penerapan serta pengujian AIDL HAL.
Karena kelebihan yang ditawarkan oleh AIDL, vendor disarankan untuk menerapkan HAL komposer AIDL dimulai Android 13, bukan versi HIDL. Lihat Penerapan untuk informasi selengkapnya.
Perbedaan antara AIDL dan HIDL HAL
Komposer AIDL baru HAL, bernama android.hardware.graphics.composer3
,
ditentukan dalam IComposer.aidl
.
Serangan ini mengekspos API yang mirip dengan HIDL HAL
android.hardware.graphics.composer@2.4
dengan perubahan berikut:
Penghapusan Fast Message Queue (FMQ) di lebih memilih perintah parcelable.
AIDL HAL mendefinisikan antarmuka perintah berdasarkan {i>parcelable<i} dibandingkan dengan perintah serial melalui FMQ di HIDL. Ini menyediakan antarmuka yang stabil untuk perintah dan definisi yang lebih mudah dibaca tentang {i>payload<i} perintah diinterpretasikan.
executeCommands
ditentukan dalamIComposerClient.aidl
sebagaiCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
di mana setiap perintah adalah tipe {i> parcelable <i}yang sangat diketik di
DisplayCommand.aidl
Respons perintah adalah parcelable berformat kuat yang ditentukan diCommandResultPayload.aidl
Penghapusan
IComposerClient.getClientTargetSupport
karena tidak ada klien aktif untuk metode ini.Representasi warna sebagai float, bukan byte, agar lebih selaras dengan stack grafis atas di Android seperti yang ditentukan di
ASurfaceTransaction_setColor
.Penambahan kolom baru untuk mengontrol konten HDR.
Di AIDL HAL, campuran tumpukan lapisan SDR/HDR mendukung peredupan Lapisan SDR saat lapisan HDR ada di layar secara bersamaan.
Kolom
brightness
diLayerCommand
memungkinkan SurfaceFlinger menentukan kecerahan per-lapisan, sehingga HWC meredupkan konten lapisan dalam ruang cahaya linear, berlawanan dengan ruang gamma.Kolom
brightness
diClientTargetPropertyWithBrightness
memungkinkan HWC menentukan ruang kecerahan untuk komposisi klien dan untuk instruksikanRenderEngine
apakah akan meredupkan lapisan SDR dalam komposisi klien.dimmingStage
memungkinkan HWC mengonfigurasi kapanRenderEngine
harus meredupkan konten. Ini mengakomodasiColorModes
yang ditentukan vendor, yang mungkin memilih untuk redup di gamma ruang iklan, untuk memungkinkan penyempurnaan kontras yang ditentukan vendor dalam pipeline warna mereka.Penambahan jenis komposisi baru
DISPLAY_DECORATION
diComposition.aidl
untuk dekorasi layar.Beberapa perangkat memiliki perangkat keras khusus untuk mengoptimalkan menggambar {i>alpha mask<i} yang menghaluskan sudut membulat dan potongan di layar. Perangkat dengan perangkat keras seperti itu harus menerapkan
IComposerClient.getDisplayDecorationSupport
untuk menampilkan strukturDisplayDecorationSupport
seperti yang ditentukan dalamDisplayDecorationSupport.aidl
. Struktur ini mendeskripsikanPixelFormat
danAlphaInterpretation
enum yang diperlukan oleh perangkat. Setelah implementasi ini, UI Sistem menandai lapisan mask alfa sebagaiDISPLAY_DECORATION
, jenis komposisi baru yang memanfaatkan perangkat keras khusus.Penambahan
expectedPresentTime
baru keDisplayCommand.aidl
.Kolom
expectedPresentTime
memungkinkan SurfaceFlinger menetapkan waktu saat ini hingga konten yang aktif harus ditampilkan di layar. Dengan ini SurfaceFlinger, SurfaceFlinger mengirimkan perintah {i>present<i} ke implementasi sebelum lebih banyak, sehingga dapat menyalurkan lebih banyak karya komposisi.Penambahan API baru untuk mengontrol konfigurasi tampilan booting.
Dengan menggunakan
BOOT_DISPLAY_CONFIG
, vendor dapat menentukan apakah konfigurasi tampilan {i>boot<i} didukung. TujuansetBootDisplayConfig
,clearBootDisplayConfig
, dangetPreferredBootDisplayConfig
menggunakanBOOT_DISPLAY_CONFIG
sebagai berikut:Dengan menggunakan
setBootDisplayConfig
, kerangka kerja menginformasikan vendor tentang konfigurasi tampilan waktu {i>boot<i}. Vendor harus melakukan cache di konfigurasi tampilan booting, dan melakukan booting di konfigurasi ini pada mulai ulang. Jika perangkat tidak dapat melakukan {i>booting<i} dalam konfigurasi ini, vendor harus menemukan yang sesuai dengan resolusi dan kecepatan refresh konfigurasi ini. Jika tidak ada, vendor harus menggunakan konfigurasi tampilan yang mereka inginkan.Dengan menggunakan
clearBootDisplayConfig
, kerangka kerja memberi tahu vendor untuk menghapus konfigurasi tampilan {i>boot<i}, dan {i>booting<i} di konfigurasi tampilan yang mereka inginkan selama {i>reboot <i}berikutnya.Dengan menggunakan
getPreferredBootDisplayConfig
, kerangka kerja melakukan kueri terhadap mode {i>boot<i} yang disukai vendor.
Jika konfigurasi tampilan booting tidak didukung, metode ini akan menampilkan senilai
UNSUPPORTED
.Penambahan API baru untuk mengontrol tampilan timer tidak ada aktivitas.
Dengan menggunakan
DISPLAY_IDLE_TIMER
, vendor dapat menentukan bahwa {i>timer<i} tidak aktif diterapkan oleh vendor untuk tampilan ini. Saat tidak ada aktivitas, kemampuan ini mengubah kecepatan refresh menjadi lebih rendah untuk menghemat daya. Platform ini menggunakansetIdleTimerEnabled
untuk mengontrol waktu tunggu timer, dan dalam beberapa kasus, menonaktifkannya untuk untuk mencegah pengalihan kecepatan refresh yang tidak diinginkan saat tidak ada aktivitas.Menggunakan
IComposerCallback.onVsyncIdle
callback menunjukkan ke platform bahwa tampilan tidak ada aktivitas danvsync
irama telah berubah. Platform akan merespons callback ini dengan mereset ulang Modelvsync
. Fungsi ini memaksa sinkronisasi ulangvsync
pada frame berikutnya, dan mempelajari Ritmevsync
.
Implementasi
Vendor tidak diwajibkan untuk menerapkan AIDL HAL untuk Android 13. Namun, mereka disarankan untuk menerapkan AIDL komposer HAL alih-alih versi HIDL untuk menggunakan API dan fungsionalitas baru.
Penerapan referensi untuk AIDL HWC HAL diimplementasikan di emulator Android.
Pengujian
Untuk menguji penerapan Anda, jalankan VtsHalGraphicsComposer3_TargetTest
.