VSYNC

Das VSYNC-Signal synchronisiert die Anzeigepipeline. Die Display-Pipeline besteht aus App-Rendering, SurfaceFlinger-Komposition und dem Hardware Composer (HWC), der Bilder auf dem Display präsentiert. VSYNC synchronisiert die Uhrzeit, zu der Apps aufwachen, um mit dem Rendern zu beginnen, die Uhrzeit, zu der SurfaceFlinger aufwacht, um den Bildschirm zusammenzusetzen, und den Anzeigeaktualisierungszyklus. Diese Synchronisierung eliminiert Stottern und verbessert die visuelle Leistung von Grafiken.

Der HWC generiert VSYNC-Ereignisse und sendet die Ereignisse über den Rückruf an SurfaceFlinger:

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

Surface Kontrollen , ob die HWC VSYNC Ereignisse erzeugt , indem dem Aufruf setVsyncEnabled . Surface ermöglicht setVsyncEnabled VSYNC Ereignisse zu erzeugen , so dass es mit dem Refresh - Zyklus des Displays synchronisieren. Wenn Surface an die Anzeigeaktualisierungszyklus synchronisiert ist, deaktiviert Surface setVsyncEnabled von Ereignissen zu erzeugen die VSYNC HWC zu stoppen. Wenn SurfaceFlinger einen Unterschied zwischen dem tatsächlichen VSYNC und dem VSYNC erkennt, aktiviert SurfaceFlinger die VSYNC-Ereignisgenerierung erneut.

VSYNC-Offset

Die Sync-App und SurfaceFlinger rendern Schleifen zum Hardware-VSYNC. Auf einem VSYNC Ereignisse beginnt der Anzeigerahmen N zeigte , während Surface Fenster für den Rahmen N Compositing beginnt + 1. Das APP - Handles anhängige Eingabe und erzeugt Frame N + 2.

Die Synchronisierung mit VSYNC bietet eine konsistente Latenz. Es reduziert Fehler in Apps und SurfaceFlinger und minimiert Displays, die in und aus der Phase abdriften. Dies setzt voraus, dass die App- und SurfaceFlinger-Per-Frame-Zeiten nicht stark variieren. Die Latenz beträgt mindestens zwei Frames.

Um dies zu beheben, können Sie VSYNC-Offsets verwenden, um die Eingabe-zu-Anzeige-Latenz zu reduzieren, indem Sie das App- und Kompositionssignal relativ zum Hardware-VSYNC machen. Dies ist möglich, da App plus Komposition in der Regel weniger als 33 ms dauert.

Das Ergebnis des VSYNC-Offsets sind drei Signale mit gleicher Periode und Offsetphase:

  • HW_VSYNC_0 - Anzeige nächste Frame beginnt zeigt.
  • VSYNC - App liest Eingabe und erzeugt nächsten Frame.
  • SF_VSYNC - Surface beginnt für den nächsten Frame Compositing.

Mit VSYNC-Offset empfängt SurfaceFlinger den Puffer und setzt den Frame zusammen, während die App gleichzeitig die Eingabe verarbeitet und den Frame rendert.

DispSync

DispSync unterhält ein Modell der periodischen hardwarebasierten VSYNC-Ereignisse einer Anzeige und verwendet dieses Modell, um Rückrufe bei spezifischen Phasenverschiebungen von den Hardware-VSYNC-Ereignissen auszuführen.

DispSync ist eine Software-Phasenregelschleife (PLL), die die von Choreographer und SurfaceFlinger verwendeten VSYNC- und SF_VSYNC-Signale generiert, auch wenn sie nicht von Hardware-VSYNC versetzt sind.

DispSync-Ablauf

Abbildung 1. DispSync Strömungs

DispSync hat die folgenden Eigenschaften:

  • Referenz - HW_VSYNC_0.
  • Ausgang - VSYNC und SF_VSYNC.
  • Feedback - Pensionieren Zaun Signal Zeitstempel von Hardware Composer.

VSYNC/Retire-Offset

Der Signalzeitstempel von Rückzugszäunen muss mit HW VSYNC übereinstimmen, auch auf Geräten, die die Offset-Phase nicht verwenden. Andernfalls scheinen Fehler schwerwiegender zu sein, als sie sind. Smart Panels haben oft ein Delta, bei dem der Rückzugszaun das Ende des direkten Speicherzugriffs (DMA) zum Anzeigen des Speichers ist, aber der eigentliche Anzeigeschalter und die HW-VSYNC sind einige Zeit später.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS wird in den Geräten gesetzt BoardConfig.mk Make - Datei. Es basiert auf den Eigenschaften des Display-Controllers und des Panels. Die Zeit vom Zeitstempel des Rückzugszauns bis zum HW-VSYNC-Signal wird in Nanosekunden gemessen.

VSYNC- und SF_VSYNC-Offsets

VSYNC_EVENT_PHASE_OFFSET_NS und SF_VSYNC_EVENT_PHASE_OFFSET_NS eingestellt sind konservativ basierend auf Hochlastanwendungsfälle, wie beispielsweise partielle GPU Zusammensetzung während Fenster Übergangs- oder Chrom über eine Web - Seite Scrolling Animationen enthält. Diese Offsets ermöglichen eine lange Renderzeit der App und eine lange GPU-Kompositionszeit.

Mehr als ein oder zwei Millisekunden Latenzzeit sind spürbar. Um die Latenz zu minimieren, ohne die Fehleranzahl signifikant zu erhöhen, integrieren Sie gründliche automatisierte Fehlertests.