@angular/benchpress
Version:
Benchpress - a framework for e2e performance tests
62 lines • 6.59 kB
JavaScript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { InjectionToken, Injector } from '@angular/core';
import { Metric } from '../metric';
export class MultiMetric extends Metric {
constructor(_metrics) {
super();
this._metrics = _metrics;
}
static provideWith(childTokens) {
return [
{
provide: _CHILDREN,
useFactory: (injector) => childTokens.map(token => injector.get(token)),
deps: [Injector]
},
{
provide: MultiMetric,
useFactory: (children) => new MultiMetric(children),
deps: [_CHILDREN]
}
];
}
/**
* Starts measuring
*/
beginMeasure() {
return Promise.all(this._metrics.map(metric => metric.beginMeasure()));
}
/**
* Ends measuring and reports the data
* since the begin call.
* @param restart: Whether to restart right after this.
*/
endMeasure(restart) {
return Promise.all(this._metrics.map(metric => metric.endMeasure(restart)))
.then(values => mergeStringMaps(values));
}
/**
* Describes the metrics provided by this metric implementation.
* (e.g. units, ...)
*/
describe() {
return mergeStringMaps(this._metrics.map((metric) => metric.describe()));
}
}
function mergeStringMaps(maps) {
const result = {};
maps.forEach(map => {
Object.keys(map).forEach(prop => {
result[prop] = map[prop];
});
});
return result;
}
const _CHILDREN = new InjectionToken('MultiMetric.children');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfbWV0cmljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmVuY2hwcmVzcy9zcmMvbWV0cmljL211bHRpX21ldHJpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsY0FBYyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWpDLE1BQU0sT0FBTyxXQUFZLFNBQVEsTUFBTTtJQWdCckMsWUFBb0IsUUFBa0I7UUFDcEMsS0FBSyxFQUFFLENBQUM7UUFEVSxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBRXRDLENBQUM7SUFqQkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFrQjtRQUNuQyxPQUFPO1lBQ0w7Z0JBQ0UsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFVBQVUsRUFBRSxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsV0FBVztnQkFDcEIsVUFBVSxFQUFFLENBQUMsUUFBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDO2dCQUM3RCxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7YUFDbEI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQU1EOztPQUVHO0lBQ00sWUFBWTtRQUNuQixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ00sVUFBVSxDQUFDLE9BQWdCO1FBQ2xDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUN0RSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ00sUUFBUTtRQUNmLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FDRjtBQUVELFNBQVMsZUFBZSxDQUFDLElBQStCO0lBQ3RELE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7SUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0luamVjdGlvblRva2VuLCBJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TWV0cmljfSBmcm9tICcuLi9tZXRyaWMnO1xuXG5leHBvcnQgY2xhc3MgTXVsdGlNZXRyaWMgZXh0ZW5kcyBNZXRyaWMge1xuICBzdGF0aWMgcHJvdmlkZVdpdGgoY2hpbGRUb2tlbnM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IF9DSElMRFJFTixcbiAgICAgICAgdXNlRmFjdG9yeTogKGluamVjdG9yOiBJbmplY3RvcikgPT4gY2hpbGRUb2tlbnMubWFwKHRva2VuID0+IGluamVjdG9yLmdldCh0b2tlbikpLFxuICAgICAgICBkZXBzOiBbSW5qZWN0b3JdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBNdWx0aU1ldHJpYyxcbiAgICAgICAgdXNlRmFjdG9yeTogKGNoaWxkcmVuOiBNZXRyaWNbXSkgPT4gbmV3IE11bHRpTWV0cmljKGNoaWxkcmVuKSxcbiAgICAgICAgZGVwczogW19DSElMRFJFTl1cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbWV0cmljczogTWV0cmljW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBtZWFzdXJpbmdcbiAgICovXG4gIG92ZXJyaWRlIGJlZ2luTWVhc3VyZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9tZXRyaWNzLm1hcChtZXRyaWMgPT4gbWV0cmljLmJlZ2luTWVhc3VyZSgpKSk7XG4gIH1cblxuICAvKipcbiAgICogRW5kcyBtZWFzdXJpbmcgYW5kIHJlcG9ydHMgdGhlIGRhdGFcbiAgICogc2luY2UgdGhlIGJlZ2luIGNhbGwuXG4gICAqIEBwYXJhbSByZXN0YXJ0OiBXaGV0aGVyIHRvIHJlc3RhcnQgcmlnaHQgYWZ0ZXIgdGhpcy5cbiAgICovXG4gIG92ZXJyaWRlIGVuZE1lYXN1cmUocmVzdGFydDogYm9vbGVhbik6IFByb21pc2U8e1trZXk6IHN0cmluZ106IGFueX0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5fbWV0cmljcy5tYXAobWV0cmljID0+IG1ldHJpYy5lbmRNZWFzdXJlKHJlc3RhcnQpKSlcbiAgICAgICAgLnRoZW4odmFsdWVzID0+IG1lcmdlU3RyaW5nTWFwcyg8YW55PnZhbHVlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgbWV0cmljcyBwcm92aWRlZCBieSB0aGlzIG1ldHJpYyBpbXBsZW1lbnRhdGlvbi5cbiAgICogKGUuZy4gdW5pdHMsIC4uLilcbiAgICovXG4gIG92ZXJyaWRlIGRlc2NyaWJlKCk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICByZXR1cm4gbWVyZ2VTdHJpbmdNYXBzKHRoaXMuX21ldHJpY3MubWFwKChtZXRyaWMpID0+IG1ldHJpYy5kZXNjcmliZSgpKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VTdHJpbmdNYXBzKG1hcHM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9W10pOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB7XG4gIGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgbWFwcy5mb3JFYWNoKG1hcCA9PiB7XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgcmVzdWx0W3Byb3BdID0gbWFwW3Byb3BdO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgX0NISUxEUkVOID0gbmV3IEluamVjdGlvblRva2VuKCdNdWx0aU1ldHJpYy5jaGlsZHJlbicpO1xuIl19