VSYNC sinyali, görüntüleme ardışık düzenini senkronize eder. Ekran ardışık düzeni, uygulama oluşturma, SurfaceFlinger bileşimi ve ekranda resimleri sunan Donanım Bestecisi'nden (HWC) oluşur. VSYNC, uygulamaların oluşturmaya başlamak için uyandığı zamanı, SurfaceFlinger'ın ekranı birleştirmek için uyandığı zamanı ve ekran yenileme döngüsünü senkronize eder. Bu senkronizasyon, takılmaları ortadan kaldırır ve grafiklerin görsel performansını artırır.
HWC, VSYNC etkinlikleri oluşturur ve geri çağırma aracılığıyla etkinlikleri SurfaceFlinger'a gönderir:
typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData, hwc2_display_t display, int64_t timestamp);
SurfaceFlinger, setVsyncEnabled
çağrısı yaparak HWC'nin VSYNC etkinliği oluşturup oluşturmayacağını kontrol eder. SurfaceFlinger, setVsyncEnabled
'ün VSYNC etkinlikleri oluşturmasını sağlayarak ekranın yenileme döngüsü ile senkronize olmasını sağlar. SurfaceFlinger, ekran yenileme döngüsü ile senkronize edildiğinde HWC'nin VSYNC etkinlikleri oluşturmasını durdurmak için setVsyncEnabled
'ü devre dışı bırakır. SurfaceFlinger, gerçek VSYNC ile daha önce oluşturduğu VSYNC arasında bir fark algılarsa VSYNC etkinliğini yeniden etkinleştirir.
VSYNC ofseti
Senkronizasyon uygulaması ve SurfaceFlinger, donanım VSYNC'sine döngü oluşturur. VSYNC etkinliğinde, ekran N karesini göstermeye başlarken SurfaceFlinger, N+1 karesi için pencereleri birleştirmeye başlar. Uygulama, bekleyen girişi işler ve N+2 çerçevesini oluşturur.
VSYNC ile senkronize etmek tutarlı gecikme sağlar. Uygulamalardaki ve SurfaceFlinger'daki hataları azaltır ve ekranların birbirine göre faz kayması yaşamasını en aza indirir. Bu hesaplamada, uygulama ve SurfaceFlinger'ın kare başına süreleri arasında çok fazla fark olmadığı varsayılır. Gecikme en az iki karedir.
Bu sorunu gidermek için uygulama ve kompozisyon sinyalini donanım VSYNC'sine göre ayarlayarak girişten ekrana gecikme süresini azaltmak üzere VSYNC ofset'lerini kullanabilirsiniz. Bu, uygulama artı kompozisyon genellikle 33 ms'den kısa sürdüğü için mümkündür.
VSYNC ofset'inin sonucu, aynı döneme ve ofset fazına sahip üç sinyaldir:
HW_VSYNC_0
: Ekran, sonraki kareyi göstermeye başlar.VSYNC
: Uygulama girişi okur ve sonraki kareyi oluşturur.SF_VSYNC
: SurfaceFlinger, sonraki kare için oluşturmaya başlar.
VSYNC ofset'i kullanıldığında SurfaceFlinger, arabelleği alır ve kareyi birleştirirken uygulama aynı anda girişi işler ve kareyi oluşturur.
DispSync
DispSync, bir ekranın periyodik donanım tabanlı VSYNC etkinliklerinin bir modelini korur ve donanım VSYNC etkinliklerinden belirli faz ofsetlerinde geri çağırma işlemlerini yürütmek için bu modeli kullanır.
DispSync, donanım VSYNC'sinden kaydırılmamış olsa bile Choreographer ve SurfaceFlinger tarafından kullanılan VSYNC ve SF_VSYNC sinyallerini oluşturan bir yazılım faz kilitleme döngüsü (PLL) işlevidir.

Şekil 1. DispSync akışı
DispSync aşağıdaki özelliklere sahiptir:
- Referans: HW_VSYNC_0.
- Çıkış: VSYNC ve SF_VSYNC.
- Geri bildirim: Çit sinyali zaman damgalarını Hardware Composer'dan kaldırın.
VSYNC/retire ofset
Emeklileştirme çitlerinin sinyal zaman damgası, ofset fazı kullanılmayan cihazlarda bile HW VSYNC ile eşleşmelidir. Aksi takdirde hatalar olduğundan daha ciddi görünür. Akıllı panellerde genellikle, emeklilik çitinin ekran belleğine doğrudan bellek erişiminin (DMA) sonu olduğu ancak gerçek ekran anahtarının ve HW VSYNC'in bir süre sonra olduğu bir delta vardır.
PRESENT_TIME_OFFSET_FROM_VSYNC_NS
, cihazın BoardConfig.mk
makefile dosyasında ayarlanır. Ekran denetleyicisine ve panel özelliklerine bağlıdır. Emeklileştirme çiti zaman damgasından HW VSYNC sinyaline kadar geçen süre nanosaniye cinsinden ölçülür.
VSYNC ve SF_VSYNC ofset'leri
VSYNC_EVENT_PHASE_OFFSET_NS
ve SF_VSYNC_EVENT_PHASE_OFFSET_NS
, pencere geçişi sırasında kısmi GPU oluşturma veya Chrome'un animasyon içeren bir web sayfasında kaydırma gibi yüksek yüklü kullanım alanlarına göre ihtiyatlı bir şekilde ayarlanır. Bu ofsetler, uygulamanın uzun süre oluşturulmasına ve GPU'nun uzun süre oluşturmasına neden olur.
Bir veya iki milisaniyeden uzun gecikmeler fark edilir. Hata sayılarını önemli ölçüde artırmadan gecikmeyi en aza indirmek için kapsamlı otomatik hata testini entegre edin.