@@ -54,8 +54,14 @@ export class SpeedTest {
5454
5555 req . onreadystatechange = ( ) => {
5656 if ( xhr . readyState === 1 ) {
57+ // as soon as connection is opened
5758 // set speed test timeout
5859 timeoutHandler = setTimeout ( finish , this . maxTestTimeSec * 1000 ) ;
60+ // set initial time/size values
61+ if ( ! prevTime ) {
62+ prevTime = Date . now ( ) / 1000 ;
63+ prevSize = 0 ;
64+ }
5965 }
6066 } ;
6167
@@ -76,9 +82,8 @@ export class SpeedTest {
7682 speed = deltaSize / deltaTime ;
7783
7884 if ( deltaTime === 0 || ! Number . isFinite ( speed ) ) {
79- prevTime = time ;
80- prevSize = size ;
81- return ;
85+ // cap to 1Gbps
86+ speed = 1000 ;
8287 }
8388
8489 const canStop = avgCollector . collect ( speed ) ;
@@ -191,7 +196,14 @@ export class SpeedTest {
191196}
192197
193198/**
194- * Helper to average series of values
199+ * Helper to average series of values.
200+ *
201+ * @private
202+ * @param options {Object}
203+ * @param options.avgWindow {number} Window to average (last N measurements)
204+ * @param options.lowJitterThreshold {number} Change of avg considered stable
205+ * @param maxLowJitterConsecutiveMeasures {number} Number of measures
206+ * when avg stays stable to stop collecting more samples
195207 */
196208class AvgCollector {
197209 constructor ( {
@@ -210,6 +222,11 @@ class AvgCollector {
210222 this . name = name ;
211223 }
212224
225+ /**
226+ * Collects one sample for averaging.
227+ * @param value {number} Reported speed
228+ * @returns {boolean } Can stop collecting due to average value stability
229+ */
213230 collect ( value ) {
214231 this . prevAvg = this . avg ;
215232 const avgWindow = Math . min ( this . measuresCount , this . avgWindow ) ;
@@ -227,13 +244,9 @@ class AvgCollector {
227244 this . lowJitterConsecutiveMeasures = 0 ;
228245 }
229246
230- if (
247+ return (
231248 this . lowJitterConsecutiveMeasures >= this . maxLowJitterConsecutiveMeasures
232- ) {
233- return true ;
234- }
235-
236- return false ;
249+ ) ;
237250 }
238251
239252 getAvg ( ) {
0 commit comments