Frame Budget & Jank Visualizer

Every frame on a 60fps display has 16.7ms to get everything done before the next vsync — render cost, garbage collection, layout, paint. This simulator generates a realistic per-frame workload (steady render cost plus occasional GC pauses, layout thrashing and slow main-thread tasks) and plots frame time against that budget over a scrolling timeline. A frame whose workload exceeds the budget is janky: the on-screen "perceived motion" strip below the chart advances by an amount proportional to that frame's real duration rather than a fixed step, so an overrun shows up as an actual visible jump instead of just a red bar in a chart. Switch target frame rate, dial up GC pressure, or fire a layout-thrash / slow-task spike to see exactly how frame-budget math turns into the stutter users notice.