Mulai Android 15, fitur kecepatan refresh adaptif (ARR) memungkinkan kecepatan refresh layar beradaptasi dengan kecepatan frame konten, menggunakan langkah VSync terpisah.
Fitur ARR menawarkan manfaat berikut:
Mengurangi konsumsi daya: Secara default, ARR memungkinkan perangkat beroperasi dengan kecepatan yang lebih rendah dari kecepatan refresh maksimumnya, yang bertransisi ke kecepatan yang lebih tinggi hanya jika diperlukan untuk pengalaman pengguna, sehingga meminimalkan konsumsi daya yang tidak perlu.
Mengurangi jank: ARR menghilangkan kebutuhan untuk beralih mode, yang merupakan penyebab yang diketahui untuk jank.
Ringkasan
Pada panel non-ARR, tampilan dimuat ulang dengan ritme tetap yang ditentukan oleh mode tampilan aktif.
Pada panel ARR, kecepatan VSync layar dan kecepatan refresh dipisahkan, sehingga kecepatan refresh dapat berubah dalam satu mode tampilan, berdasarkan ritme update konten. Panel dapat berjalan pada kecepatan refresh yang merupakan pembagi efek tear (TE) panel. OEM memiliki fleksibilitas untuk menerapkan ARR berdasarkan kompromi daya yang mereka pilih.
Gambar berikut adalah layar dengan vsyncPeriod
240 Hz dan
minFrameIntervalNs
(frekuensi refresh maksimum) 120 Hz. VSync terjadi setiap
4,16 ms. Frame dapat ditampilkan pada kelipatan VSync setelah
minFrameIntervalNs
dari frame terakhir.
Gambar 1. Contoh ARR.
Implementasi
Android 15 mendukung ARR dengan API HAL Hardware Composer (HWC) baru dan perubahan
platform. Untuk mengaktifkan ARR, OEM harus mendukung perubahan kernel dan sistem di
perangkat yang menjalankan Android 15 dan yang lebih baru, serta menerapkan API
android.hardware.graphics.composer3
versi 3, seperti yang tercantum di bagian berikut.
Lihat Implementasi referensi Pixel dari API yang mendukung ARR untuk mengetahui informasi selengkapnya.
DisplayConfiguration.aidl
DisplayConfiguration.aidl
API menentukan konfigurasi
tampilan menggunakan atribut tampilan, beserta atribut berikut untuk
ARR:
vrrConfig
Opsional: Jika ditetapkan, ARR akan diaktifkan untuk konfigurasi tertentu. Jika disetel kenull
, mode tampilan akan disetel ke mode non-ARR seperti beberapa kecepatan refresh (MRR). Dengan atribut ini, tampilan dapat dikonfigurasi sebagai MRR atau ARR, tetapi tidak keduanya.vsyncPeriod
: Kecepatan VSync layar. Pada layar ARR, nilai ini digunakan untuk mendapatkan kecepatan refresh diskret yang didukung.Vendor harus menetapkan nilai
DisplayConfiguration.vsyncPeriod
untuk semua perangkat. Untuk layar non-ARR,DisplayConfiguration.vsyncPeriod
adalah kecepatan refresh layar. Jika perangkat mendukung 120 Hz, nilai ini harus 8,3 ms.Untuk layar ARR,
DisplayConfiguration.vsyncPeriod
adalah frekuensi sinyal TE. Jika perangkat memilikiminFrameIntervalNs
8,3 ms, tetapi TE adalah 240 Hz, nilai ini harus 4,16 ms.
VrrConfig.aidl
VrrConfig.aidl
API menyertakan atribut berikut:
minFrameIntervalNs
: Kecepatan refresh maksimum yang dapat didukung layar.NotifyExpectedPresentConfig
: Hal ini ditentukan oleh kapan layar memerlukan pemberitahuan awal tentang frame mendatang.
IComposerClient.notifyExpectedPresent
memberikan petunjuk
untuk frame yang kemungkinan akan ditampilkan, sehingga layar dapat menyesuaikan
periode pembaruan mandirinya. frameIntervalNs
mewakili metrik metrik
saat ini yang mengikuti setelah expectedPresentTime
. Misalnya, jika
notifyExpectedPresent
dipanggil dengan expectedPresentTime
N dan
frameIntervalNs
16,6 md, frame berikutnya akan terjadi pada N + 16,6 md
setelah N waktu sekarang. Setelah waktu saat ini N, kecepatan frame adalah
16,6 md hingga ada perubahan lebih lanjut.
IComposerClient.notifyExpectedPresent
hanya dipanggil jika
DisplayConfiguration.notifyExpectedPresentConfig
ditetapkan, dan jika salah satu
kondisi pengaturan waktu berikut terjadi:
- Waktu saat ini di luar irama: Waktu presentasi yang diharapkan dari frame berikutnya
berlainan dari kecepatan refresh reguler layar yang ditentukan oleh
frameIntervalNs
. - Waktu tunggu terlampaui: Interval waktu antara frame sebelumnya lebih besar
dari atau sama dengan
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
memberikan petunjuk tentang
kaden untuk frame mendatang dalam nanodetik.
Pengujian
Gunakan onRefreshRateChangedDebug
untuk proses debug. Metode
ini memberi tahu klien bahwa kecepatan refresh layar telah berubah.
Gunakan aplikasi pengujian TouchLatency
untuk pengujian manual seperti yang ditunjukkan pada Gambar 2:
Gambar 2. Aplikasi pengujian TouchLatency.
Di aplikasi pengujian, gunakan penggeser untuk menyesuaikan kecepatan render ke berbagai nilai kecepatan refresh pembagi kecepatan refresh layar Anda. Amati bagaimana kecepatan frame berubah sehubungan dengan kecepatan yang diminta.