Files
hyperframes/packages/cli/src/telemetry/system.test.ts
T
Vance IngallsandClaude Opus 5 3da31e399b feat(producer): lower parallel-DE router floor to 700 frames + power-state telemetry
HF_DE_PARALLEL_MIN_FRAMES default 2000 -> 700, re-calibrated by a controlled
crossover sweep (fixed content-per-frame, three synthetic profiles x
{350..3000f} x {single,par2,par3} x 3 reps, resolved worker counts and capture
modes verified per run): par3 beats single at EVERY size in every profile —
+17-21% at 700f rising to +28-34% at 3000f. That includes a
24-sub-composition profile built specifically to reproduce the 'workers
re-pay init' failure the original 2000 floor guarded against (92k tweens,
~2.5s pollSubCompositionTimelines per worker): workers initialize
concurrently, so duplicated init costs CPU, not wall-clock, and the comp
still parallelizes +19% at 700f. Below ~700f the win thins toward +10%
while paying three hardware-GPU browsers, so a floor remains. par2 loses to
par3 in every cell of every profile — the router's existing 3-worker pin is
confirmed, not changed. Harness:
plans/drawelement-fast-capture/de-crossover-bench.sh (docs repo).

Also adds on_battery / low_power_mode to render_complete and render_error.
The DE fleet is macOS laptops, and bench sweeps on an M4 Pro caught the SAME
render flipping between ~9.6 and ~17.2 ms/frame power-management regimes
with no existing telemetry signal to segment by — the router soak reading
this change needs that dimension to interpret perf on the machines users
actually render on. Sampled per event (volatile), pmset-based, darwin-only,
null-safe on failure.

Router stays default-off behind HF_DE_PARALLEL_ROUTER; this tunes what it
will do when the soak clears it to flip.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-27 22:51:28 -07:00

164 lines
6.1 KiB
TypeScript

import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
beforeEach(() => {
vi.resetModules();
});
afterEach(() => {
vi.restoreAllMocks();
});
describe("getAvailableMemoryMb", () => {
it("parses vm_stat on macOS to compute available memory", async () => {
vi.doMock("node:os", async () => ({
...(await vi.importActual<typeof import("node:os")>("node:os")),
platform: () => "darwin",
freemem: () => 100 * 1024 * 1024,
}));
vi.doMock("node:child_process", async () => ({
...(await vi.importActual<typeof import("node:child_process")>("node:child_process")),
execSync: (_cmd: string) =>
[
"Mach Virtual Memory Statistics: (page size of 16384 bytes)",
"Pages free: 5000.",
"Pages active: 200000.",
"Pages inactive: 100000.",
"Pages speculative: 2000.",
"Pages throttled: 0.",
"Pages wired down: 150000.",
"Pages purgeable: 3000.",
].join("\n"),
}));
const { getAvailableMemoryMb } = await import("./system.js");
const result = getAvailableMemoryMb();
// (5000 + 100000 + 3000 + 2000) * 16384 = 110000 * 16384 = 1,802,240,000 bytes
// 1,802,240,000 / (1024 * 1024) = ~1718 MB
expect(result).toBe(Math.trunc((110000 * 16384) / (1024 * 1024)));
});
it("falls back to freemem on macOS when vm_stat fails", async () => {
vi.doMock("node:os", async () => ({
...(await vi.importActual<typeof import("node:os")>("node:os")),
platform: () => "darwin",
freemem: () => 4 * 1024 * 1024 * 1024,
}));
vi.doMock("node:child_process", async () => ({
...(await vi.importActual<typeof import("node:child_process")>("node:child_process")),
execSync: () => {
throw new Error("vm_stat not found");
},
}));
const { getAvailableMemoryMb } = await import("./system.js");
expect(getAvailableMemoryMb()).toBe(4096);
});
it("reads MemAvailable from /proc/meminfo on Linux", async () => {
vi.doMock("node:os", async () => ({
...(await vi.importActual<typeof import("node:os")>("node:os")),
platform: () => "linux",
freemem: () => 100 * 1024 * 1024,
}));
vi.doMock("node:fs", async () => ({
...(await vi.importActual<typeof import("node:fs")>("node:fs")),
readFileSync: (path: string, _enc: string) => {
if (path === "/proc/meminfo") {
return [
"MemTotal: 16384000 kB",
"MemFree: 512000 kB",
"MemAvailable: 8192000 kB",
"Buffers: 256000 kB",
].join("\n");
}
throw new Error(`unexpected path: ${path}`);
},
}));
const { getAvailableMemoryMb } = await import("./system.js");
// 8192000 kB / 1024 = 8000 MB
expect(getAvailableMemoryMb()).toBe(8000);
});
it("falls back to freemem on Linux when /proc/meminfo is unreadable", async () => {
vi.doMock("node:os", async () => ({
...(await vi.importActual<typeof import("node:os")>("node:os")),
platform: () => "linux",
freemem: () => 2 * 1024 * 1024 * 1024,
}));
vi.doMock("node:fs", async () => ({
...(await vi.importActual<typeof import("node:fs")>("node:fs")),
readFileSync: (path: string) => {
if (path === "/proc/meminfo") throw new Error("ENOENT");
throw new Error(`unexpected path: ${path}`);
},
}));
const { getAvailableMemoryMb } = await import("./system.js");
expect(getAvailableMemoryMb()).toBe(2048);
});
it("falls back to freemem on unsupported platforms", async () => {
vi.doMock("node:os", async () => ({
...(await vi.importActual<typeof import("node:os")>("node:os")),
platform: () => "win32",
freemem: () => 6 * 1024 * 1024 * 1024,
}));
const { getAvailableMemoryMb } = await import("./system.js");
expect(getAvailableMemoryMb()).toBe(6144);
});
});
describe("power state (laptop fleet segmentation)", () => {
it("parsePmsetPowerSource reads battery vs AC", async () => {
const { parsePmsetPowerSource } = await import("./system.js");
expect(parsePmsetPowerSource("Now drawing from 'Battery Power'\n -InternalBattery-0")).toBe(
true,
);
expect(parsePmsetPowerSource("Now drawing from 'AC Power'\n -InternalBattery-0")).toBe(false);
expect(parsePmsetPowerSource("garbage output")).toBe(null);
});
it("getPowerState samples pmset on darwin", async () => {
vi.doMock("node:os", async () => ({
...(await vi.importActual<typeof import("node:os")>("node:os")),
platform: () => "darwin",
}));
vi.doMock("node:child_process", async () => ({
...(await vi.importActual<typeof import("node:child_process")>("node:child_process")),
execSync: (cmd: string) =>
cmd === "pmset -g batt"
? "Now drawing from 'Battery Power'\n"
: "SleepDisabled 0\n lowpowermode 1\n",
}));
const { getPowerState } = await import("./system.js");
expect(getPowerState()).toEqual({ on_battery: true, low_power_mode: true });
});
it("getPowerState returns nulls off-darwin (no guessing)", async () => {
vi.doMock("node:os", async () => ({
...(await vi.importActual<typeof import("node:os")>("node:os")),
platform: () => "linux",
}));
const { getPowerState } = await import("./system.js");
expect(getPowerState()).toEqual({ on_battery: null, low_power_mode: null });
});
it("getPowerState survives pmset failure with nulls", async () => {
vi.doMock("node:os", async () => ({
...(await vi.importActual<typeof import("node:os")>("node:os")),
platform: () => "darwin",
}));
vi.doMock("node:child_process", async () => ({
...(await vi.importActual<typeof import("node:child_process")>("node:child_process")),
execSync: () => {
throw new Error("pmset: command failed");
},
}));
const { getPowerState } = await import("./system.js");
expect(getPowerState()).toEqual({ on_battery: null, low_power_mode: null });
});
});