diff --git a/modules/benchmarks/e2e_test/di_perf.es6 b/modules/benchmarks/e2e_test/di_perf.es6 index eeee8d600b..04f14522ba 100644 --- a/modules/benchmarks/e2e_test/di_perf.es6 +++ b/modules/benchmarks/e2e_test/di_perf.es6 @@ -62,4 +62,22 @@ describe('ng2 di benchmark', function () { }).then(done, done.fail); }); + /** + * This benchmark measures the cost of creating a new injector with a mix + * of binding types: Type, unresolved, unflattened. + */ + it('should log the stats for createVariety', function(done) { + perfUtil.runClickBenchmark({ + url: URL, + buttons: ['#createVariety'], + id: 'ng2.di.createVariety', + params: [{ + name: 'iterations', value: 10000, scale: 'linear' + }], + microMetrics: { + 'injectAvg': 'avg time for createVariety (in ms)' + } + }).then(done, done.fail); + }); + }); diff --git a/modules/benchmarks/src/di/di_benchmark.html b/modules/benchmarks/src/di/di_benchmark.html index 0a7daa2627..07fb0982b4 100644 --- a/modules/benchmarks/src/di/di_benchmark.html +++ b/modules/benchmarks/src/di/di_benchmark.html @@ -16,6 +16,7 @@ + $SCRIPTS$ diff --git a/modules/benchmarks/src/di/di_benchmark.js b/modules/benchmarks/src/di/di_benchmark.js index 98815eff56..c8ee1d2b77 100644 --- a/modules/benchmarks/src/di/di_benchmark.js +++ b/modules/benchmarks/src/di/di_benchmark.js @@ -1,4 +1,4 @@ -import {Injectable, Injector, Key} from "angular2/di"; +import {Injectable, Injector, Key, bind} from "angular2/di"; import {reflector} from 'angular2/src/reflection/reflection'; import {ReflectionCapabilities} from 'angular2/src/reflection/reflection_capabilities'; import {getIntParameter, bindAction, microBenchmark} from 'angular2/src/test_lib/benchmark_util'; @@ -27,7 +27,14 @@ export function main() { createChild([]). createChild([]); - function getByToken () { + var variousBindings = [ + A, + bind(B).toClass(C), + [D, [E]], + bind(F).toValue(6) + ]; + + function getByToken() { for (var i = 0; i < iterations; ++i) { injector.get(D); injector.get(E); @@ -40,20 +47,29 @@ export function main() { } } - function getChild () { + function getChild() { for (var i = 0; i < iterations; ++i) { childInjector.get(D); childInjector.get(E); } } - function instantiate () { + function instantiate() { for (var i = 0; i < iterations; ++i) { var child = injector.createChild([E]); child.get(E); } } + /** + * Creates an injector with a variety of binding types. + */ + function createVariety() { + for (var i = 0; i < iterations; ++i) { + new Injector(variousBindings); + } + } + bindAction( '#getByToken', () => microBenchmark('injectAvg', iterations, getByToken) @@ -70,6 +86,10 @@ export function main() { '#instantiate', () => microBenchmark('injectAvg', iterations, instantiate) ); + bindAction( + '#createVariety', + () => microBenchmark('injectAvg', iterations, createVariety) + ); } @@ -108,3 +128,10 @@ class E { count++; } } + +@Injectable() +class F { + constructor(e:E, d:D) { + count++; + } +}