Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit bd17bbe

Browse files
committed
feat(benchmark): add confidence and stability info to averages
1 parent 26f7def commit bd17bbe

File tree

3 files changed

+57
-16
lines changed

3 files changed

+57
-16
lines changed

benchmark/web/bp.js

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,19 @@ bp.runState = {
1313
timesPerAction: {}
1414
};
1515

16+
bp.Statistics.getStabilityOfSample = function (sample, confidenceRange) {
17+
var inRange = 0;
18+
sample.forEach(function(x) {
19+
inRange += x <= confidenceRange[1] && x >= confidenceRange[0] ? 1 : 0;
20+
})
21+
return Math.round((inRange / sample.length) * 100) / 100;
22+
23+
};
24+
1625
bp.Statistics.getConfidenceRange = function(mean, confidenceInterval) {
1726
return [
18-
mean - confidenceInterval,
19-
mean + confidenceInterval
27+
Math.round((mean - confidenceInterval) * 100) / 100,
28+
Math.round((mean + confidenceInterval) * 100) / 100
2029
];
2130
};
2231

@@ -174,20 +183,18 @@ bp.runAllTests = function (done) {
174183
}
175184

176185
bp.generateReportModel = function (rawModel) {
177-
return {
178-
name: rawModel.name,
179-
avg: {
180-
time: ('' + rawModel.avg.time).substr(0,6),
181-
gcTime: ('' + rawModel.avg.gcTime).substr(0,6),
182-
garbage: ('' + rawModel.avg.garbage).substr(0,6),
183-
retained: ('' + rawModel.avg.retained).substr(0,6),
184-
combinedTime: ('' + (rawModel.avg.time + rawModel.avg.gcTime)).substr(0,6)
185-
},
186-
times: rawModel.times.join('<br>'),
187-
gcTimes: rawModel.gcTimes.join('<br>'),
188-
garbageTimes: rawModel.garbageTimes.join('<br>'),
189-
retainedTimes: rawModel.retainedTimes.join('<br>')
186+
rawModel.avg = {
187+
time: ('' + rawModel.avg.time).substr(0,6),
188+
gcTime: ('' + rawModel.avg.gcTime).substr(0,6),
189+
garbage: ('' + rawModel.avg.garbage).substr(0,6),
190+
retained: ('' + rawModel.avg.retained).substr(0,6),
191+
combinedTime: ('' + (rawModel.avg.time + rawModel.avg.gcTime)).substr(0,6)
190192
};
193+
rawModel.times = rawModel.times.join('<br>'),
194+
rawModel.gcTimes = rawModel.gcTimes.join('<br>'),
195+
rawModel.garbageTimes = rawModel.garbageTimes.join('<br>'),
196+
rawModel.retainedTimes = rawModel.retainedTimes.join('<br>')
197+
return rawModel;
191198
};
192199

193200
bp.generateReportPartial = function(model) {
@@ -261,7 +268,9 @@ bp.calcStats = function() {
261268
retainedTimeForStep = bp.runState.recentRetainedMemoryPerStep[stepName],
262269
tpa = bp.getTimesPerAction(stepName),
263270
reportModel,
264-
avg;
271+
avg,
272+
timesConfidenceInterval,
273+
timesConfidenceRange;
265274

266275
bp.updateTimes(tpa, tpa.nextEntry, 'gcTimes', gcTimeForStep);
267276
bp.updateTimes(tpa, tpa.nextEntry, 'garbageTimes', garbageTimeForStep / 1e3);
@@ -275,10 +284,22 @@ bp.calcStats = function() {
275284
tpa.gcTimes,
276285
tpa.garbageTimes,
277286
tpa.retainedTimes);
287+
288+
timesConfidenceInterval = bp.Statistics.calculateConfidenceInterval(
289+
bp.Statistics.calculateStandardDeviation(tpa.times),
290+
tpa.times.length
291+
);
292+
timesConfidenceRange = bp.Statistics.getConfidenceRange(
293+
avg.time,
294+
timesConfidenceInterval
295+
);
278296
reportModel = bp.generateReportModel({
279297
name: stepName,
280298
avg: avg,
281299
times: tpa.fmtTimes,
300+
timesConfidenceInterval: timesConfidenceInterval,
301+
timesConfidenceRange: timesConfidenceRange,
302+
timesStability: bp.Statistics.getStabilityOfSample(tpa.times, timesConfidenceRange) * 100,
282303
gcTimes: tpa.fmtGcTimes,
283304
garbageTimes: tpa.fmtGarbageTimes,
284305
retainedTimes: tpa.fmtRetainedTimes

benchmark/web/bp.spec.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,18 @@ describe('bp', function() {
5555
it('should return an array of low and high confidence range', function() {
5656
expect(bp.Statistics.getConfidenceRange(100, 1.5)).toEqual([98.5,101.5]);
5757
});
58+
59+
60+
it('should round values to 2 decimal points', function() {
61+
expect(bp.Statistics.getConfidenceRange(100,1.111111)).toEqual([100-1.11,100+1.11]);
62+
})
63+
});
64+
65+
66+
describe('.getStabilityOfSample()', function() {
67+
it('should return the percentage of samples that fall within the provided range', function() {
68+
expect(bp.Statistics.getStabilityOfSample([0,5,5,10],[5,6])).toBe(0.5);
69+
});
5870
});
5971
});
6072

benchmark/web/tree.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@
7070
<td class="average">
7171
test:<%= avg.time %>ms
7272
<br>
73+
times within range: <%= timesStability %>%
74+
<br>
75+
confidence interval: <%= timesConfidenceInterval %>
76+
<br>
77+
confidence range:
78+
<%= timesConfidenceRange[0] %> -
79+
<%= timesConfidenceRange[1] %>
80+
<br>
7381
gc:<%= avg.gcTime %>ms
7482
<br>
7583
combined: <%= avg.combinedTime %>ms

0 commit comments

Comments
 (0)