From 18e561d89d4065c3372da1a1d66d36e3b14a78be Mon Sep 17 00:00:00 2001 From: Uri Shaked Date: Sun, 1 Dec 2019 23:55:42 +0200 Subject: feat(demo): show simulation speed --- demo/src/cpu-performance.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 demo/src/cpu-performance.ts (limited to 'demo/src/cpu-performance.ts') diff --git a/demo/src/cpu-performance.ts b/demo/src/cpu-performance.ts new file mode 100644 index 0000000..f61d038 --- /dev/null +++ b/demo/src/cpu-performance.ts @@ -0,0 +1,33 @@ +import { ICPU } from 'avr8js'; + +export class CPUPerformance { + private prevTime = 0; + private prevCycles = 0; + private samples = new Float32Array(64); + private sampleIndex = 0; + + constructor(private cpu: ICPU, private MHZ: number) {} + + reset() { + this.prevTime = 0; + this.prevCycles = 0; + this.sampleIndex = 0; + } + + update() { + if (this.prevTime) { + const delta = performance.now() - this.prevTime; + const deltaCycles = this.cpu.cycles - this.prevCycles; + const deltaCpuMillis = 1000 * (deltaCycles / this.MHZ); + const factor = deltaCpuMillis / delta; + if (!this.sampleIndex) { + this.samples.fill(factor); + } + this.samples[this.sampleIndex++ % this.samples.length] = factor; + } + this.prevCycles = this.cpu.cycles; + this.prevTime = performance.now(); + const avg = this.samples.reduce((x, y) => x + y) / this.samples.length; + return avg; + } +} -- cgit v1.2.3