Reibungsloseres Laden einzelner Frames in Firefox OS mit Silk
Kommentare

Die Darstellung von einzelnen Frames auf dem Display wird meist mithilfe eines Software-Timers koordiniert. Gerade für Gamer ist dabei ein reibungsloser Ablauf wichtig, allerdings kommt es dank unterschiedlicher Refresh-Zeiten des Software- und Hardware-Timers oft zu Latenz.

Um das reibungslose Neuladen beim Browser zu verbessern, hat Mason Chang das Silk-Projekt vorgestellt, mit dem genau das bei Firefox OS erreicht werden soll.

Software-Timer vs. Hardware-Timer

Die sogenannte Vertical Synchronization (vsync) kommt vor, wenn das Hardware-Display einen neuen Frame auf dem Display anzeigt. Typischerweise passiert das 60 Mal pro Sekunde beziehungsweise alle 16,6 Millisekunden.

In Firefox ahmt ein Software-Timer diese vom Hardware-Timer ausgegebenen 60 Frames pro Sekunde nach, allerdings sorgt das für eine höhere Latenz, weil einige Rendering-Funktionen zu dicht am nächsten vsync-Intervall ausgeführt werden und so in das nächste Intervall übergehen. Dadurch überspringt das Display häufig einen Frame und versucht in den nächsten Frames, das wieder aufzuholen.

Firefox‘ Rendering Pipeline Gecko zeichnet zunächst den neuen Frame im Hauptprozess, sendet dann den überarbeiteten Content mit einer LayerTransaction an den Compositor und setzt dann den neuen Content zusammen. Idealerweise würden alle Schritte innerhalb von 16,6 Millisekunden durchgeführt; in der Realität klappt das jedoch nur selten, da Schritt Eins und Drei auf unterschiedlichen Software-Timern koordiniert werden.

Zudem stehen sie nicht mit vsync in Verbindung, sodass das Timing der Pipeline nicht mit dem Zeitpunkt übereinstimmen muss, an dem das Display tatsächlich mit neuem Content erneuert wird. Silk soll nun die beiden unabhängigen Software-Timer mit dem Hardware-vsync-Timer ersetzen.

Nutzung von Silk

Silk soll sich vor allem vsync zu Nutze machen, um für ein reibungsloseres Update der Frames zu sorgen. So richtet Silk die Software-Timer an vsync aus, wodurch das Rendern zu einem festgelegten Zeitpunkt gestartet wird und mit Timestamps versehene Animationen im Hauptprozess mit weniger Latenz geladen werden.

Ebenso aktiviert Silk Touch-Resampling. Dabei wird die Bewegung des Fingers auf dem Device überprüft und Touch-Input-Events auf vsync-basierend abgetastet. Silk richtet zudem die Composites an Hardware-vsync aus. Dadurch beginnen alle Composites direkt nachdem ein Hardware-vsync ausgeführt wird. So werden zugleich die Composite-Zeiten verringert, was der User vor allem an einer längeren Akku-Laufzeit merken dürfte.

Silk sorgt also hauptsächlich für eine strengere Ordnung in der Rendering-Pipeline, wodurch die Möglichkeit, dass die Timer jeden nötigen Schritt zu ungünstigen Zeiten durchführen, verringert und so eine reibungslosere Darstellung einzelner Frames erreicht werden soll.

Das klingt nun alles ein wenig kompliziert. In seinem Artikel im Mozilla-Entwickler-Blog erklärt Mason Chang deutlich ausführlicher, wie das Silk-Projekt funktioniert und verdeutlicht die einzelnen Schritte mithilfe einiger Beispiele.

Aufmacherbild: texture of adark blue silk von Shutterstock / Urheberrecht: Korionov

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -