@angular/benchpress
Version:
Benchpress - a framework for e2e performance tests
104 lines • 12.6 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
*/
var Sampler_1;
import { __decorate, __metadata, __param } from "tslib";
import { Inject, Injectable } from '@angular/core';
import { Options } from './common_options';
import { MeasureValues } from './measure_values';
import { Metric } from './metric';
import { Reporter } from './reporter';
import { Validator } from './validator';
import { WebDriverAdapter } from './web_driver_adapter';
/**
* The Sampler owns the sample loop:
* 1. calls the prepare/execute callbacks,
* 2. gets data from the metric
* 3. asks the validator for a valid sample
* 4. reports the new data to the reporter
* 5. loop until there is a valid sample
*/
let Sampler = Sampler_1 = class Sampler {
constructor(_driver, _metric, _reporter, _validator, _prepare, _execute, _now) {
this._driver = _driver;
this._metric = _metric;
this._reporter = _reporter;
this._validator = _validator;
this._prepare = _prepare;
this._execute = _execute;
this._now = _now;
}
sample() {
const loop = (lastState) => {
return this._iterate(lastState).then((newState) => {
if (newState.validSample != null) {
return newState;
}
else {
return loop(newState);
}
});
};
return loop(new SampleState([], null));
}
_iterate(lastState) {
let resultPromise;
if (this._prepare !== Options.NO_PREPARE) {
resultPromise = this._driver.waitFor(this._prepare);
}
else {
resultPromise = Promise.resolve(null);
}
if (this._prepare !== Options.NO_PREPARE || lastState.completeSample.length === 0) {
resultPromise = resultPromise.then((_) => this._metric.beginMeasure());
}
return resultPromise.then((_) => this._driver.waitFor(this._execute))
.then((_) => this._metric.endMeasure(this._prepare === Options.NO_PREPARE))
.then((measureValues) => {
if (!!measureValues['invalid']) {
return lastState;
}
return this._report(lastState, measureValues);
});
}
_report(state, metricValues) {
const measureValues = new MeasureValues(state.completeSample.length, this._now(), metricValues);
const completeSample = state.completeSample.concat([measureValues]);
const validSample = this._validator.validate(completeSample);
let resultPromise = this._reporter.reportMeasureValues(measureValues);
if (validSample != null) {
resultPromise =
resultPromise.then((_) => this._reporter.reportSample(completeSample, validSample));
}
return resultPromise.then((_) => new SampleState(completeSample, validSample));
}
};
Sampler.PROVIDERS = [{
provide: Sampler_1,
deps: [
WebDriverAdapter, Metric, Reporter, Validator, Options.PREPARE, Options.EXECUTE,
Options.NOW
]
}];
Sampler = Sampler_1 = __decorate([
Injectable(),
__param(4, Inject(Options.PREPARE)),
__param(5, Inject(Options.EXECUTE)),
__param(6, Inject(Options.NOW)),
__metadata("design:paramtypes", [WebDriverAdapter, Metric, Reporter,
Validator, Function,
Function,
Function])
], Sampler);
export { Sampler };
export class SampleState {
constructor(completeSample, validSample) {
this.completeSample = completeSample;
this.validSample = validSample;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtcGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2JlbmNocHJlc3Mvc3JjL3NhbXBsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFakUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUd0RDs7Ozs7OztHQU9HO0FBRUgsSUFBYSxPQUFPLGVBQXBCLE1BQWEsT0FBTztJQVNsQixZQUNZLE9BQXlCLEVBQVUsT0FBZSxFQUFVLFNBQW1CLEVBQy9FLFVBQXFCLEVBQW1DLFFBQWtCLEVBQ2pELFFBQWtCLEVBQ3RCLElBQWM7UUFIbkMsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUMvRSxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQW1DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDakQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFVO0lBQUcsQ0FBQztJQUVuRCxNQUFNO1FBQ0osTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFzQixFQUF3QixFQUFFO1lBQzVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxR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LE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDL0UsT0FBTyxDQUFDLEdBQUc7U0FDWjtLQUNOLENBQUUsQ0FBQTtBQVJRLE9BQU87SUFEbkIsVUFBVSxFQUFFO0lBWXlCLFdBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN0RCxXQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdkIsV0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO3FDQUhILGdCQUFnQixFQUFtQixNQUFNLEVBQXFCLFFBQVE7UUFDbkUsU0FBUyxFQUE2QyxRQUFRO1FBQ3ZDLFFBQVE7UUFDaEIsUUFBUTtHQWJwQyxPQUFPLENBMkRuQjtTQTNEWSxPQUFPO0FBNkRwQixNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFtQixjQUErQixFQUFTLFdBQWlDO1FBQXpFLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtJQUFHLENBQUM7Q0FDakciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIFN0YXRpY1Byb3ZpZGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPcHRpb25zfSBmcm9tICcuL2NvbW1vbl9vcHRpb25zJztcbmltcG9ydCB7TWVhc3VyZVZhbHVlc30gZnJvbSAnLi9tZWFzdXJlX3ZhbHVlcyc7XG5pbXBvcnQge01ldHJpY30gZnJvbSAnLi9tZXRyaWMnO1xuaW1wb3J0IHtSZXBvcnRlcn0gZnJvbSAnLi9yZXBvcnRlcic7XG5pbXBvcnQge1ZhbGlkYXRvcn0gZnJvbSAnLi92YWxpZGF0b3InO1xuaW1wb3J0IHtXZWJEcml2ZXJBZGFwdGVyfSBmcm9tICcuL3dlYl9kcml2ZXJfYWRhcHRlcic7XG5cblxuLyoqXG4gKiBUaGUgU2FtcGxlciBvd25zIHRoZSBzYW1wbGUgbG9vcDpcbiAqIDEuIGNhbGxzIHRoZSBwcmVwYXJlL2V4ZWN1dGUgY2FsbGJhY2tzLFxuICogMi4gZ2V0cyBkYXRhIGZyb20gdGhlIG1ldHJpY1xuICogMy4gYXNrcyB0aGUgdmFsaWRhdG9yIGZvciBhIHZhbGlkIHNhbXBsZVxuICogNC4gcmVwb3J0cyB0aGUgbmV3IGRhdGEgdG8gdGhlIHJlcG9ydGVyXG4gKiA1LiBsb29wIHVudGlsIHRoZXJlIGlzIGEgdmFsaWQgc2FtcGxlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTYW1wbGVyIHtcbiAgc3RhdGljIFBST1ZJREVSUyA9IDxTdGF0aWNQcm92aWRlcltdPlt7XG4gICAgcHJvdmlkZTogU2FtcGxlcixcbiAgICBkZXBzOlxuICAgICAgICBbXG4gICAgICAgICAgV2ViRHJpdmVyQWRhcHRlciwgTWV0cmljLCBSZXBvcnRlciwgVmFsaWRhdG9yLCBPcHRpb25zLlBSRVBBUkUsIE9wdGlvbnMuRVhFQ1VURSxcbiAgICAgICAgICBPcHRpb25zLk5PV1xuICAgICAgICBdXG4gIH1dO1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2RyaXZlcjogV2ViRHJpdmVyQWRhcHRlciwgcHJpdmF0ZSBfbWV0cmljOiBNZXRyaWMsIHByaXZhdGUgX3JlcG9ydGVyOiBSZXBvcnRlcixcbiAgICAgIHByaXZhdGUgX3ZhbGlkYXRvcjogVmFsaWRhdG9yLCBASW5qZWN0KE9wdGlvbnMuUFJFUEFSRSkgcHJpdmF0ZSBfcHJlcGFyZTogRnVuY3Rpb24sXG4gICAgICBASW5qZWN0KE9wdGlvbnMuRVhFQ1VURSkgcHJpdmF0ZSBfZXhlY3V0ZTogRnVuY3Rpb24sXG4gICAgICBASW5qZWN0KE9wdGlvbnMuTk9XKSBwcml2YXRlIF9ub3c6IEZ1bmN0aW9uKSB7fVxuXG4gIHNhbXBsZSgpOiBQcm9taXNlPFNhbXBsZVN0YXRlPiB7XG4gICAgY29uc3QgbG9vcCA9IChsYXN0U3RhdGU6IFNhbXBsZVN0YXRlKTogUHJvbWlzZTxTYW1wbGVTdGF0ZT4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2l0ZXJhdGUobGFzdFN0YXRlKS50aGVuKChuZXdTdGF0ZSkgPT4ge1xuICAgICAgICBpZiAobmV3U3RhdGUudmFsaWRTYW1wbGUgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbG9vcChuZXdTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGxvb3AobmV3IFNhbXBsZVN0YXRlKFtdLCBudWxsKSk7XG4gIH1cblxuICBwcml2YXRlIF9pdGVyYXRlKGxhc3RTdGF0ZTogU2FtcGxlU3RhdGUpOiBQcm9taXNlPFNhbXBsZVN0YXRlPiB7XG4gICAgbGV0IHJlc3VsdFByb21pc2U6IFByb21pc2U8U2FtcGxlU3RhdGV8bnVsbD47XG4gICAgaWYgKHRoaXMuX3ByZXBhcmUgIT09IE9wdGlvbnMuTk9fUFJFUEFSRSkge1xuICAgICAgcmVzdWx0UHJvbWlzZSA9IHRoaXMuX2RyaXZlci53YWl0Rm9yKHRoaXMuX3ByZXBhcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcHJlcGFyZSAhPT0gT3B0aW9ucy5OT19QUkVQQVJFIHx8IGxhc3RTdGF0ZS5jb21wbGV0ZVNhbXBsZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdFByb21pc2UgPSByZXN1bHRQcm9taXNlLnRoZW4oKF8pID0+IHRoaXMuX21ldHJpYy5iZWdpbk1lYXN1cmUoKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRQcm9taXNlLnRoZW4oKF8pID0+IHRoaXMuX2RyaXZlci53YWl0Rm9yKHRoaXMuX2V4ZWN1dGUpKVxuICAgICAgICAudGhlbigoXykgPT4gdGhpcy5fbWV0cmljLmVuZE1lYXN1cmUodGhpcy5fcHJlcGFyZSA9PT0gT3B0aW9ucy5OT19QUkVQQVJFKSlcbiAgICAgICAgLnRoZW4oKG1lYXN1cmVWYWx1ZXMpID0+IHtcbiAgICAgICAgICBpZiAoISFtZWFzdXJlVmFsdWVzWydpbnZhbGlkJ10pIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0U3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLl9yZXBvcnQobGFzdFN0YXRlLCBtZWFzdXJlVmFsdWVzKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZXBvcnQoc3RhdGU6IFNhbXBsZVN0YXRlLCBtZXRyaWNWYWx1ZXM6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxTYW1wbGVTdGF0ZT4ge1xuICAgIGNvbnN0IG1lYXN1cmVWYWx1ZXMgPSBuZXcgTWVhc3VyZVZhbHVlcyhzdGF0ZS5jb21wbGV0ZVNhbXBsZS5sZW5ndGgsIHRoaXMuX25vdygpLCBtZXRyaWNWYWx1ZXMpO1xuICAgIGNvbnN0IGNvbXBsZXRlU2FtcGxlID0gc3RhdGUuY29tcGxldGVTYW1wbGUuY29uY2F0KFttZWFzdXJlVmFsdWVzXSk7XG4gICAgY29uc3QgdmFsaWRTYW1wbGUgPSB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUoY29tcGxldGVTYW1wbGUpO1xuICAgIGxldCByZXN1bHRQcm9taXNlID0gdGhpcy5fcmVwb3J0ZXIucmVwb3J0TWVhc3VyZVZhbHVlcyhtZWFzdXJlVmFsdWVzKTtcbiAgICBpZiAodmFsaWRTYW1wbGUgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0UHJvbWlzZSA9XG4gICAgICAgICAgcmVzdWx0UHJvbWlzZS50aGVuKChfKSA9PiB0aGlzLl9yZXBvcnRlci5yZXBvcnRTYW1wbGUoY29tcGxldGVTYW1wbGUsIHZhbGlkU2FtcGxlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRQcm9taXNlLnRoZW4oKF8pID0+IG5ldyBTYW1wbGVTdGF0ZShjb21wbGV0ZVNhbXBsZSwgdmFsaWRTYW1wbGUpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2FtcGxlU3RhdGUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tcGxldGVTYW1wbGU6IE1lYXN1cmVWYWx1ZXNbXSwgcHVibGljIHZhbGlkU2FtcGxlOiBNZWFzdXJlVmFsdWVzW118bnVsbCkge31cbn1cbiJdfQ==