/* 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; }); }; }