feat: add simple performance tracker
All checks were successful
Deploy to GitHub Pages / build_site (push) Successful in 2m23s

This commit is contained in:
2024-04-25 00:02:02 +02:00
parent 2de2560a57
commit f51f61df17
12 changed files with 408 additions and 224 deletions

View File

@@ -0,0 +1,17 @@
<script lang="ts">
import type { PerformanceStore } from ".";
export let store: PerformanceStore;
function getPerformanceData() {
return Object.entries($store.total).sort((a, b) => b[1] - a[1]);
}
</script>
{#if $store.runs.length !== 0}
{#each getPerformanceData() as [key, value]}
<p>{key}: {Math.floor(value * 100) / 100}ms</p>
{/each}
{:else}
<p>No runs available</p>
{/if}

View File

@@ -0,0 +1,62 @@
import { readable, type Readable } from "svelte/store";
type PerformanceData = {
total: Record<string, number>;
runs: Record<string, number[]>[];
}
export interface PerformanceStore extends Readable<PerformanceData> {
startRun(): void;
stopRun(): void;
addPoint(name: string, value?: number): void;
}
export function createPerformanceStore(): PerformanceStore {
let data: PerformanceData = { total: {}, runs: [] };
let currentRun: Record<string, number[]> | undefined;
let set: (v: PerformanceData) => void;
const { subscribe } = readable<PerformanceData>({ total: {}, runs: [] }, (_set) => {
set = _set;
});
function startRun() {
currentRun = {};
}
function stopRun() {
if (currentRun) {
// Calculate total
Object.keys(currentRun).forEach((name) => {
if (!currentRun?.[name]?.length) return;
let runTotal = currentRun[name].reduce((a, b) => a + b, 0) / currentRun[name].length;
if (!data.total[name]) {
data.total[name] = runTotal;
} else {
data.total[name] = (data.total[name] + runTotal) / 2;
}
});
data.runs.push(currentRun);
currentRun = undefined;
set(data);
}
}
function addPoint(name: string, value: number) {
if (!currentRun) return;
currentRun[name] = currentRun[name] || [];
currentRun[name].push(value);
}
return {
subscribe,
startRun,
stopRun,
addPoint,
}
}
export { default as PerformanceViewer } from "./PerformanceViewer.svelte";