VSENKRONİZASYON

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 akışı

Şekil 1. DispSync akışı

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.