VSYNC sinyali, ekran ardışık düzenini senkronize eder. Ekran ardışık düzen; uygulama oluşturma, SurfaceFlinger bileşimi ve Donanım Ekranda resim sunan Composer (HWC). VSYNC, uygulamalar uyanmaya başladığında, SurfaceFlinger'ın uyanma saati ve ekranın yenileme döngüsünü birleştirebilirsiniz. Bu senkronizasyon takılmayı ortadan kaldırır ve grafiklerin görsel performansını iyileştirir.
HWC, VSYNC etkinlikleri oluşturur ve etkinlikleri SurfaceFlinger'a geri çağırma:
typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData, hwc2_display_t display, int64_t timestamp);.
SurfaceFlinger, HWC'nin VSYNC etkinlikleri oluşturup oluşturmayacağını kontrol eder:
setVsyncEnabled
aranıyor. SurfaceFlinger,
ile senkronize edilebilmesi için VSYNC etkinlikleri oluşturmak amacıyla setVsyncEnabled
yenileme döngüsünü uygulayın. SurfaceFlinger,
görüntü yenileme döngüsü, SurfaceFlinger setVsyncEnabled
devre dışı bırakarak
HWC'nin VSYNC etkinlikleri oluşturmasını durdurun. SurfaceFlinger bir
gerçek VSYNC ile daha önce oluşturduğu VSYNC arasındaki fark
SurfaceFlinger, VSYNC etkinlik oluşturmayı yeniden etkinleştirir.
VSYNC ofseti
Senkronizasyon uygulaması ve SurfaceFlinger oluşturma döngüleri donanım VSYNC'e de sahip olursunuz. Bir VSYNC etkinliğinde ekranda N karesi gösterilmeye başlar. SurfaceFlinger, N+1 çerçevesi için pencereleri birleştirmeye başlar. Uygulama ve N+2 karesini oluşturur.
VSYNC ile senkronizasyon, tutarlı gecikme sağlar. Projedeki hataları azaltarak ve SurfaceFlinger'ı kullanarak sahneye giren ve değişen bir iletişim kurmaktır. Bu, kare başına uygulama ve SurfaceFlinger olduğunu varsayar zamanlar çok değişmeyecek. Gecikme en az iki karedir.
Bu durumu düzeltmek için, girişten ekrana geçişi azaltmak üzere VSYNC ofsetlerini kullanabilirsiniz. donanıma göre uygulama ve beste sinyali oluşturarak gecikme VSYNC. Uygulama artı bestenin genellikle daha az işlem gerektirmesi 33 ms.den fazla olması gerekir.
VSYNC ofsetinin sonucu, aynı nokta ve ofsete sahip üç sinyaldir aşama:
HW_VSYNC_0
: Ekranda bir sonraki kare gösterilmeye başlar.VSYNC
— Uygulama, girişi okur ve sonraki kareyi oluşturur.SF_VSYNC
— SurfaceFlinger sonraki kare için birleştirmeye başlar.
SurfaceFlinger, VSYNC ofsetiyle arabelleği alır ve uygulama aynı anda girişi işleyip video oluştururken çerçeve.
DispSync
DispSync, bir cihazın düzenli aralıklarla donanım tabanlı VSYNC etkinliklerinin bir modelini korur belirli bir aşamada geri çağırmaları yürütmek için bu modeli kullanır donanım VSYNC etkinliklerinden ofsetleri belirtir.
DispSync, bir faz kilidi döngüsü (PLL) ve Koreografik ve SurfaceFlinger tarafından kullanılan VSYNC ve SF_VSYNC sinyalleri, olması gerekir.
DispSync aşağıdaki kalitelere sahiptir:
- Referans - HW_VSYNC_0.
- Çıkış: VSYNC ve SF_VSYNC.
- Geri Bildirim — Donanım Oluşturucu'daki çit sinyali zaman damgalarını kullanımdan kaldırın.
VSYNC/kullanımdan kaldırma ofseti
Kullanımdan kaldırılan iş ortaklarının sinyal zaman damgası, cihazlarda bile HW VSYNC ile eşleşmelidir. oluşturmaya karar vermelisiniz. Aksi takdirde hatalar daha ciddi görünür daha kolay hâle getiriyor. Akıllı panellerde genellikle son nokta olan bir delta bulunur. belleği görüntülemek için doğrudan bellek erişiminin (DMA) ancak gerçek ekran anahtarı biraz daha ileri bir aşamaya geçiyoruz.
PRESENT_TIME_OFFSET_FROM_VSYNC_NS
, cihazın
BoardConfig.mk
oluşturma dosyası. Ekran denetleyicisine ve paneline bağlıdır
özellikler. Kullanımdan kaldırılan zaman damgasından HW VSYNC'ye kadar geçen süre
sinyal nanosaniye cinsinden ölçülür.
VSYNC ve SF_VSYNC ofsetleri
VSYNC_EVENT_PHASE_OFFSET_NS
ve
SF_VSYNC_EVENT_PHASE_OFFSET_NS
, şu ölçüte göre ölçülü bir şekilde ayarlanır:
pencere geçişi sırasında kısmi GPU bileşimi gibi yüksek yük kullanım alanları
veya Chrome'un animasyon içeren bir web sayfasında gezindiğini görebilirsiniz. Bu ofsetler
uzun uygulama oluşturma ve GPU oluşturma süresi sağlar.
Bir milisaniye veya ikiden fazla gecikme fark edilebilir. Gecikmeyi en aza indirmek için hata sayılarını belirgin ölçüde artırmadan, eksiksiz otomatik hatayı teşvik etmek anlamına gelir.