From 9a9a13a5532fc77dfc71ff30bdf791dbf2924311 Mon Sep 17 00:00:00 2001 From: vsavkin Date: Fri, 14 Nov 2014 16:51:55 -0800 Subject: [PATCH] feat(change_detection): add benchmarks --- modules/benchmarks/pubspec.yaml | 2 + .../src/change_detection/benchmark.dart | 11 ++++ .../src/change_detection/benchmark.es5 | 3 + .../src/change_detection/bp.conf.es5 | 11 ++++ .../change_detection_benchmark.js | 60 +++++++++++++++++++ .../benchmarks/src/change_detection/main.html | 0 .../src/change_detection/register_system.es5 | 10 ++++ 7 files changed, 97 insertions(+) create mode 100644 modules/benchmarks/src/change_detection/benchmark.dart create mode 100644 modules/benchmarks/src/change_detection/benchmark.es5 create mode 100644 modules/benchmarks/src/change_detection/bp.conf.es5 create mode 100644 modules/benchmarks/src/change_detection/change_detection_benchmark.js create mode 100644 modules/benchmarks/src/change_detection/main.html create mode 100644 modules/benchmarks/src/change_detection/register_system.es5 diff --git a/modules/benchmarks/pubspec.yaml b/modules/benchmarks/pubspec.yaml index a2b1717f97..a1dd3cb711 100644 --- a/modules/benchmarks/pubspec.yaml +++ b/modules/benchmarks/pubspec.yaml @@ -8,3 +8,5 @@ dependencies: path: ../di core: path: ../core + change_detection: + path: ../change_detection diff --git a/modules/benchmarks/src/change_detection/benchmark.dart b/modules/benchmarks/src/change_detection/benchmark.dart new file mode 100644 index 0000000000..6f61aed015 --- /dev/null +++ b/modules/benchmarks/src/change_detection/benchmark.dart @@ -0,0 +1,11 @@ +library benchmark; + +import './change_detection_benchmark.dart' as cdb; +import 'dart:js' as js; + +main () { + js.context['benchmarkSteps'].add(new js.JsObject.jsify({ + "name": "Change Detection", + "fn": new js.JsFunction.withThis((_) => cdb.run()) + })); +} \ No newline at end of file diff --git a/modules/benchmarks/src/change_detection/benchmark.es5 b/modules/benchmarks/src/change_detection/benchmark.es5 new file mode 100644 index 0000000000..db9edb0ed7 --- /dev/null +++ b/modules/benchmarks/src/change_detection/benchmark.es5 @@ -0,0 +1,3 @@ +System.import('benchmarks/change_detection/change_detection_benchmark').then(function (bm) { + window.benchmarkSteps.push({name: 'ChangeDetection', fn: bm.run}); +}, console.log.bind(console)); \ No newline at end of file diff --git a/modules/benchmarks/src/change_detection/bp.conf.es5 b/modules/benchmarks/src/change_detection/bp.conf.es5 new file mode 100644 index 0000000000..b9ff8a4015 --- /dev/null +++ b/modules/benchmarks/src/change_detection/bp.conf.es5 @@ -0,0 +1,11 @@ +module.exports = function(config) { + config.set({ + scripts: [ + {src: '/js/traceur-runtime.js'}, + {src: '/js/es6-module-loader-sans-promises.src.js'}, + {src: '/js/extension-register.js'}, + {src: 'register_system.js'}, + {src: 'benchmark.js'} + ] + }); +}; diff --git a/modules/benchmarks/src/change_detection/change_detection_benchmark.js b/modules/benchmarks/src/change_detection/change_detection_benchmark.js new file mode 100644 index 0000000000..3a8d766311 --- /dev/null +++ b/modules/benchmarks/src/change_detection/change_detection_benchmark.js @@ -0,0 +1,60 @@ +import {ListWrapper, MapWrapper} from 'facade/collection'; +import {Parser} from 'change_detection/parser/parser'; +import {Lexer} from 'change_detection/parser/lexer'; +import {reflector} from 'reflection/reflection'; + +import { + ChangeDetector, + ProtoRecordRange, + WatchGroupDispatcher, +} from 'change_detection/change_detector'; + + +var ITERATIONS = 100000; + +export function run () { + reflector.registerGetters({ + 'a': function(obj){return obj.a}, + 'b': function(obj){return obj.b}, + 'c': function(obj){return obj.c} + }); + + reflector.registerSetters({ + 'a': function(obj, v){return obj.a = v}, + 'b': function(obj, v){return obj.b = v}, + 'c': function(obj, v){return obj.c = v} + }); + + var parser = new Parser(new Lexer()); + var astWithSource = parser.parseBinding('a + b * c'); + + var prr = new ProtoRecordRange(); + prr.addRecordsFromAST(astWithSource.ast, 'memo', false); + + var dispatcher = new DummyDispatcher(); + var rr = prr.instantiate(dispatcher, MapWrapper.create()); + rr.setContext(new Component()); + + var cd = new ChangeDetector(rr); + for (var i = 0; i < ITERATIONS; ++i) { + cd.detectChanges(); + } +} + + +class DummyDispatcher extends WatchGroupDispatcher { + onRecordChange(record, context) { + } +} + +class Component { + a:number; + b:number; + c:number; + + constructor() { + this.a = 1; + this.b = 2; + this.c = 3; + } +} \ No newline at end of file diff --git a/modules/benchmarks/src/change_detection/main.html b/modules/benchmarks/src/change_detection/main.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/benchmarks/src/change_detection/register_system.es5 b/modules/benchmarks/src/change_detection/register_system.es5 new file mode 100644 index 0000000000..388ec08a16 --- /dev/null +++ b/modules/benchmarks/src/change_detection/register_system.es5 @@ -0,0 +1,10 @@ +System.paths = { + 'core/*': '/js/core/lib/*.js', + 'change_detection/*': '/js/change_detection/lib/*.js', + 'facade/*': '/js/facade/lib/*.js', + 'di/*': '/js/di/lib/*.js', + 'rtts_assert/*': '/js/rtts_assert/lib/*.js', + 'test_lib/*': '/js/test_lib/lib/*.js', + 'benchmarks/*': '/js/benchmarks/lib/*.js' +}; +register(System);