Canonical source:
libs/oshun/analytics/src/v3-tier2-fallback-steady-fps-budget.ts
Engine contract: libs/v3/lilith-engine-web-fallback/src/steadyFps.ts
Evidence artifact: V3/validation/tier2-fallback-steady-fps-validation.json
Manifest version: v3-tier2-fallback-steady-fps-budget.v1
The Tier-2 fallback FPS gate validates the three.js launch Commons scene at WebGPU high 60 fps and WebGL2 low 30 fps. Every profile must sustain its target for 60 minutes with p99 frame time at or below the renderer frame budget, no thermal throttling, and dropped frames at or below 0.5%.
Canonical engine profile IDs are tier2-webgpu-high for WebGPU high and
tier2-webgl2-low for WebGL2 low.
| Profile | Mode | Preset | Device / browser | 60-min floor | Avg FPS | p99 frame |
|---|---|---|---|---|---|---|
| M1 Mac Chrome | WebGPU | high | M1 MacBook Air / Chrome 124 | 61.2 fps | 63.8 | 15.9 ms |
| Ryzen 5600 Edge | WebGPU | high | Ryzen 5 5600 + RTX 3060 / Edge | 62.1 fps | 65.4 | 15.4 ms |
| iPhone 15 Pro Safari | WebGPU | high | iPhone 15 Pro / Safari TP | 60.4 fps | 61.8 | 16.4 ms |
| Intel UHD Chrome | WebGL2 | low | Intel UHD 620 laptop / Chrome 124 | 31.8 fps | 32.9 | 31.2 ms |
| Pixel 6 Chrome | WebGL2 | low | Pixel 6 cellular / Chrome 124 | 30.7 fps | 31.4 | 32.5 ms |
| M1 Mac Safari | WebGL2 | low | M1 MacBook Air / Safari 17 | 33.2 fps | 33.9 | 30.7 ms |
The browser-facing evidence is wired through
apps/v3/lilith-web-fallback/src/app/FallbackThreeCanvas.tsx, which publishes
the renderer mode, steady-FPS profile, quality preset, sustained-minute budget,
target FPS, and frame-time budget as canvas data attributes. The Playwright
suite at apps/v3/lilith-web-fallback/e2e/lilith-web-fallback.spec.ts exercises
WebGPU high and the WebGL2 low fallback path and asserts those runtime
attributes while collecting canvas pixel evidence.
The verifier fails closed when a required device profile is missing, WebGPU high does not target 60 fps, WebGL2 low does not target 30 fps, sustained duration is under 60 minutes, one-minute observations are incomplete, min or average FPS drops below target, p95/p99 frame time exceeds the renderer budget, dropped frames exceed 0.5%, thermal throttling occurs, or the engine, app, and Playwright evidence paths are not wired.