返回 DeepSeek-Reasonix
performance-renderer.ts
根目录 / desktop / electron / scripts / fixtures / performance-renderer.ts
1 import { installPerformancePressureMonitor } from "../../../frontend/src/lib/crash";
2
3 const params = new URLSearchParams(location.search);
4 if (params.get("benchmark") === "1") {
5 document.hasFocus = () => true;
6 Object.defineProperty(document, "visibilityState", { get: () => "visible" });
7 }
8 if (params.get("monitor") === "1") installPerformancePressureMonitor();
9
10 function burn(ms: number) {
11 const end = performance.now() + ms;
12 while (performance.now() < end) Math.sqrt(Math.random());
13 }
14 async function run(ms: number) {
15 const times: number[] = [];
16 let frames = 0;
17 let last = performance.now();
18 const start = last;
19 await new Promise<void>((resolve) => {
20 function workFrame() {
21 const now = performance.now();
22 times.push(now - last);
23 last = now;
24 let sum = 0;
25 for (let i = 0; i < 100000; i++) sum += Math.sin(i + frames);
26 document.getElementById("output")!.textContent = Array(200).fill(String(sum)).join("\n");
27 frames++;
28 if (now - start < ms) requestAnimationFrame(workFrame); else resolve();
29 }
30 requestAnimationFrame(workFrame);
31 });
32 times.sort((a, b) => a - b);
33 return { frames, elapsedMs: performance.now() - start, frameP95Ms: times[Math.floor(times.length * .95)], frameMaxMs: times[times.length - 1] };
34 }
35 Object.assign(window, { diagnosticFixture: { run, burn } });
36 document.getElementById("work")!.onclick = () => burn(950);
37
37 lines TYPESCRIPT