A 1280×720 fragment shader runs a short ray-march per pixel every frame (~32 steps, a soft shadow lookup, and an ambient-occlusion sample). On a GPU-accelerated Chrome this runs at 60 fps trivially. Falling back to SwiftShader (CPU rasterization) drops it to single digits and pegs CPU. Use the frame time as the signal, not the FPS number alone — the renderer is vsync-capped at 60.