Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

VSYNC

Sinyal VSYNC menyinkronkan pipa tampilan. Pipeline tampilan terdiri dari rendering aplikasi, komposisi SurfaceFlinger, dan Hardware Composer (HWC) yang menampilkan gambar di layar. VSYNC menyinkronkan waktu aplikasi bangun untuk memulai rendering, waktu SurfaceFlinger bangun untuk menggabungkan layar, dan siklus penyegaran tampilan. Sinkronisasi ini menghilangkan stutter dan meningkatkan kinerja visual grafis.

HWC menghasilkan event VSYNC dan mengirimkan event ke SurfaceFlinger melalui callback:

typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData,
        hwc2_display_t display, int64_t timestamp);

Kontrol SurfaceFlinger apakah HWC menghasilkan peristiwa VSYNC dengan memanggil ke setVsyncEnabled . SurfaceFlinger memungkinkan setVsyncEnabled untuk menghasilkan peristiwa VSYNC sehingga dapat melakukan sinkronisasi dengan siklus refresh layar. Ketika SurfaceFlinger disinkronisasi dengan siklus display refresh, SurfaceFlinger Menonaktifkan setVsyncEnabled untuk menghentikan HWC dari menghasilkan peristiwa VSYNC. Jika SurfaceFlinger mendeteksi perbedaan antara VSYNC aktual dan VSYNC, SurfaceFlinger yang dibuat sebelumnya akan mengaktifkan kembali pembuatan peristiwa VSYNC.

Offset VSYNC

Aplikasi sinkronisasi dan SurfaceFlinger membuat loop ke perangkat keras VSYNC. Pada acara VSYNC, layar mulai menunjukkan bingkai N sementara SurfaceFlinger mulai compositing jendela untuk frame N + 1. Pegangan aplikasi tertunda masukan dan menghasilkan bingkai N + 2.

Sinkronisasi dengan VSYNC memberikan latensi yang konsisten. Ini mengurangi kesalahan dalam aplikasi dan SurfaceFlinger dan meminimalkan tampilan yang bergeser masuk dan keluar dari fase satu sama lain. Ini mengasumsikan waktu per-frame aplikasi dan SurfaceFlinger tidak terlalu bervariasi. Latensi setidaknya dua frame.

Untuk memperbaikinya, Anda dapat menggunakan offset VSYNC untuk mengurangi latensi input-ke-tampilan dengan membuat sinyal aplikasi dan komposisi relatif terhadap VSYNC perangkat keras. Ini dimungkinkan karena komposisi app plus biasanya membutuhkan waktu kurang dari 33 md.

Hasil offset VSYNC adalah tiga sinyal dengan periode dan fase offset yang sama:

  • HW_VSYNC_0 - Tampilan mulai menunjukkan frame berikutnya.
  • VSYNC - App membaca masukan dan menghasilkan frame berikutnya.
  • SF_VSYNC - SurfaceFlinger dimulai compositing untuk frame berikutnya.

Dengan offset VSYNC, SurfaceFlinger menerima buffer dan menggabungkan frame sementara aplikasi secara bersamaan memproses input dan merender frame.

Sinkronisasi Tampilan

DispSync memelihara model peristiwa VSYNC berbasis perangkat keras periodik dari sebuah tampilan dan menggunakan model itu untuk mengeksekusi panggilan balik pada offset fase tertentu dari peristiwa VSYNC perangkat keras.

DispSync adalah software phase-lock loop (PLL) yang menghasilkan sinyal VSYNC dan SF_VSYNC yang digunakan oleh Koreografer dan SurfaceFlinger, bahkan jika tidak diimbangi dari perangkat keras VSYNC.

Aliran DispSync

Aliran Gambar 1. DispSync

DispSync memiliki kualitas berikut:

  • Referensi - HW_VSYNC_0.
  • Output - VSYNC dan SF_VSYNC.
  • Feedback - Pensiun cap sinyal pagar dari Hardware Composer.

VSYNC/Pensiun offset

Stempel waktu sinyal pensiunan pagar harus cocok dengan HW VSYNC, bahkan pada perangkat yang tidak menggunakan fase offset. Jika tidak, kesalahan tampak lebih parah daripada sebenarnya. Panel pintar sering memiliki delta di mana pagar pensiun adalah ujung akses memori langsung (DMA) ke memori tampilan, tetapi sakelar tampilan aktual dan HW VSYNC beberapa waktu kemudian.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS diatur dalam perangkat BoardConfig.mk makefile. Ini didasarkan pada pengontrol tampilan dan karakteristik panel. Waktu dari stempel waktu pagar pensiun ke sinyal HW VSYNC diukur dalam nanodetik.

Offset VSYNC dan SF_VSYNC

VSYNC_EVENT_PHASE_OFFSET_NS dan SF_VSYNC_EVENT_PHASE_OFFSET_NS ditetapkan konservatif didasarkan pada kasus penggunaan beban tinggi, seperti komposisi GPU parsial selama jendela transisi atau Chrome bergulir melalui halaman web yang berisi animasi. Offset ini memungkinkan waktu render aplikasi yang lama dan waktu komposisi GPU yang lama.

Lebih dari satu atau dua milidetik latensi terlihat. Untuk meminimalkan latensi tanpa meningkatkan jumlah kesalahan secara signifikan, integrasikan pengujian kesalahan otomatis yang menyeluruh.