41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/**
|
|
* Create an interface to measure iterations for a micro benchmark. These iterations
|
|
* will then be reported to the perftest runner.
|
|
*
|
|
* @param {string} metricName
|
|
*/
|
|
function measureIterations(metricName) {
|
|
let accumulatedTime = 0;
|
|
let iterations = 0;
|
|
let now = 0;
|
|
return {
|
|
/**
|
|
* Start a measurement.
|
|
*/
|
|
start() {
|
|
now = Cu.now();
|
|
},
|
|
/**
|
|
* Stop a measurement, and record the elapsed time.
|
|
*/
|
|
stop() {
|
|
accumulatedTime += Cu.now() - now;
|
|
iterations++;
|
|
},
|
|
/**
|
|
* Report the metrics to perftest after finishing the microbenchmark.
|
|
*/
|
|
reportMetrics() {
|
|
const metrics = {};
|
|
metrics[metricName + " iterations"] = iterations;
|
|
metrics[metricName + " accumulatedTime"] = accumulatedTime;
|
|
metrics[metricName + " perCallTime"] = accumulatedTime / iterations;
|
|
|
|
info("perfMetrics", metrics);
|
|
},
|
|
};
|
|
}
|