feat(perf): autoscale benchmarks depending on the browser.

This commit is contained in:
Tobias Bosch
2015-01-15 15:14:54 -08:00
parent 561ad3a68c
commit 5c064c19e2
11 changed files with 70 additions and 34 deletions
+47 -13
View File
@@ -7,19 +7,53 @@ module.exports = {
};
function runClickBenchmark(config) {
var url = encodeURI(config.url + '?' + config.params.map(function(param) {
return param.name + '=' + param.value;
}).join('&'));
browser.get(url);
var buttons = config.buttons.map(function(selector) {
return $(selector);
});
var benchmarkConfig = Object.create(browser.params.benchmark);
benchmarkConfig.id = browser.params.lang+'.'+config.id;
benchmarkConfig.params = config.params;
benchpress.runBenchmark(benchmarkConfig, function() {
buttons.forEach(function(button) {
button.click();
var globalParams = browser.params;
getScaleFactor(globalParams.benchmark.scaling).then(function(scaleFactor) {
var params = config.params.map(function(param) {
return {
name: param.name, value: applyScaleFactor(param.value, scaleFactor, param.scale)
}
});
var benchmarkConfig = Object.create(globalParams.benchmark);
benchmarkConfig.id = globalParams.lang+'.'+config.id;
benchmarkConfig.params = params;
benchmarkConfig.scaleFactor = scaleFactor;
var url = encodeURI(config.url + '?' + params.map(function(param) {
return param.name + '=' + param.value;
}).join('&'));
browser.get(url);
var buttons = config.buttons.map(function(selector) {
return $(selector);
});
benchpress.runBenchmark(benchmarkConfig, function() {
buttons.forEach(function(button) {
button.click();
});
});
});
}
function getScaleFactor(possibleScalings) {
return browser.executeScript('return navigator.userAgent').then(function(userAgent) {
var scaleFactor = 1;
possibleScalings.forEach(function(entry) {
if (userAgent.match(entry.userAgent)) {
scaleFactor = entry.value;
}
});
return scaleFactor;
});
}
function applyScaleFactor(value, scaleFactor, method) {
if (method === 'log2') {
return value + Math.log2(scaleFactor);
} else if (method === 'sqrt') {
return value * Math.sqrt(scaleFactor);
} else if (method === 'linear') {
return value * scaleFactor;
} else {
return value;
}
}