Skip to content

Commit 051342b

Browse files
authored
Fix speed test edge case (#192)
1 parent 6f56b7a commit 051342b

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

src/speed-test.js

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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
*/
196208
class 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

Comments
 (0)