Skip to content

Commit 0441dea

Browse files
committed
feat(benchpress): add benchpress config and flatmap spec
1 parent fa06dd5 commit 0441dea

File tree

4 files changed

+145
-66
lines changed

4 files changed

+145
-66
lines changed

perf/flatMap/flatmap.spec.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
var benchpress = require('benchpress');
2+
var runner = new benchpress.Runner([
3+
benchpress.SeleniumWebDriverAdapter.PROTRACTOR_BINDINGS,
4+
benchpress.Validator.bindTo(benchpress.RegressionSlopeValidator),
5+
benchpress.bind(benchpress.RegressionSlopeValidator.SAMPLE_SIZE).toValue(10),
6+
benchpress.bind(benchpress.RegressionSlopeValidator.METRIC).toValue('script'),
7+
benchpress.bind(benchpress.Options.FORCE_GC).toValue(false)
8+
]);
9+
10+
describe('flatMap comparison', function() {
11+
it('should be fast in Rx3', function(done) {
12+
browser.ignoreSynchronization = true;
13+
browser.get('http://localhost:8080/perf/flatMap/index.html');
14+
runner.sample({
15+
id: 'flatMap Rx3',
16+
execute: function() {
17+
$('#rx-3-flatmap').click();
18+
}
19+
}).then(done, done.fail);
20+
});
21+
22+
23+
it('should be fast in Rx2', function (done) {
24+
browser.ignoreSynchronization = true;
25+
browser.get('http://localhost:8080/perf/flatMap/index.html');
26+
runner.sample({
27+
id: 'flatMap Rx2',
28+
execute: function() {
29+
$('#rx-2-flatmap').click();
30+
}
31+
}).then(done, done.fail);
32+
});
33+
});

perf/flatMap/index.html

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
<head>
44
<meta charset="UTF-8">
55
<title>RxJS 3 Perf Tests</title>
6+
<script src="../../dist/global/rx.js"></script>
7+
<script src="../../node_modules/rx/dist/rx.all.js"></script>
68

7-
<script src="../../assets/requirejs/require.js"></script>
8-
<script src="perf.js"></script>
99
</head>
1010
<body>
1111
<a href="../">perf index</a>
12+
<button id="rx-3-flatmap">Rx3 FlatMap Test</button>
13+
<button id="rx-2-flatmap">Rx2 FlatMap Test</button>
14+
<script src="perf.js"></script>
1215
</body>
1316
</html>

perf/flatMap/perf.js

+58-64
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,71 @@
1+
var noop = function(){};
12

2-
require({
3-
baseUrl: '../../',
4-
paths: {
5-
'benchmark': '../../assets/benchmark/benchmark',
6-
'platform': '../../assets/platform/platform',
7-
'lodash': '../../assets/lodash',
8-
'rx2': '../../assets/rxjs2/rx',
9-
'perf-helpers': '../perf/perf-helpers'
3+
var Rx3TestObservable = new Observable(function(generator) {
4+
debugger
5+
var i = 1000;
6+
while (i--) {
7+
generator.next(i);
108
}
11-
},
12-
['benchmark', 'src/observable/observable', 'src/subscription/subscription', 'rx2', 'perf-helpers'],
13-
function(Benchmark, observable, Subscription, Rx, helpers) {
14-
var Observable = observable.Observable;
15-
var printLn = helpers.printLn;
169

17-
printLn('starting tests');
18-
var suite = new Benchmark.Suite;
10+
generator.return();
1911

12+
//HACK: junk subscription
13+
return new Subscription(noop);
14+
});
2015

21-
var noop = function(){};
22-
16+
var Rx2TestObservable = Rx.Observable.create(function(observer) {
17+
var i = 1000;
18+
while (i--) {
19+
observer.onNext(i);
20+
}
2321

24-
var testObservable = new Observable(function(generator) {
25-
generator.next(42);
26-
generator.return();
22+
observer.onCompleted();
2723

28-
//HACK: junk subscription
29-
return new Subscription(noop);
30-
});
24+
//HACK: junk subscription
25+
return new noop;
26+
});
3127

32-
var projection = function(x) {
33-
return new Observable(function(generator) {
34-
var tid = setTimeout(function(){
35-
generator.next(x + '!!!');
36-
generator.return();
37-
});
38-
return new Subscription(function(){
39-
clearTimeout(tid);
40-
});
28+
var projectionRx3 = function(x) {
29+
debugger
30+
return new Observable(function(generator) {
31+
var tid = setTimeout(function(){
32+
console.log('timeout');
33+
generator.next(x + '!!!');
34+
generator.return();
35+
});
36+
return new Subscription(function(){
37+
clearTimeout(tid);
4138
});
42-
};
39+
});
40+
};
4341

44-
var rx2TestObservable = Rx.Observable.just(42);
42+
var projectionRx2 = function(x) {
43+
return Rx.Observable.create(function(observer) {
44+
var tid = setTimeout(function(){
45+
observer.onNext(x + '!!!');
46+
observer.onCompleted();
47+
}, 0);
4548

46-
suite.
47-
add('Observable.flatMap', function(d) {
48-
testObservable.flatMap(projection).observer({
49-
next: noop,
50-
error: noop,
51-
return: noop
52-
});
53-
}).
54-
add('RxJS 2 Observable.flatMap', function(d) {
55-
rx2TestObservable.flatMap(function(x) {
56-
return Observable.create(function(observer) {
57-
var tid = setTimeout(function(){
58-
observer.onNext(x + '!!!');
59-
observer.onCompleted();
60-
}, 0);
49+
return function(){
50+
clearTimeout(tid);
51+
}
52+
});
53+
};
6154

62-
return function(){
63-
clearTimeout(tid);
64-
}
65-
});
66-
}).forEach(noop, noop, noop);
67-
})
55+
var rx3FlatMap = document.querySelector('#rx-3-flatmap');
56+
var rx2FlatMap = document.querySelector('#rx-2-flatmap');
57+
rx3FlatMap.addEventListener('click', function() {
58+
debugger
59+
console.log('rx3 clicked');
60+
Rx3TestObservable.flatMap(projectionRx3).observer({
61+
next: noop,
62+
error: noop,
63+
return: noop
64+
});
65+
});
6866

69-
suite.
70-
on('cycle', function(event) {
71-
printLn(String(event.target));
72-
}).
73-
on('complete', function() {
74-
printLn('Fastest is ' + this.filter('fastest').pluck('name'));
75-
})
76-
.run({ async: true });
77-
});
67+
rx2FlatMap.addEventListener('click', function() {
68+
console.log('rx2 clicked');
69+
Rx2TestObservable.flatMap(projectionRx2).
70+
forEach(noop, noop, noop);
71+
});

protractor.conf.js

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
var httpServer = require('http-server');
2+
3+
exports.config = {
4+
directConnect: true,
5+
6+
capabilities: {
7+
browserName: 'chrome',
8+
chromeOptions: {
9+
//Important for benchpress to get timeline data from the browser
10+
'args': ['--js-flags=--expose-gc'],
11+
'perfLoggingPrefs': {
12+
'traceCategories': 'blink.console,disabled-by-default-devtools.timeline'
13+
}
14+
},
15+
loggingPrefs: {
16+
performance: 'ALL'
17+
}
18+
},
19+
20+
specs: ['perf/**/*.spec.js'],
21+
framework: 'jasmine2',
22+
23+
beforeLaunch: function () {
24+
httpServer.createServer({
25+
showDir: false
26+
}).listen('8080', 'localhost');
27+
},
28+
29+
onPrepare: function() {
30+
// open a new browser for every benchmark
31+
var originalBrowser = browser;
32+
var _tmpBrowser;
33+
beforeEach(function() {
34+
global.browser = originalBrowser.forkNewDriverInstance();
35+
global.element = global.browser.element;
36+
global.$ = global.browser.$;
37+
global.$$ = global.browser.$$;
38+
});
39+
afterEach(function() {
40+
global.browser.quit();
41+
global.browser = originalBrowser;
42+
});
43+
},
44+
45+
jasmineNodeOpts: {
46+
showColors: true,
47+
defaultTimeoutInterval: 30000
48+
},
49+
};

0 commit comments

Comments
 (0)