Entry / Exit Decision Fixed Update (game logic) Render Submission OS Frame Begins runFrame() called Measure Elapsed Time elapsedTime = gameClock.restart() accumulator += elapsedTime accumulator < TIMESTEP (10ms)? YES Sleep if unfocused (save battery @ ~5 FPS) return — no work to do NO accumulator > 2s? (debugger paused?) YES Clamp accumulator = TIMESTEP × 2 (20ms) NO FIXED UPDATE LOOP — while (accumulator > TIMESTEP) loop back accumulator > TIMESTEP? NO — exit loop YES accumulator -= TIMESTEP · TOTAL_ELAPSED_TIME += TIMESTEP loadNextQueuedLevel() if level change queued pollInput() — window events + controller state doFixedUpdate(TIMESTEP = 10ms) ① Box2D physics world step ② updateLevel(dt) — update() called on every CHRenderTarget in the scene ③ UI, camera, audio, particles, floating text, Steam callbacks Time factor applied per-level (slow-motion support) processRenderResults() Drain render thread result queue · return leases · track draw call metrics submitRenderTask() syncCollectRenderData() · lease snapshot · RENDER_THREAD→submitRender() Frame Complete