Creates a CpuFrameTicker. The clock read (performance.now() in a real
caller) happens OUTSIDE this module — tick(nowMs) takes the timestamp as
a parameter rather than reading a clock itself, so this module has no
dependency on real elapsed time and its own tests (see
frame-timing-cpu.test.ts) can feed synthetic values deterministically.
Creates a
CpuFrameTicker. The clock read (performance.now()in a real caller) happens OUTSIDE this module —tick(nowMs)takes the timestamp as a parameter rather than reading a clock itself, so this module has no dependency on real elapsed time and its own tests (seeframe-timing-cpu.test.ts) can feed synthetic values deterministically.