1 | import {bind, provide, Binding, Provider, Injector, OpaqueToken} from 'angular2/src/core/di';
|
2 | import {StringMapWrapper} from 'angular2/src/facade/collection';
|
3 | import {PromiseWrapper} from 'angular2/src/facade/async';
|
4 |
|
5 | import {Metric} from '../metric';
|
6 |
|
7 | export class MultiMetric extends Metric {
|
8 | static createBindings(childTokens: any[]): Provider[] {
|
9 | return [
|
10 | bind(_CHILDREN)
|
11 | .toFactory((injector: Injector) => childTokens.map(token => injector.get(token)),
|
12 | [Injector]),
|
13 | bind(MultiMetric).toFactory(children => new MultiMetric(children), [_CHILDREN])
|
14 | ];
|
15 | }
|
16 |
|
17 | constructor(private _metrics: Metric[]) { super(); }
|
18 |
|
19 | |
20 |
|
21 |
|
22 | beginMeasure(): Promise<any> {
|
23 | return PromiseWrapper.all(this._metrics.map(metric => metric.beginMeasure()));
|
24 | }
|
25 |
|
26 | |
27 |
|
28 |
|
29 |
|
30 |
|
31 | endMeasure(restart: boolean): Promise<{[key: string]: any}> {
|
32 | return PromiseWrapper.all(this._metrics.map(metric => metric.endMeasure(restart)))
|
33 | .then(values => mergeStringMaps(values));
|
34 | }
|
35 |
|
36 | |
37 |
|
38 |
|
39 |
|
40 | describe(): {[key: string]: any} {
|
41 | return mergeStringMaps(this._metrics.map((metric) => metric.describe()));
|
42 | }
|
43 | }
|
44 |
|
45 | function mergeStringMaps(maps: { [key: string]: string }[]): Object {
|
46 | var result = {};
|
47 | maps.forEach(
|
48 | map => { StringMapWrapper.forEach(map, (value, prop) => { result[prop] = value; }); });
|
49 | return result;
|
50 | }
|
51 |
|
52 | var _CHILDREN = new OpaqueToken('MultiMetric.children');
|