53 lines
968 B
JavaScript
53 lines
968 B
JavaScript
|
const { performance } = require("perf_hooks");
|
||
|
|
||
|
class Benchmark {
|
||
|
constructor() {
|
||
|
this.reset();
|
||
|
}
|
||
|
|
||
|
getNewTimestamp() {
|
||
|
if (performance) {
|
||
|
return performance.now();
|
||
|
}
|
||
|
return new Date().getTime();
|
||
|
}
|
||
|
|
||
|
reset() {
|
||
|
this.timeSpent = 0;
|
||
|
this.timesCalled = 0;
|
||
|
this.beforeTimers = [];
|
||
|
}
|
||
|
|
||
|
incrementCount() {
|
||
|
this.timesCalled++;
|
||
|
}
|
||
|
|
||
|
// TODO(slightlyoff):
|
||
|
// disable all of these hrtime requests when not benchmarking
|
||
|
before() {
|
||
|
this.timesCalled++;
|
||
|
this.beforeTimers.push(this.getNewTimestamp());
|
||
|
}
|
||
|
|
||
|
after() {
|
||
|
if (!this.beforeTimers.length) {
|
||
|
throw new Error("You called Benchmark after() without a before().");
|
||
|
}
|
||
|
|
||
|
let before = this.beforeTimers.pop();
|
||
|
if (!this.beforeTimers.length) {
|
||
|
this.timeSpent += this.getNewTimestamp() - before;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getTimesCalled() {
|
||
|
return this.timesCalled;
|
||
|
}
|
||
|
|
||
|
getTotal() {
|
||
|
return this.timeSpent;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Benchmark;
|