Skip to content

Commit b2b41ab

Browse files
committed
separate platform/benchmark results
- separate results by platforms and benchmarks - correctly generate `table.html` with missing results - use geometric mean and standard deviation
1 parent d4fc4f5 commit b2b41ab

File tree

4 files changed

+196
-119
lines changed

4 files changed

+196
-119
lines changed

webdriver-java/makeTable.js

Lines changed: 66 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,89 @@
11
"use strict";
22

3-
var _ = require('lodash');
4-
var fs = require('fs');
5-
6-
var files = fs.readdirSync("./results")
7-
.filter(file => file.endsWith('.txt'));
3+
const _ = require('lodash');
4+
const dots = require('dot').process({
5+
path: './'
6+
});
7+
const fs = require('fs');
88

9-
let results = new Map();
9+
let results = {};
1010
let frameworks = [];
11+
let benchmarks = [];
1112

12-
files.map(f => {return {name: f, data: fs.readFileSync("./results/"+f, {encoding:"utf-8"})};})
13-
.forEach(({name, data}) => {
14-
let n = name.substring(0,name.length-4);
15-
results.set(n, Function("return "+data)());
16-
frameworks.push(n);
17-
});
13+
fs.readdirSync('./results').filter(file => file.endsWith('.json')).forEach(name => {
14+
let data = JSON.parse(fs.readFileSync('./results/' + name, {
15+
encoding:'utf-8'
16+
}));
17+
18+
frameworks.push(data.framework);
19+
benchmarks.push(data.benchmark);
20+
21+
results[data.framework] = results[data.framework] || {};
22+
results[data.framework][data.benchmark] = data;
23+
});
1824

19-
let benchmarks = results.values().next().value.results.map(r => r.benchmark);
25+
frameworks = _.uniq(frameworks);
26+
benchmarks = _.uniq(benchmarks);
2027

21-
let getValue = (framework, benchmark) => results.get(framework).results.find(r => r.benchmark === benchmark).avg;
28+
let getValue = (framework, benchmark) => results[framework] && results[framework][benchmark];
2229

23-
var dots = require('dot').process({
24-
path: './'
25-
});
26-
27-
var factors = frameworks.map(f => 1.0);
30+
let factors = frameworks.map(f => 1.0);
2831

29-
var benches = [];
32+
let benches = [];
3033
benchmarks.forEach(benchmark => {
31-
var bench = {
34+
let bench = {
3235
name: benchmark,
3336
tests: []
3437
};
3538

36-
var values = [];
39+
let values = [];
3740
frameworks.forEach(framework => {
3841
values.push(getValue(framework, benchmark));
3942
});
40-
var sorted = values.slice(0).sort(function(a, b) {
41-
return a - b;
42-
});
43-
var min = sorted[0];
44-
var max = sorted[sorted.length - 1];
4543

46-
var top1 = min * 1.33;
47-
var top3 = min * 2.33;
48-
49-
while(top1 >= max) {
50-
top1 *= 0.8;
51-
top3 *= 0.8;
52-
}
53-
while(top3 >= max) {
54-
top3 *= 0.8;
44+
let sorted = _.compact(values).map(data => {
45+
return data.geometricMean;
46+
}).sort((a, b) => a - b);
47+
48+
let min, top1, top3;
49+
50+
if(sorted.length) {
51+
min = sorted[0];
52+
53+
if(sorted.length === 1) {
54+
top1 = min;
55+
}
56+
else {
57+
let min = sorted[1];
58+
let max = sorted[sorted.length - 1];
59+
60+
top1 = min * 1.33;
61+
top3 = min * 2.33;
62+
63+
while(top1 >= max) {
64+
top1 *= 0.8;
65+
top3 *= 0.8;
66+
}
67+
while(top3 >= max) {
68+
top3 *= 0.8;
69+
}
70+
}
5571
}
5672

5773
_.forEach(values, function(value, idx) {
58-
let factor = Math.max(16,value)/Math.max(16,min);
59-
factors[idx] = factors[idx] * factor;
60-
bench.tests.push({
61-
value,
62-
factor : factor.toPrecision(3),
63-
class: value <= top1 ? 'top1' : value <= top3 ? 'top3' : 'top5'
64-
});
74+
if(value) {
75+
let factor = Math.max(16,value.geometricMean)/Math.max(16,min);
76+
factors[idx] = factors[idx] * factor;
77+
bench.tests.push({
78+
mean: value.geometricMean,
79+
deviation: value.standardDeviation,
80+
factor : factor.toPrecision(3),
81+
class: value.geometricMean <= top1 ? 'top1' : value.geometricMean <= top3 ? 'top3' : 'top5'
82+
});
83+
}
84+
else {
85+
bench.tests.push(null);
86+
}
6587
})
6688
benches.push(bench);
6789
});
@@ -72,7 +94,7 @@ let geomMeans = factors.map(f => {
7294
});
7395

7496
fs.writeFileSync('./table.html', dots.table({
75-
frameworks: [''].concat(frameworks).map(framework => framework.replace('-v', ' v').replace('/dist', '')),
97+
frameworks: [''].concat(frameworks).map(framework => framework.replace('-v', ' v')),
7698
benches,
7799
geomMeans
78100
}), {

webdriver-java/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@
3838
<artifactId>guava</artifactId>
3939
<version>19.0</version>
4040
</dependency>
41+
<dependency>
42+
<groupId>org.apache.commons</groupId>
43+
<artifactId>commons-math3</artifactId>
44+
<version>3.6.1</version>
45+
</dependency>
4146
</dependencies>
4247

4348
<build>

0 commit comments

Comments
 (0)