summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Benchmark/Benchmark.js
blob: df6dea7dd5ecf2729ba48064df6fe4092d3e2c30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import { performance } from "node:perf_hooks";

class Benchmark {
	constructor() {
		// TypeScript slop
		this.timeSpent = 0;
		this.timesCalled = 0;
		this.beforeTimers = [];
	}

	reset() {
		this.timeSpent = 0;
		this.timesCalled = 0;
		this.beforeTimers = [];
	}

	getNewTimestamp() {
		if (performance) {
			return performance.now();
		}
		return new Date().getTime();
	}

	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;
	}
}

export default Benchmark;