File tree Expand file tree Collapse file tree 2 files changed +19
-8
lines changed Expand file tree Collapse file tree 2 files changed +19
-8
lines changed Original file line number Diff line number Diff line change @@ -27,12 +27,11 @@ const result = await collector.execute({
2727 async shouldAccept ( results : Metrics [ ] ) : Promise < boolean > {
2828 const stats = new MetricsStats ( results ) ;
2929 return true
30- && checkStdDev ( stats , 'lcp' , MetricsStats . lcp , 10 )
31- && checkStdDev ( stats , 'cls' , MetricsStats . cls , 10 )
30+ && checkStdDev ( stats , 'lcp' , MetricsStats . lcp , 30 )
31+ && checkStdDev ( stats , 'cls' , MetricsStats . cls , 0.1 )
3232 && checkStdDev ( stats , 'cpu' , MetricsStats . cpu , 10 )
33- && checkStdDev ( stats , 'memory-mean' , MetricsStats . memoryMean , 10000 )
34- && checkStdDev ( stats , 'memory-max' , MetricsStats . memoryMax , 10000 ) ;
35- ;
33+ && checkStdDev ( stats , 'memory-mean' , MetricsStats . memoryMean , 30 * 1024 )
34+ && checkStdDev ( stats , 'memory-max' , MetricsStats . memoryMax , 100 * 1024 ) ;
3635 } ,
3736} ) ;
3837
Original file line number Diff line number Diff line change @@ -14,17 +14,29 @@ export class MetricsStats {
1414 static memoryMax : NumberProvider = metrics => ss . max ( Array . from ( metrics . memory . snapshots . values ( ) ) ) ;
1515
1616 public mean ( dataProvider : NumberProvider ) : number | undefined {
17- const numbers = this . _items . map ( dataProvider ) ;
17+ const numbers = this . _filteredValues ( dataProvider ) ;
1818 return numbers . length > 0 ? ss . mean ( numbers ) : undefined ;
1919 }
2020
2121 public max ( dataProvider : NumberProvider ) : number | undefined {
22- const numbers = this . _items . map ( dataProvider ) ;
22+ const numbers = this . _filteredValues ( dataProvider ) ;
2323 return numbers . length > 0 ? ss . max ( numbers ) : undefined ;
2424 }
2525
2626 public stddev ( dataProvider : NumberProvider ) : number | undefined {
27- const numbers = this . _items . map ( dataProvider ) ;
27+ const numbers = this . _filteredValues ( dataProvider ) ;
2828 return numbers . length > 0 ? ss . standardDeviation ( numbers ) : undefined ;
2929 }
30+
31+ // See https://en.wikipedia.org/wiki/Interquartile_range#Outliers for details on filtering.
32+ private _filteredValues ( dataProvider : NumberProvider ) : number [ ] {
33+ const numbers = this . _items . map ( dataProvider ) ;
34+ numbers . sort ( ( a , b ) => a - b )
35+
36+ const q1 = ss . quantileSorted ( numbers , 0.25 ) ;
37+ const q3 = ss . quantileSorted ( numbers , 0.75 ) ;
38+ const iqr = q3 - q1
39+
40+ return numbers . filter ( num => num >= ( q1 - 1.5 * iqr ) && num <= ( q3 + 1.5 * iqr ) )
41+ }
3042}
You can’t perform that action at this time.
0 commit comments