Das VSYNC-Signal synchronisiert die Anzeigepipeline. Das Display besteht aus App-Rendering, SurfaceFlinger-Zusammensetzung und Hardware Composer (HWC), der Bilder auf dem Bildschirm präsentiert. VSYNC synchronisiert die bis das Rendering von Apps beginnt, wird die Startzeit von SurfaceFlinger und den Aktualisierungszyklus der Anzeige. Diese Synchronisierung vermeidet Ruckeln und verbessert die visuelle Leistung der Grafik.
HWC generiert VSYNC-Ereignisse und sendet sie über den Callback:
typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData, hwc2_display_t display, int64_t timestamp);
SurfaceFlinger steuert, ob HWC VSYNC-Ereignisse generiert.
setVsyncEnabled
wird angerufen. SurfaceFlinger ermöglicht
setVsyncEnabled
zum Generieren von VSYNC-Ereignissen für die Synchronisierung mit
Aktualisierungszyklus des Bildschirms. Wenn SurfaceFlinger mit dem
Aktualisierungszyklus des Bildschirms, deaktiviert SurfaceFlinger setVsyncEnabled
, um
die HWC daran hindern, VSYNC-Ereignisse zu generieren. Wenn SurfaceFlinger eine
Unterschied zwischen der tatsächlichen und der zuvor erstellten VSYNC
SurfaceFlinger aktiviert die VSYNC-Ereignisgenerierung wieder.
VSYNC-Offset
Die App für die Synchronisierung und das Rendering von SurfaceFlinger wechseln zu einer Hardware-VSYNC. Bei einem VSYNC-Ereignis beginnt das Display mit Frame N, während SurfaceFlinger beginnt, Fenster für Frame N+1 zusammenzusetzen. Die App verarbeitet ausstehende Eingaben und generiert den Frame N+2.
Die Synchronisierung mit VSYNC liefert eine konsistente Latenz. Es reduziert Fehler in Apps und SurfaceFlinger und minimiert Bildschirmverschiebungen mit sich gegenseitig helfen. Hierbei wird vorausgesetzt, dass eine App und SurfaceFlinger pro Frame verwendet werden. unterscheiden sich nicht sehr stark. Die Latenz beträgt mindestens zwei Frames.
Um dies zu vermeiden, können Sie VSYNC-Offsets verwenden, um die Eingabe-zu-Anzeige- Latenz, indem das App- und Kompositionssignal relativ zur Hardware wird VSYNC Das ist möglich, weil App und Zusammenstellung in der Regel weniger als 33 ms.
Das Ergebnis eines VSYNC-Offsets sind drei Signale mit demselben Zeitraum und Offset Phase:
HW_VSYNC_0
: Das Display beginnt mit dem nächsten Frame.VSYNC
: Die App liest Eingaben und generiert den nächsten Frame.SF_VSYNC
: SurfaceFlinger beginnt mit der Compositing-Funktion für den nächsten Frame.
Mit VSYNC-Offset empfängt SurfaceFlinger den Zwischenspeicher und erstellt den Frame, während die App gleichzeitig die Eingabe verarbeitet und auf den Frame.
DispSync
DispSync verwaltet ein Modell der regelmäßigen hardwarebasierten VSYNC-Ereignisse eines Anzeige und verwendet dieses Modell, um Callbacks in einer bestimmten Phase auszuführen von den Hardware-VSYNC-Ereignissen.
DispSync ist eine Software Phase-Lock Loop (PLL), die den Die VSYNC- und SF_VSYNC-Signale werden von Choreographer und SurfaceFlinger verwendet, auch wenn nicht von der Hardware-VSYNC abweichend.
DispSync verfügt über folgende Eigenschaften:
- Referenz – HW_VSYNC_0.
- Ausgabe: VSYNC und SF_VSYNC.
- Feedback – Deaktivieren Sie die Zeitstempel von Zaunsignalen aus Hardware Composer.
VSYNC-Offset-Versatz
Der Signalzeitstempel von deaktivierten Zäunen muss mit HW VSYNC übereinstimmen, auch auf Geräten die die Offset-Phase nicht nutzen. Andernfalls scheinen die Fehler schwerwiegender zu sein. als sie sind. Intelligente Paneele weisen oft ein Delta am Ende des Zauns auf. des direkten Speicherzugriffs (DMA) zur Anzeige des Arbeitsspeichers, aber der eigentliche und HW VSYNC kommt etwas später.
PRESENT_TIME_OFFSET_FROM_VSYNC_NS
ist eingestellt in der
Makefile BoardConfig.mk
. Es basiert auf dem Controller und dem Steuerfeld
Eigenschaften. Die Zeit vom Zeitstempel der Einstellung des Zauns bis zur HW VSYNC
wird das Signal in Nanosekunden gemessen.
VSYNC- und SF_VSYNC-Offsets
VSYNC_EVENT_PHASE_OFFSET_NS
und
SF_VSYNC_EVENT_PHASE_OFFSET_NS
sind konservativ festgelegt, basierend auf
Anwendungsfälle mit hoher Last, z. B. teilweise GPU-Zusammensetzung während des Fensterübergangs
oder Chrome durch eine Webseite mit Animationen scrollt. Diese Offsets
lange App-Rendering-Zeit und lange GPU-Zusammensetzungszeit.
Mehr als ein oder zwei Millisekunden sind spürbar. Um die Latenz zu minimieren ohne signifikante Steigerung der Fehleranzahl, integrieren Sie umfassende automatisierte Fehler Tests durchführen.