zgx

zgx and GPUI

The heavy dashboard in zgx, GPUI and GPUI’s fast path on an Apple Silicon Mac, with and without PGO.

The macOS dashboard comparison runs the same heavy scene in zgx and GPUI (with and without its fast path) on an Apple Silicon Mac, three runs each of builds made with each framework’s dist profile, medians:

ModeCPU (% of a core) zgx / GPUI / GPUI fastGPU (Mcycles/s) zgx / GPUI / GPUI fastMemory (MB) zgx / GPUI / GPUI fast
idle0.00 / 0.38 / 0.400 / 0 / 059 / 88 / 93
scroll3.2 / 14.6 / 8.711.5 / 21.6 / 21.9255 / 272 / 256
stream8.5 / 22.0 / 13.916.8 / 22.1 / 21.7259 / 272 / 275
both9.1 / 23.0 / 15.916.7 / 22.0 / 21.6259 / 272 / 274

Since the previous run (7d559ad), zgx’s GPU work fell 14% in both and 5% in stream and scroll (damage drawn through a stencil of itself), and its CPU and memory held. Idle is sampled 20–35 s after launch, once the Metal driver has given its memory back, the median of five launches (why). An idle window settles at one of two levels about 25 MB apart, launch to launch (zgx’s five launches 53–79 MB, GPUI fast’s 89–95, GPUI’s 88–105): which one is the driver’s timing, not the app’s. zgx also paces every mode’s frames more evenly (99th-percentile interval 17.6 ms against 24.4–25.4 ms, with no frame late). GPUI fast’s memory in scroll varies by about 15 MB between sessions (256 MB here, 272 in the previous run), so read its memory cells with that spread. The window server’s own CPU is too noisy between separate trials to rank here. Measured in paired seconds, with the two windows taking turns, zgx’s costs the same as GPUI fast’s in stream and scroll, and at most about 2 points more in both (how, and what it depends on).

With every framework built with profile-guided optimization, each trained on its own runs (a supplement of 2026-10-24, zgx at c9975e1: no pacing captures, idle not run; latest-macos-heavy-pgo-2026-10-24-c9975e1), zgx still leads CPU and GPU in every mode:

Mode, PGOCPU (% of a core) zgx / GPUI / GPUI fastGPU (Mcycles/s) zgx / GPUI / GPUI fastMemory (MB) zgx / GPUI / GPUI fast
scroll3.0 / 14.6 / 8.112.3 / 21.6 / 21.8255 / 273 / 255
stream7.7 / 20.6 / 13.917.6 / 22.2 / 21.7259 / 273 / 275
both8.6 / 21.5 / 14.419.2 / 22.3 / 21.6260 / 274 / 276

Correction: the comparison published here on 2026-10-23/24 (zgx at 51a669c) built zgx with mimalloc, unintentionally, while GPUI used the system allocator. The table above is the re-run with the system allocator for zgx too; old and new numbers side by side.

Every scene, charted: the performance results. These are one machine’s measurements; Windows and Linux are not measured against GPUI yet. How the runs are made, and the other series, are in benchmarking.

Edit on GitHub