mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-04 16:42:27 +00:00
feat(engine): cache probe Promise + log resolved mode + sync docs
Three follow-ups from Vai's staff-eng review: 1. Concurrent-probe race (real bug): the parallel coordinator runs N workers via Promise.all, so `--workers 4` on a no-GPU host fired 4 simultaneous probe Chromes — each paying the same 240 ms launch cost. Cache the *Promise* (not the resolved value): first caller assigns the in-flight Promise, every other concurrent caller awaits the same one. Verified with a new test asserting all concurrent callers get the identical Promise reference. 2. Stale rendering.md (lines 23, 29): user-visible contract said "browser GPU enabled by default", which was wrong post-auto. Now describes the auto / hardware / software trichotomy explicitly. 3. Silent fallback: auto-mode produced no output, so a regression to "always falls back to software even with GPU present" would have been invisible in production logs. Added a single stderr line per process when the probe resolves: `[hyperframes] browserGpuMode auto → <mode> (<reason>)`. Cache hits don't re-log. Verification: - Engine 536/536 (incl. new concurrent-dedup test asserting Promise reference equality across simultaneous callers) - CLI 256/256 - Format / lint / typecheck clean
This commit is contained in:
@@ -103,6 +103,29 @@ describe("resolveBrowserGpuMode", () => {
|
||||
const third = await resolveBrowserGpuMode("hardware");
|
||||
expect(third).toBe("hardware");
|
||||
});
|
||||
|
||||
it("deduplicates concurrent auto-mode probes by caching the in-flight Promise", async () => {
|
||||
// Parallel coordinator fires N workers via Promise.all — without Promise-
|
||||
// level caching, a `--workers 4` render against a no-GPU host would launch
|
||||
// 4 simultaneous probe Chromes. Verify all concurrent callers get the
|
||||
// exact same Promise reference (proving the probe runs once, not N times).
|
||||
const p1 = resolveBrowserGpuMode("auto", {
|
||||
chromePath: "/definitely/not/a/real/chrome/binary",
|
||||
browserTimeout: 2000,
|
||||
});
|
||||
const p2 = resolveBrowserGpuMode("auto", {
|
||||
chromePath: "/definitely/not/a/real/chrome/binary",
|
||||
browserTimeout: 2000,
|
||||
});
|
||||
const p3 = resolveBrowserGpuMode("auto", {
|
||||
chromePath: "/definitely/not/a/real/chrome/binary",
|
||||
browserTimeout: 2000,
|
||||
});
|
||||
expect(p1).toBe(p2);
|
||||
expect(p2).toBe(p3);
|
||||
const results = await Promise.all([p1, p2, p3]);
|
||||
expect(results).toEqual(["software", "software", "software"]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("forceReleaseBrowser", () => {
|
||||
|
||||
Reference in New Issue
Block a user