Kecepatan refresh adaptif

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.

arr-example

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 ke null, 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 memiliki minFrameIntervalNs 8,3 ms, tetapi TE adalah 240 Hz, nilai ini harus 4,16 ms.

VrrConfig.aidl

VrrConfig.aidl API menyertakan atribut berikut:

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:

touchlatency-app

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.