mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-10 22:20:14 +00:00
* feat(studio): enable timeline virtualization by default * fix(ci): measure timeline performance in production React
61 lines
2.2 KiB
TypeScript
61 lines
2.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
TIMELINE_VIEWPORT_BUDGETS,
|
|
resolveTimelineViewportBudgets,
|
|
} from "./timelineViewportBudgets";
|
|
|
|
describe("timeline viewport budgets", () => {
|
|
it("owns the agreed direct-scroll, DOM, media, and measurement ceilings", () => {
|
|
expect(TIMELINE_VIEWPORT_BUDGETS).toMatchObject({
|
|
directScrollSafetyPx: 8_000_000,
|
|
rowOverscanPerSide: 2,
|
|
timeOverscanViewportRatio: 0.25,
|
|
maxMountedRows: 64,
|
|
maxMountedClipRoots: 512,
|
|
maxMountedClipRootsPerRow: 128,
|
|
maxMountedTimelineDescendants: 5_000,
|
|
thumbnailCacheBytes: 64 * 1024 * 1024,
|
|
waveformCacheBytes: 16 * 1024 * 1024,
|
|
interactionP95Ms: 50,
|
|
constrainedInteractionP95Ms: 75,
|
|
constrainedFrameIntervalP95Ms: 75,
|
|
longTaskLimitMs: 50,
|
|
constrainedLongTaskLimitMs: 300,
|
|
posterCoverageRatio: 0.9,
|
|
supportedFixtureFallbackRatio: 0.02,
|
|
scrollSamplesPerRun: 21,
|
|
warmupRuns: 3,
|
|
measuredRuns: 5,
|
|
requiredPassingRuns: 4,
|
|
});
|
|
expect(Object.isFrozen(TIMELINE_VIEWPORT_BUDGETS)).toBe(true);
|
|
});
|
|
|
|
it("creates an immutable test override without changing production defaults", () => {
|
|
const resolved = resolveTimelineViewportBudgets({
|
|
directScrollSafetyPx: 256,
|
|
measuredRuns: 1,
|
|
requiredPassingRuns: 1,
|
|
});
|
|
|
|
expect(resolved.directScrollSafetyPx).toBe(256);
|
|
expect(resolved.maxMountedClipRoots).toBe(512);
|
|
expect(TIMELINE_VIEWPORT_BUDGETS.directScrollSafetyPx).toBe(8_000_000);
|
|
expect(Object.isFrozen(resolved)).toBe(true);
|
|
});
|
|
|
|
it.each([
|
|
[{ maxMountedClipRoots: -1 }, "maxMountedClipRoots"],
|
|
[{ frameIntervalP95Ms: Number.NaN }, "frameIntervalP95Ms"],
|
|
[{ warmupRuns: 0.5 }, "warmupRuns"],
|
|
[{ measuredRuns: 0 }, "measuredRuns"],
|
|
[{ requiredPassingRuns: 0 }, "requiredPassingRuns"],
|
|
[{ measuredRuns: 1.5, requiredPassingRuns: 1 }, "measuredRuns"],
|
|
[{ measuredRuns: 4, requiredPassingRuns: 5 }, "requiredPassingRuns"],
|
|
[{ scrollSamplesPerRun: 19 }, "scrollSamplesPerRun"],
|
|
[{ posterCoverageRatio: 1.1 }, "posterCoverageRatio"],
|
|
] as const)("rejects an invalid override %#", (overrides, message) => {
|
|
expect(() => resolveTimelineViewportBudgets(overrides)).toThrow(message);
|
|
});
|
|
});
|