Google setzt sich dafür ein, die Rassengerechtigkeit für schwarze Gemeinschaften zu fördern. Siehe wie.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

VSYNC

Das VSYNC-Signal synchronisiert die Anzeigepipeline. Die Anzeige-Pipeline besteht aus App-Rendering, SurfaceFlinger-Komposition und dem Hardware Composer (HWC), der Bilder auf dem Display darstellt. VSYNC synchronisiert die Zeit, zu der Apps aufwachen, um mit dem Rendern zu beginnen, die Zeit, zu der SurfaceFlinger aufwacht, um den Bildschirm zusammenzusetzen, und den Aktualisierungszyklus der Anzeige. Diese Synchronisation 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);

SurfaceFlinger steuert, ob der HWC VSYNC-Ereignisse generiert, indem er setVsyncEnabled . Mit SurfaceFlinger kann setVsyncEnabled VSYNC-Ereignisse generieren, damit es mit dem Aktualisierungszyklus der Anzeige synchronisiert werden kann. Wenn SurfaceFlinger mit dem Aktualisierungszyklus der Anzeige synchronisiert ist, deaktiviert setVsyncEnabled , um zu setVsyncEnabled , dass der HWC VSYNC-Ereignisse generiert. Wenn SurfaceFlinger einen Unterschied zwischen dem tatsächlichen VSYNC und dem VSYNC feststellt, aktiviert der zuvor eingerichtete SurfaceFlinger die VSYNC-Ereigniserzeugung erneut.

VSYNC-Offset

Die Synchronisierungs-App und SurfaceFlinger rendern Schleifen zur Hardware VSYNC. Bei einem VSYNC-Ereignis zeigt das Display Frame N an, während SurfaceFlinger beginnt, Fenster für Frame N + 1 zusammenzusetzen . Die App verarbeitet ausstehende Eingaben und generiert Frame N + 2 .

Die Synchronisierung mit VSYNC bietet eine konsistente Latenz. Es reduziert Fehler in Apps und SurfaceFlinger und minimiert das Hin- und Herdriften von Displays. Dies setzt voraus, dass die Zeiten für App und SurfaceFlinger pro Frame nicht stark variieren. Die Latenz beträgt mindestens zwei Frames.

Um dies zu beheben, können Sie VSYNC-Offsets verwenden, um die Latenz zwischen Eingabe und Anzeige zu verringern, indem Sie ein App- und Kompositionssignal relativ zu Hardware-VSYNC erzeugen. Dies ist möglich, da die Komposition von App plus normalerweise weniger als 33 ms dauert.

Das Ergebnis des VSYNC-Offsets sind drei Signale mit derselben Periode und Offset-Phase:

  • HW_VSYNC_0 - Die Anzeige zeigt das nächste Bild an.
  • VSYNC - App liest Eingaben und generiert den nächsten Frame.
  • SF_VSYNC - SurfaceFlinger beginnt mit dem Compositing für das nächste Frame.

Mit dem 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 verwaltet ein Modell der periodischen hardwarebasierten VSYNC-Ereignisse einer Anzeige und verwendet dieses Modell, um Rückrufe bei bestimmten Phasenversätzen 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 der Hardware-VSYNC versetzt sind.

DispSync-Fluss

Abbildung 1. DispSync-Ablauf

DispSync hat folgende Eigenschaften:

  • Referenz - HW_VSYNC_0.
  • Ausgabe - VSYNC und SF_VSYNC.
  • Feedback - Zeitstempel für Zaunsignale von Hardware Composer zurückziehen.

VSYNC / Retire-Offset

Der Signalzeitstempel von Zäunen im Ruhestand muss mit HW VSYNC übereinstimmen, auch bei Geräten, die die Offset-Phase nicht verwenden. Andernfalls scheinen die Fehler schwerwiegender zu sein als sie sind. Smart Panels haben häufig ein Delta, in dem der Zaun für den Ruhestand das Ende des direkten Speicherzugriffs (DMA) zur Anzeige des Speichers darstellt, der eigentliche Anzeigeschalter und HW VSYNC jedoch 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 Zauns im Ruhestand 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 werden konservativ basierend auf Anwendungsfällen mit hoher Last festgelegt, z. B. teilweise GPU-Komposition während des Fensterübergangs oder Chrome-Scrollen durch eine Webseite mit Animationen. Diese Offsets ermöglichen eine lange App-Renderzeit und eine lange GPU-Kompositionszeit.

Eine Latenz von mehr als ein oder zwei Millisekunden ist erkennbar. Integrieren Sie den automatisierten Fehlertest, um die Latenz zu minimieren, ohne die Fehleranzahl signifikant zu erhöhen.