The measurements isolate the delegate effect within each device: the laptop rows were taken on the same machine (RTX 3060 vs i7-11800H) and the iPhone rows on the same phone. Because the model is small, the integrated GPU (20.1 ms) stays within 25% of the discrete one (16.1 ms). Falling back to the CPU (WASM) raises the per-frame time to 59.3 ms, about 3× slower, yet the resulting 21 fps still keeps the game playable. On the iPhone 12 Pro the GPU delegate runs comfortably at 33 ms, while sharing the GPU with rendering visibly widens the p50–p95 gap (33→42 ms) compared to desktop. On a phone that falls back to the CPU, 10 fps leaves the experience at the edge. In short, what really determines playability on mobile is whether WebGL (and with it the GPU delegate) is available.
The duration of MediaPipe Hand Landmarker's detectForVideo call was measured per frame: both hands visible, slow cube rotation, over a 30-second window. fps is the effective tracking rate, capped by the camera frame rate and the display refresh rate. Desktop rows were measured with Chrome 136, iPhone rows with Safari.
In the browser, MediaPipe first tries the GPU delegate via WebGL; when WebGL is unavailable it falls back to the CPU via WASM. In our measurements the CPU path is about 3× slower, but the game is still playable at that speed.
The built-in performance readout in the showcase repo (tanirim/gesture-cube) opens with the ?stats=1 parameter: it shows the active delegate, the last 30 seconds' p50/p95 values and fps. You can force the CPU path with ?delegate=cpu.