UNPKG

@angular/benchpress

Version:

Benchpress - a framework for e2e performance tests

104 lines 12.6 kB
/** * @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==