Skip to content

Commit 7ff9c28

Browse files
hi-ogawaOpenCode
andcommitted
refactor: isolate app benchmark recording
Co-authored-by: OpenCode <noreply@opencode.ai>
1 parent 5441e67 commit 7ff9c28

2 files changed

Lines changed: 62 additions & 51 deletions

File tree

packages/app/src/app.tsx

Lines changed: 4 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,13 @@ import {
2020
} from "./lib/audio/stem-archive";
2121
import { encodeWavF32 } from "./lib/audio/wav";
2222
import { separateInWorker } from "./lib/audio/worker-client";
23+
import { createBenchmarkRecorder, isBenchmarkMode } from "./lib/benchmark";
2324
import { loadPreferences, savePreferences } from "./lib/preferences";
2425
import { updateRunProgress, type RunProgress } from "./lib/progress/model";
25-
import type { ChunkTiming } from "./lib/progress/model";
2626
import { RunProgressPanel } from "./lib/progress/panel";
2727

28-
declare global {
29-
interface Window {
30-
__demucsBenchmarkResult?: BenchmarkResult;
31-
}
32-
}
33-
34-
interface BenchmarkResult {
35-
loadMs: number;
36-
inferenceMs: number;
37-
finalizeMs: number;
38-
totalMs: number;
39-
chunks: ChunkTiming[];
40-
}
41-
4228
export function App() {
43-
const benchmarkMode = new URLSearchParams(location.search).has("benchmark");
29+
const benchmarkMode = isBenchmarkMode();
4430
// synchronize preferences with localStorage
4531
const [preferences, setPreferences] = useState(loadPreferences);
4632
useEffect(() => savePreferences(preferences), [preferences]);
@@ -153,18 +139,8 @@ export function App() {
153139
models: [],
154140
finalizeMs: 0,
155141
});
156-
if (benchmarkMode) {
157-
delete window.__demucsBenchmarkResult;
158-
}
159142
const started = performance.now();
160-
let benchmarkProgress: RunProgress | null = {
161-
phase: "preparing",
162-
startedAt,
163-
done: 0,
164-
total: 0,
165-
models: [],
166-
finalizeMs: 0,
167-
};
143+
const recordBenchmark = createBenchmarkRecorder(startedAt);
168144
const request: SeparateRequest = {
169145
left: decodedAudio.left.slice(),
170146
right: decodedAudio.right.slice(),
@@ -175,33 +151,10 @@ export function App() {
175151
};
176152
const separated = await separateInWorker(request, {
177153
onProgress: (event, at) => {
178-
if (benchmarkProgress) {
179-
benchmarkProgress = updateRunProgress(benchmarkProgress, event, at);
180-
}
154+
recordBenchmark?.(event, at);
181155
setRunProgress((progress) =>
182156
progress ? updateRunProgress(progress, event, at) : progress,
183157
);
184-
if (
185-
benchmarkMode &&
186-
event.type === "finalized" &&
187-
benchmarkProgress
188-
) {
189-
window.__demucsBenchmarkResult = {
190-
loadMs: benchmarkProgress.models.reduce(
191-
(sum, item) => sum + (item.loadMs ?? 0),
192-
0,
193-
),
194-
inferenceMs: benchmarkProgress.models.reduce(
195-
(sum, item) => sum + (item.inferenceMs ?? 0),
196-
0,
197-
),
198-
finalizeMs: benchmarkProgress.finalizeMs,
199-
totalMs: at - benchmarkProgress.startedAt,
200-
chunks: benchmarkProgress.models.flatMap(
201-
(item) => item.chunkTimings,
202-
),
203-
};
204-
}
205158
},
206159
});
207160
const nextOutputs = separated.map((output) => {

packages/app/src/lib/benchmark.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import type { ProgressEvent } from "./audio/separate";
2+
import {
3+
updateRunProgress,
4+
type ChunkTiming,
5+
type RunProgress,
6+
} from "./progress/model";
7+
8+
declare global {
9+
interface Window {
10+
__demucsBenchmarkResult?: BenchmarkResult;
11+
}
12+
}
13+
14+
interface BenchmarkResult {
15+
loadMs: number;
16+
inferenceMs: number;
17+
finalizeMs: number;
18+
totalMs: number;
19+
chunks: ChunkTiming[];
20+
}
21+
22+
export function createBenchmarkRecorder(startedAt: number) {
23+
if (!new URLSearchParams(location.search).has("benchmark")) {
24+
return null;
25+
}
26+
27+
delete window.__demucsBenchmarkResult;
28+
let progress: RunProgress = {
29+
phase: "preparing",
30+
startedAt,
31+
done: 0,
32+
total: 0,
33+
models: [],
34+
finalizeMs: 0,
35+
};
36+
return (event: ProgressEvent, at: number) => {
37+
progress = updateRunProgress(progress, event, at);
38+
if (event.type === "finalized") {
39+
window.__demucsBenchmarkResult = {
40+
loadMs: progress.models.reduce(
41+
(sum, item) => sum + (item.loadMs ?? 0),
42+
0,
43+
),
44+
inferenceMs: progress.models.reduce(
45+
(sum, item) => sum + (item.inferenceMs ?? 0),
46+
0,
47+
),
48+
finalizeMs: progress.finalizeMs,
49+
totalMs: at - progress.startedAt,
50+
chunks: progress.models.flatMap((item) => item.chunkTimings),
51+
};
52+
}
53+
};
54+
}
55+
56+
export function isBenchmarkMode() {
57+
return new URLSearchParams(location.search).has("benchmark");
58+
}

0 commit comments

Comments
 (0)