/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ /* eslint no-console: "off" */ const log = function (results, measurement, tags) { console.log(measurement, results, tags); }; export default function (len = 10000, report = log, performance = window.performance) { return function (cb, measurement, tags) { let actual; return new Array(len) .fill(true) .reduce(function (prev, item, i) { return prev.then(function (ms) { return new Promise(function (resolve) { const start = performance.now(); cb().then(function (res) { actual = res; resolve(ms + (performance.now() - start)); }); }); }); }, Promise.resolve(0)) .then(function (total) { report({ avg: total / len, total: total, count: len }, measurement, tags); return actual; }); }; }