VSync

VSync sinyali, görüntüleme hattını senkronize eder. Ekran işlem hattı; uygulama oluşturma, SurfaceFlinger bileşimi ve görüntüleri ekranda sunan Hardware Composer'dan (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ılmayı ortadan kaldırır ve grafiklerin görsel performansını artırır.

HWC, VSync etkinlikleri oluşturur ve geri çağırma yoluyla 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 etkinlikleri oluşturup oluşturmadığını kontrol eder. SurfaceFlinger, setVsyncEnabled'nın VSync etkinlikleri oluşturmasını sağlayarak ekranın yenileme döngüsüyle senkronize olmasını sağlar. SurfaceFlinger, ekran yenileme döngüsüyle senkronize edildiğinde HWC'nin VSync etkinlikleri oluşturmasını engellemek için setVsyncEnabled özelliğini devre dışı bırakır. SurfaceFlinger, gerçek VSync ile daha önce oluşturduğu VSync arasında bir fark algılarsa VSync etkinlik oluşturmayı yeniden etkinleştirir.

VSync kaydırmaları

Senkronizasyon uygulaması ve SurfaceFlinger, donanım VSync'ine 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 karesini oluşturur.

VSync ile senkronizasyon, tutarlı gecikme süresi sağlar. Bu, uygulamalarda ve SurfaceFlinger'da hataları azaltır ve ekranların birbirleriyle faz dışı kalmasını en aza indirir. Bu, uygulama ve SurfaceFlinger'ın kare başına sürelerinin büyük ölçüde değişmediği varsayımına dayanır. Gecikme en az iki karedir.

Bu sorunu düzeltmek için VSync ofsetlerini kullanarak girişten ekrana gecikmeyi azaltabilirsiniz. Bunun için uygulama ve kompozisyon sinyalini donanım VSync'sine göre ayarlamanız gerekir. Uygulama artı kompozisyon genellikle 33 ms'den kısa sürdüğü için bu mümkündür.

VSync kaymasının sonucu, aynı dönem ve kayma aşamasına sahip üç sinyaldir:

  • HW_VSYNC_0: Ekranda sonraki kare gösterilmeye başlar.
  • VSYNC: Uygulama, girişi okur ve sonraki kareyi oluşturur.
  • SF_VSYNC: SurfaceFlinger, sonraki kare için birleştirme işlemine başlar.

VSync ofsetleriyle 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 donanıma dayalı VSync etkinliklerinin periyodik bir modelini tutar ve bu modeli, geri çağırmaları donanım VSync etkinliklerinden belirli aşama ofsetlerinde yürütmek için kullanır.

DispSync, donanım VSync'inden dengelenmemiş olsa bile Choreographer ve SurfaceFlinger tarafından kullanılan VSYNC ve SF_VSYNC sinyallerini oluşturan bir yazılım faz kilitli döngüsüdür (PLL).

DispSync akışı aşağıdaki şekilde gösterilmektedir:

DispSync akışı

1.şekil DispSync akışı.

DispSync aşağıdaki özelliklere sahiptir:

  • ReferansHW_VSYNC_0.
  • Çıkış: VSYNC ve SF_VSYNC.
  • Geri bildirim: HWC'den çit sinyali zaman damgalarını kullanımdan kaldırın.

VSync emeklilik telafileri

Kullanımdan kaldırma sınırlarının sinyal zaman damgası, ofset aşamasını kullanmayan cihazlarda bile HW VSync ile eşleşmelidir. Aksi takdirde hatalar, olduğundan daha ciddi görünür. Akıllı panellerde genellikle, kullanımdan kaldırma sınırının ekran belleğine doğrudan bellek erişiminin (DMA) sonu olduğu bir delta vardır. Ancak gerçek ekran geçişi ve donanım VSync'i bir süre sonra gerçekleşir.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS, cihazın BoardConfig.mk makefile'ında ayarlanmıştır. Bu, ekran denetleyicisine ve panel özelliklerine bağlıdır. Emeklilik sınırı zaman damgasından HW VSync sinyaline kadar geçen süre nanosaniye cinsinden ölçülür.

VSYNC ve SF_VSYNC ofsetleri

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 işlemi gibi yüksek yüklü kullanım alanlarına göre muhafazakar bir şekilde ayarlanır. Bu ofsetler, uygulamanın uzun süre oluşturulmasına ve GPU'nun uzun süre oluşturmasına olanak tanır.

Bir veya iki milisaniyeden fazla gecikme fark edilebilir. Hata sayısını önemli ölçüde artırmadan gecikmeyi en aza indirmek için kapsamlı otomatik hata testi entegre edin.