diff options
| author | James Barnett <noreply@jamesbarnett.xyz> | 2025-07-31 16:04:04 +0100 |
|---|---|---|
| committer | James Barnett <noreply@jamesbarnett.xyz> | 2025-07-31 16:04:04 +0100 |
| commit | bccbcc12c72f5edde605601a311646d1ca96d7e1 (patch) | |
| tree | 494a79f237fa22186ab9a3a80e7b3d84719e2460 /src/ui/index.ts | |
| parent | 7b06f4e9958562f3df09eecc368e92af013e5b39 (diff) | |
| download | js-raytracer-bccbcc12c72f5edde605601a311646d1ca96d7e1.tar.xz js-raytracer-bccbcc12c72f5edde605601a311646d1ca96d7e1.zip | |
Add CPU performance benchmarking
Diffstat (limited to 'src/ui/index.ts')
| -rw-r--r-- | src/ui/index.ts | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/ui/index.ts b/src/ui/index.ts new file mode 100644 index 0000000..683d114 --- /dev/null +++ b/src/ui/index.ts @@ -0,0 +1,51 @@ +import * as DemoView from "./demoView"; +import * as BenchmarkView from "./benchmarkView"; + +let chartInitialised = false; + +function registerEventListeners() { + document.getElementById('demo-tab')!.addEventListener('click', (ev) => { + ev.preventDefault(); + setActiveTab('demo'); + }); + + document.getElementById('benchmark-tab')!.addEventListener('click', (ev) => { + ev.preventDefault(); + setActiveTab('benchmark'); + }); + + DemoView.registerEventListeners(); + BenchmarkView.registerEventListeners(); +} + +function setActiveTab(tab: string) { + if (tab==='demo') { + document.getElementById('demo-mode')!.classList.remove('d-hide'); + document.getElementById('benchmark-mode')!.classList.add('d-hide'); + + document.getElementById('demo-tab')!.classList.add('active'); + document.getElementById('benchmark-tab')!.classList.remove('active'); + } else { + // benchmark + document.getElementById('demo-mode')!.classList.add('d-hide'); + document.getElementById('benchmark-mode')!.classList.remove('d-hide'); + + document.getElementById('demo-tab')!.classList.remove('active'); + document.getElementById('benchmark-tab')!.classList.add('active'); + + if (!chartInitialised) { + // Init on tab click rather than window load so DOM element has correct size and animations play + BenchmarkView.initChart(); + chartInitialised = true; + } + } +} + +document.addEventListener('DOMContentLoaded', () => { + registerEventListeners(); + if (window.location.hash === '#benchmark') { + setActiveTab('benchmark'); + } else { + DemoView.render(); + } +}); |