Skip to content

Commit 5c064c1

Browse files
committed
feat(perf): autoscale benchmarks depending on the browser.
1 parent 561ad3a commit 5c064c1

File tree

11 files changed

+69
-33
lines changed

11 files changed

+69
-33
lines changed

modules/benchmarks/e2e_test/change_detection_perf.es6

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('ng2 change detection benchmark', function () {
1212
buttons: ['#ng2DetectChanges'],
1313
id: 'ng2.changeDetection',
1414
params: [{
15-
name: 'iterations', value: 500000
15+
name: 'iterations', value: 500000, scale: 'linear'
1616
}]
1717
});
1818
});
@@ -23,7 +23,7 @@ describe('ng2 change detection benchmark', function () {
2323
buttons: ['#baselineDetectChanges'],
2424
id: 'baseline.changeDetection',
2525
params: [{
26-
name: 'iterations', value: 500000
26+
name: 'iterations', value: 500000, scale: 'linear'
2727
}]
2828
});
2929
});

modules/benchmarks/e2e_test/compiler_perf.es6

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('ng2 compiler benchmark', function () {
1212
buttons: ['#compileWithBindings'],
1313
id: 'ng2.compile.withBindings',
1414
params: [{
15-
name: 'elementCount', selector: '#elementCount', value: 150
15+
name: 'elementCount', selector: '#elementCount', value: 150, scale: 'linear'
1616
}]
1717
});
1818
});
@@ -23,7 +23,7 @@ describe('ng2 compiler benchmark', function () {
2323
buttons: ['#compileNoBindings'],
2424
id: 'ng2.compile.noBindings',
2525
params: [{
26-
name: 'elementCount', value: 150
26+
name: 'elementCount', value: 150, scale: 'linear'
2727
}]
2828
});
2929
});

modules/benchmarks/e2e_test/di_perf.es6

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('ng2 di benchmark', function () {
1212
buttons: ['#getByToken'],
1313
id: 'ng2.di.getByToken',
1414
params: [{
15-
name: 'iterations', value: 20000
15+
name: 'iterations', value: 20000, scale: 'linear'
1616
}]
1717
});
1818
});
@@ -23,7 +23,7 @@ describe('ng2 di benchmark', function () {
2323
buttons: ['#getByKey'],
2424
id: 'ng2.di.getByKey',
2525
params: [{
26-
name: 'iterations', value: 20000
26+
name: 'iterations', value: 20000, scale: 'linear'
2727
}]
2828
});
2929
});
@@ -34,7 +34,7 @@ describe('ng2 di benchmark', function () {
3434
buttons: ['#getChild'],
3535
id: 'ng2.di.getChild',
3636
params: [{
37-
name: 'iterations', value: 20000
37+
name: 'iterations', value: 20000, scale: 'linear'
3838
}]
3939
});
4040
});
@@ -45,7 +45,7 @@ describe('ng2 di benchmark', function () {
4545
buttons: ['#instantiate'],
4646
id: 'ng2.di.instantiate',
4747
params: [{
48-
name: 'iterations', value: 10000
48+
name: 'iterations', value: 10000, scale: 'linear'
4949
}]
5050
});
5151
});

modules/benchmarks/e2e_test/element_injector_perf.es6

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('ng2 element injector benchmark', function () {
1212
buttons: ['#instantiate'],
1313
id: 'ng2.elementInjector.instantiate',
1414
params: [{
15-
name: 'iterations', value: 20000
15+
name: 'iterations', value: 20000, scale: 'linear'
1616
}]
1717
});
1818
});
@@ -23,7 +23,7 @@ describe('ng2 element injector benchmark', function () {
2323
buttons: ['#instantiateDirectives'],
2424
id: 'ng2.elementInjector.instantiateDirectives',
2525
params: [{
26-
name: 'iterations', value: 20000
26+
name: 'iterations', value: 20000, scale: 'linear'
2727
}]
2828
});
2929
});

modules/benchmarks/e2e_test/selector_perf.es6

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('ng2 selector benchmark', function () {
1212
buttons: ['#parse'],
1313
id: 'ng2.selector.parse',
1414
params: [{
15-
name: 'selectors', value: 10000
15+
name: 'selectors', value: 10000, scale: 'linear'
1616
}]
1717
});
1818
});
@@ -22,7 +22,7 @@ describe('ng2 selector benchmark', function () {
2222
buttons: ['#addSelectable'],
2323
id: 'ng2.selector.addSelectable',
2424
params: [{
25-
name: 'selectors', value: 10000
25+
name: 'selectors', value: 10000, scale: 'linear'
2626
}]
2727
});
2828
});
@@ -33,7 +33,7 @@ describe('ng2 selector benchmark', function () {
3333
buttons: ['#match'],
3434
id: 'ng2.selector.match',
3535
params: [{
36-
name: 'selectors', value: 10000
36+
name: 'selectors', value: 10000, scale: 'linear'
3737
}]
3838
});
3939
});

modules/benchmarks/e2e_test/tree_perf.es6

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('ng2 tree benchmark', function () {
1212
buttons: ['#ng2DestroyDom', '#ng2CreateDom'],
1313
id: 'ng2.tree',
1414
params: [{
15-
name: 'depth', value: 9
15+
name: 'depth', value: 9, scale: 'log2'
1616
}]
1717
});
1818
});
@@ -23,7 +23,7 @@ describe('ng2 tree benchmark', function () {
2323
buttons: ['#baselineDestroyDom', '#baselineCreateDom'],
2424
id: 'baseline.tree',
2525
params: [{
26-
name: 'depth', value: 9
26+
name: 'depth', value: 9, scale: 'log2'
2727
}]
2828
});
2929
});

modules/benchmarks_external/e2e_test/compiler_perf.es6

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('ng1.x compiler benchmark', function () {
1212
buttons: ['#compileWithBindings'],
1313
id: 'ng1.compile.withBindings',
1414
params: [{
15-
name: 'elementCount', value: 150
15+
name: 'elementCount', value: 150, scale: 'linear'
1616
}]
1717
});
1818
});
@@ -23,7 +23,7 @@ describe('ng1.x compiler benchmark', function () {
2323
buttons: ['#compileNoBindings'],
2424
id: 'ng1.compile.noBindings',
2525
params: [{
26-
name: 'elementCount', value: 150
26+
name: 'elementCount', value: 150, scale: 'linear'
2727
}]
2828
});
2929
});

modules/benchmarks_external/e2e_test/largetable_perf.es6

+4-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@ describe('ng1.x largetable benchmark', function () {
2424
id: 'ng1.largetable.' + benchmarkType,
2525
params: [{
2626
name: 'columns',
27-
value: 100
27+
value: 100,
28+
scale: 'sqrt'
2829
},{
2930
name: 'rows',
30-
value: 20
31+
value: 20,
32+
scale: 'sqrt'
3133
},{
3234
name: 'benchmarkType',
3335
value: benchmarkType

modules/benchmarks_external/e2e_test/tree_perf.es6

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('ng1.x tree benchmark', function () {
1212
buttons: ['#destroyDom', '#createDom'],
1313
id: 'ng1.tree',
1414
params: [{
15-
name: 'depth', value: 9
15+
name: 'depth', value: 9, scale: 'log2'
1616
}]
1717
});
1818
});

modules/e2e_test_lib/e2e_test/perf_util.es6

+46-12
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,53 @@ module.exports = {
77
};
88

99
function runClickBenchmark(config) {
10-
var url = encodeURI(config.url + '?' + config.params.map(function(param) {
11-
return param.name + '=' + param.value;
12-
}).join('&'));
13-
browser.get(url);
14-
var buttons = config.buttons.map(function(selector) {
15-
return $(selector);
10+
var globalParams = browser.params;
11+
getScaleFactor(globalParams.benchmark.scaling).then(function(scaleFactor) {
12+
var params = config.params.map(function(param) {
13+
return {
14+
name: param.name, value: applyScaleFactor(param.value, scaleFactor, param.scale)
15+
}
16+
});
17+
var benchmarkConfig = Object.create(globalParams.benchmark);
18+
benchmarkConfig.id = globalParams.lang+'.'+config.id;
19+
benchmarkConfig.params = params;
20+
benchmarkConfig.scaleFactor = scaleFactor;
21+
22+
var url = encodeURI(config.url + '?' + params.map(function(param) {
23+
return param.name + '=' + param.value;
24+
}).join('&'));
25+
browser.get(url);
26+
var buttons = config.buttons.map(function(selector) {
27+
return $(selector);
28+
});
29+
benchpress.runBenchmark(benchmarkConfig, function() {
30+
buttons.forEach(function(button) {
31+
button.click();
32+
});
33+
});
1634
});
17-
var benchmarkConfig = Object.create(browser.params.benchmark);
18-
benchmarkConfig.id = browser.params.lang+'.'+config.id;
19-
benchmarkConfig.params = config.params;
20-
benchpress.runBenchmark(benchmarkConfig, function() {
21-
buttons.forEach(function(button) {
22-
button.click();
35+
}
36+
37+
function getScaleFactor(possibleScalings) {
38+
return browser.executeScript('return navigator.userAgent').then(function(userAgent) {
39+
var scaleFactor = 1;
40+
possibleScalings.forEach(function(entry) {
41+
if (userAgent.match(entry.userAgent)) {
42+
scaleFactor = entry.value;
43+
}
2344
});
45+
return scaleFactor;
2446
});
47+
}
48+
49+
function applyScaleFactor(value, scaleFactor, method) {
50+
if (method === 'log2') {
51+
return value + Math.log2(scaleFactor);
52+
} else if (method === 'sqrt') {
53+
return value * Math.sqrt(scaleFactor);
54+
} else if (method === 'linear') {
55+
return value * scaleFactor;
56+
} else {
57+
return value;
58+
}
2559
}

protractor-perf-shared.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ config.params = {
2727
],
2828
cloudReporter: cloudReporterConfig,
2929
scaling: [{
30-
browserName: /chrome/, value: 0.5
30+
userAgent: /Android/, value: 0.125
3131
}]
3232
}
3333
};

0 commit comments

Comments
 (0)