Mulai dari Android 13, HAL Hardware Composer (HWC)
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 keuntungan, vendor dapat menerapkan 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 HAL HIDL
android.hardware.graphics.composer@2.4
, tetapi mencakup perubahan berikut:
Penghapusan Fast Message Queue (FMQ) untuk mendukung perintah parcelable.
AIDL HAL menentukan antarmuka perintah berdasarkan jenis parcelable yang diketik secara kuat, bukan perintah yang diserialisasi melalui FMQ di HIDL. Hal ini memberikan antarmuka yang stabil untuk perintah dan definisi yang lebih mudah dibaca tentang cara sistem menafsirkan payload perintah.
Metode
executeCommands
5 ditentukan dalamIComposerClient.aidl
:CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
Setiap perintah adalah jenis parcelable dengan konsep strongly typed yang ditentukan dalam
DisplayCommand.aidl
. Respons perintah adalah parcelable yang diketik dengan ketat yang ditentukan dalamCommandResultPayload.aidl
.Penghapusan
IComposerClient.getClientTargetSupport
karena tidak ada klien aktif yang menggunakan metode ini.Representasi warna sebagai float, bukan byte, agar selaras dengan stack grafis atas di Android, sebagaimana ditentukan oleh
ASurfaceTransaction_setColor
.Penambahan kolom baru untuk mengontrol konten HDR.
Di AIDL HAL, tumpukan lapisan SDR/HDR campuran mendukung peredupan lapisan SDR yang lancar saat lapisan HDR ditampilkan di layar secara bersamaan.
Kolom
brightness
diLayerCommand
memungkinkan SurfaceFlinger menentukan kecerahan per lapisan. Hal ini memungkinkan HWC meredupkan konten lapisan dalam ruang cahaya linear, bukan ruang gamma.Kolom
brightness
diClientTargetPropertyWithBrightness
memungkinkan HWC menentukan ruang kecerahan untuk komposisi klien dan menginstruksikanRenderEngine
apakah akan meredupkan lapisan SDR dalam komposisi klien.Kolom
dimmingStage
memungkinkan HWC mengonfigurasi kapanRenderEngine
meredupkan konten. Hal ini mengakomodasiColorModes
yang ditentukan vendor yang mungkin lebih memilih meredup dalam ruang gamma untuk mengaktifkan peningkatan kontras yang ditentukan vendor dalam pipeline warnanya.Penambahan jenis komposisi,
DISPLAY_DECORATION
, diComposition.aidl
untuk dekorasi layar.Beberapa perangkat memiliki hardware khusus untuk mengoptimalkan penggambaran mask alpha yang memperlancar sudut membulat dan potongan pada layar. Perangkat dengan hardware tersebut harus menerapkan
IComposerClient.getDisplayDecorationSupport
dan menampilkan strukturDisplayDecorationSupport
seperti yang ditentukan dalamDisplayDecorationSupport.aidl
. Struktur ini menjelaskan enumPixelFormat
danAlphaInterpretation
yang diperlukan oleh perangkat. Setelah penerapan ini, UI Sistem menandai lapisan mask alpha sebagaiDISPLAY_DECORATION
, jenis komposisi yang memanfaatkan hardware khusus.Penambahan kolom
expectedPresentTime
keDisplayCommand.aidl
.Kolom
expectedPresentTime
memungkinkan SurfaceFlinger menyetel waktu presentasi yang diharapkan saat konten saat ini harus ditampilkan di layar. Dengan fitur ini, SurfaceFlinger mengirimkan perintah present ke implementasi lebih awal, sehingga memungkinkan pipeline 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
, dangetPreferredBootDisplayConfig
menggunakanBOOT_DISPLAY_CONFIG
sebagai berikut:Dengan menggunakan
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 mulai 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 tersebut, vendor harus menggunakan konfigurasi tampilan pilihannya.Dengan menggunakan
clearBootDisplayConfig
, framework memberi tahu vendor untuk menghapus konfigurasi layar booting, dan melakukan booting dalam konfigurasi layar pilihan mereka selama mulai ulang berikutnya.Dengan menggunakan
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 menggunakan
DISPLAY_IDLE_TIMER
, vendor dapat menentukan bahwa timer tidak aktif diterapkan oleh vendor untuk layar ini. Saat tidak ada aktivitas, kemampuan ini mengubah kecepatan refresh ke setelan yang lebih rendah untuk menghemat daya. Platform menggunakansetIdleTimerEnabled
untuk mengontrol waktu tunggu timer, dan dalam beberapa kasus, untuk menonaktifkannya guna mencegah peralihan frekuensi refresh yang tidak diinginkan saat tidak ada aktivitas.Menggunakan callback
IComposerCallback.onVsyncIdle
menunjukkan kepada platform bahwa layar tidak aktif dan iramavsync
telah berubah. Platform merespons callback ini dengan mereset modelvsync
-nya. Hal ini akan memicu sinkronisasi ulangvsync
pada frame berikutnya, dan mempelajari iramavsync
baru.
Implementasi
Vendor tidak diwajibkan untuk mengimplementasikan AIDL HAL untuk Android 13. Namun, vendor dianjurkan untuk menerapkan HAL composer AIDL, bukan versi HIDL, untuk menggunakan fungsi dan API HAL composer AIDL.
Emulator Android menyertakan implementasi referensi untuk AIDL HWC HAL.
Pengujian
Untuk menguji implementasi Anda, jalankan VtsHalGraphicsComposer3_TargetTest
.