Glossar-Begriff

Wie wir Eingabeverzögerung messen

Wir erfassen die vergangene Zeit zwischen aufeinanderfolgenden Controller-Eingabeereignissen mit performance.now() innerhalb einer requestAnimationFrame-Schleife, über ein 10-Sekunden-Fenster mit mindestens 30 gültigen Proben. Das Ergebnis berichtet die Latenz der Polling-Schleife - wie schnell der Browser Zustandsänderungen erkennt - nicht die end-to-end-Eingabeverzögerung von Daumen bis zum Pixel.

Definition

Was Wie wir Eingabeverzögerung messen bedeutet

Wie wir Eingabeverzögerung messen: Unsere Methodik zur Eingabelatenz misst die durchschnittliche Inter-Event-Delta zwischen Controller-Zustandsänder ungen, die über die Gamepad API an den Browser übermittelt werden, gemittelt über ein 10-Sekunden langes aktives Sample-Fenster.
Auch bekannt alsController-Latenz-MethodikMessung der EingabelatenzLatenz der Polling-Schleife
Mechanismus

Der exakte Messalgorithmus

Alles, was hier steht, spiegelt den ausgelieferten Code des Browser-Testers wider. Keine Black Box - der Quellcode ist offen, die Konstanten dokumentiert, und jede Schwelle hat eine spezifische Begründung statt marketinghafter Rundzahlen.

  1. 01

    requestAnimationFrame-Polling-Schleife

    Der Tester läuft in einer kontinuierlichen Polling-Schleife, die über requestAnimationFrame an den Refresh-Zyklus des Displays gekoppelt ist. Pro Frame liest er das aktuelle Gamepad-Snapshot mit navigator.getGamepads(), vergleicht jede Achse und jeden Button mit den Werten des vorherigen Frames, und erfasst einen Timestamp mit performance.now(), sobald eine Eingabeänderung erkannt wird.

  2. 02

    Schwellen für Änderungs-Erkennung

    Eine Änderung gilt als Event, wenn eine Achse sich gegenüber dem vorherigen Wert um mehr als 0,02 im absoluten Wert bewegt oder der gedrückte Zustand eines Buttons umschaltet. Die 0,02-Achsen-Schwelle filtert Sensorsrauschen auf zentrierten Sticks aus; ohne sie würden drif t-anfällige Controller jedes Frame falsche Events erzeugen und das Ergebnis künstlich niedrig verzerren.

  3. 03

    Erfassung der Inter-Event-Delta

    Wenn eine Änderung ausgelöst wird, zeichnet der Tester delta = performance.now() - timeOfPreviousChange auf. Diese Delta ist das Intervall, das der Browser brauchte, um die nächste erkennbare Eingabe vom Controller zu beobachten. Deltas über 500 ms werden als Ausreisser verworfen - sie repräsentieren Pausen zwischen Eingabe-Bursts, nicht die Messlatenz.

  4. 04

    10-Sekunden-Sample-Fenster

    Das aktive Fenster läuft exakt 10.000 ms nach dem Druck des Start-Buttons. In diesem Fenster wirst du angewiesen, beide Sticks kontinuierlich zu drehen und Buttons zu klicken - das Ziel ist ein dichter Strom von Zustandsänderungen, damit wir genug Deltas haben, um das tatsächliche Verhalten des Controllers statistisch zu charakterisieren.

  5. 05

    Aggregierte Metriken

    Nach dem Fensterende fordern wir mindestens 30 gültige Deltas, um ein Ergebnis zu melden. Davon berechnen wir Min, Mittelwert, 95. Perzentil und Max, plus ein 12-Bucket-Histogramm der gesamten Verteilung. Der Mittelwert wird gegen die Schwellentabelle geprüft; das Histogramm macht zweigipflige oder jitterige Verhaltensmuster sichtbar, die ein einzelner Durchschnitt verdecken würde.

Referenz

Wie wir Eingabeverzögerung messen: gemeldete Latenzschwellen

Die untenstehenden Urteilsbänder sind GPADLAB-Interpretationsbänder, die konsistent im Ergebnispanel des Testers und in der Latenz-Stufe des Controller Health Score verwendet werden. Sie gelten für diese browserbeobachtete Polling-Schleifen-Messung, nicht für hardware-instrumentierte End-zu-End-Latenz - ein Controller, der hier 4 ms meldet, ist nicht gleichbedeutend mit einem 4 ms-Button-zu-Bild-Ergebnis.

Mittelwert der Inter-Event-DeltaUrteilBedeutung
< 5 msAusgezeichnetAusgezeichnete browserbeobachtete Polling-Antwort in diesem Test. Volle 150 Punkte in der Latenz-Stufe des Controller Health Score.
5-10 msGutEin starkes browserbeobachtetes Ergebnis. Die tatsächliche End-zu-End-Eingabelatenz kann je nach Controller, Verbindung, Plattform, Spiel und Display dennoch abweichen. Fällt in die Bucket des 90%-Health-Scores.
10-20 msAkzeptabelEin moderates browserbeobachtetes Intervall. Verbindungsmodus, Controller-Firmware, Plattform, Browser-Scheduling und Systemlast können das Ergebnis allesamt beeinflussen. Fällt in die Partial-Severity-Bucket für die Bewertung.
20-40 msVerschlechtertEin langsames, vom Browser beobachtetes Intervall. Führe den Test unter ähnlichen Bedingungen erneut durch und vergleiche die Verbindungsmodi, bevor du das Ergebnis einer bestimmten Ursache zuschreibst.
≥ 40 msProblematischEin hohes, vom Browser beobachtetes Intervall. Führe den Test unter kontrollierten Bedingungen erneut durch und untersuche Verbindung, Systemlast, Browser, Firmware und Controller-Verhalten. Erzielt Nullpunkte in der Latenz-Stufe.

Die Schwellen sind in LatencyTester.tsx als T_EXCELLENT=5, T_GOOD=10, T_ACCEPTABLE=20, T_DEGRADED=40 hart codiert und von scoreLatency() in scoring/index.ts gespiegelt. Beide Dateien sind bei Zweifeln die maßgebliche Quelle.

Reparatur

Problemlösungen für Wie wir Eingabeverzögerung messen

Siehe auch

Verwandte Glossarbegriffe

Häufig gefragt

Fragen zu Wie wir Eingabeverzögerung messen

Nein, und diese Unterscheidung ist wichtig. Der Tester liest navigator.getGamepads() innerhalb einer requestAnimationFrame-Schleife und timestampet, wann aufeinanderfolgende Zustandsänderungen für die Seite erkennbar werden. Controller-Meldeverhalten, USB- oder drahtloser Transport, Betriebssystem, Browser-Scheduling und Display-Rhythmus können beeinflussen, wann diese Änderungen beobachtet werden, aber browserseitiges Timing kann diese Stufen weder isolieren noch direkt aufsummieren. Der Test timestampet weder den physischen Buttonanschlag am Controller, die Transportankunft beim Betriebssystem, die Spiel-Engine-Verarbeitung noch die endgültige Antwort auf dem Bildschirm. Hardware-instrumentierte End-zu-End-Messungen beantworten daher eine andere Frage und sind mit diesem browserbeobachteten Ergebnis nicht direkt vergleichbar.

Zwei Gründe. Erstens kostet diese Ausrüstung 500 USD aufwärts und erfordert eine physische Einrichtung an jedem Controller, was für ein browserbasiertes Tool, das jeder in zehn Sekunden nutzen kann, nicht machbar ist. Zweitens messen hardware-instrumentierte Tests eine grundlegend andere Größe (Daumen-zu-Photon), die die Display-Latenz einschließt, die je nach Monitor variiert. Unsere Messung isoliert eine Komponente der Input-Kette, die Polling-Schleifen-Delta, die über Sitzungen und Controller auf derselben Host-Maschine vergleichbar ist. Anderes Werkzeug, anderer Job.

Das 10-Sekunden-Fenster bringt zwei konkurrierende Bedürfnisse in Balance. Lang genug, um bei einem aktiv bedienten Controller 200-500 gültige Deltas zu sammeln (dichte Eingabe liefert dichte Samples); kurz genug, damit Nutzer den Test tatsächlich abschließen, statt zu langweilen und vorzeitig abzubrechen. Beim Testen änderte eine Verlängerung des Fensters auf 30 Sekunden den gemeldeten Mittelwert bei stabilen Controllern um weniger als 5%, die Stichprobengröße ist bereits bei 10 Sekunden groß genug für statistische Signifikanz.

Unter 30 Samples ist der Standardfehler des Mittelwerts so groß, dass die Angabe einer spezifischen Latenzzahl eine trügerische Genauigkeit suggeriert. Beendet der Tester das Fenster mit weniger als 30 gültigen Deltas, verwirft er den Durchlauf stillschweigend und setzt den Nutzer in den Bereitschaftszustand zurück, ein Signal, den Test mit mehr durchgehender Eingabe zu wiederholen. Diese Schwelle entspricht der sampleCount < 30-Prüfung in scoreLatency() aus der Controller Health Score-Bewertungsbibliothek.

Die Gamepad API meldet Gleitkommazahlen für Achsenwerte, die selbst bei einem bewegungslosen Stick von Frame zu Frame leicht schwanken können. Eine sehr kleine Schwelle könnte Sensorschwankungen oder Stick Drift als wiederholte Eingabeänderungen werten, was das beobachtete Intervall nach unten verzerren würde. GPADLAB verwendet daher 0.02 als Implementierungsschwelle, um Rauschen zu reduzieren, aber gleichzeitig auf bewusste Stickbewegungen zu reagieren. Es handelt sich um eine pragmatische Änderungs-Erkennungsschwelle und nicht um einen Hardware-Kalibrierungswert.

Bei dieser Inter-Ereignis-Methode deutet ein Delta über 500 ms meist auf eine lange Pause zwischen benutzergenerierten Zustandsänderungen hin und nicht auf eine dichte Eingabesequenz, die für die Berechnung geeignet wäre. Die Einbeziehung dieser Pausen würde den Durchschnitt stark davon abhängig machen, wie durchgehend der Nutzer die Sticks bewegt oder Tasten gedrückt hat. GPADLAB schließt daher Deltas über 500 ms von dieser Berechnung aus; der cutoff ist eine Eingabe-Sampling-Regel und keine Aussage über die maximal mögliche Hardware-Latenz eines Controllers.

Latenzangaben von Erstentwicklern, wenn sie veröffentlicht werden, können mit Hardware-Setups oder Definitionen gemessen worden sein, die nicht direkt mit dieser browserbasierten Methode vergleichbar sind. GPADLAB-Ergebnisse sind am nützlichsten als Vergleichssignal, wenn derselbe Host, derselbe Browser, dieselben Verbindungsbedingungen, dasselbe Testverfahren und wiederholte Durchläufe verwendet werden. Ein Unterschied zwischen zwei einzelnen Durchläufen sollte nicht automatisch als Latenzunterschied auf Hardware-Ebene behandelt werden, weil requestAnimationFrame-Cadence, Browser-Planung, das Eingabemuster des Nutzers und die Systemlast die beobachteten Werte beeinflussen können.

Ja, das ist die wichtigste Einschränkung. Chrome, Firefox und Safari drosseln die requestAnimationFrame-Callbacks in Hintergrund-Tabs auf 1 fps oder weniger. Ein Test in einem Hintergrund-Tab liefert daher sinnlose Ergebnisse. Der Tester benötigt einen aktiven Vordergrund-Tab. Wir beschränken den Test derzeit noch nicht auf die Dokumentsichtbarkeit, aber diese Prüfung steht auf dem Polish-Backlog. Führe den Test also auf dem aktiven Tab aus und wechsle während des 10-Sekunden-Fensters nicht den Tab.

Verfasst von
Abdul Soomro
Gründer & Lead Diagnostic Engineer
Zuletzt geprüft
Veröffentlicht