Across commits — all profile

Intel Core i9-9900K 8c/16t · 62.6 GiB · CoffeeLake-S GT2 [UHD Graphics 630] + Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (8.0 GiB) · machine id 5cf3f79c

7 runs, oldest first. Only runs from this machine are compared — a cross-machine line would be a hardware history wearing a performance history's clothes.

  1. cf5727b4 · 2026-08-10 04:38
  2. 1f324088 · 2026-08-10 18:46 — round 65 baseline: all profile after 65.1-65.9b — style-bundle measures again for the first time since round 42
  3. 44e55dc9 · 2026-08-10 21:55 — round 65.10: all profile after sparse pageRank and the flat hierarchical merge engine — both CPU-executor changes, so the v3-comparative rows move
  4. c2d24c2e · 2026-08-12 15:45 — round 68 status refresh: full core sweep, medians of 3
  5. 0d3561de · 2026-08-13 00:24 — post-merge baseline at 0d3561de: full core sweep, medians of 3
  6. 5107c36e · 2026-09-01 23:46 — round 113 review run at 5107c36e (before the 113.2 filter fix): the full core sweep, medians of 3, Node 24 — the first published run after the fingerprint re-stamp, so it is the first to compare against 13 Aug
  7. 9ed49abc · 2026-09-02 02:03 — round 113 verification run at 9ed49abc, after the 113.2 predicate-filter fix: 269 pairs, geo-mean 10.7x, minimum 1.02x, zero v4-slower; against 13 Aug zero screened regressions and the three filter(fn) rows as the improvements

Of the 759 rows that could be compared, 1 moved beyond its own measured noise, slower. 2 moved beyond it faster. 14 other row(s) moved beyond ±10% but carry no evidence about their own noise — listed below, ranked nowhere.

Drift: across the 759 row measurements shared between consecutive runs, the geometric mean change is −0.5%. A row moving near that factor is the box (thermals, load, driver), not the commit — and the frozen twin beside each mover is the same control per row, since v3 (and, for the executor sweep, the cpu side) is not what changed.

Runs are grouped by machine and by harness version. The benchmark harness has been corrected several times — most consequentially round 62.5c, which equalised inline-cache state between the v3 and v4 sides and moved v4 rows 12–35% with the library untouched. Rows measured across such a change are not comparable, so this page shows a ⋮ harness break instead of a change. Within one epoch, a change is screened against the row's own run-to-run band where the run was made with --repeat.

Slower than the previous run (beyond ±10%, evidence-backed)

rowp50changenoise controlevidencespan
compaction · control: nodes({ selected }) scan (order-list, expected parity) [peak] 22.4 µs → 25.2 µs +13% no frozen twin median of 3, band +3.9% 5107c36e → 9ed49abc

Faster than the previous run (beyond ±10%, evidence-backed)

rowp50changenoise controlevidencespan
core+collection · core: filter(fn) [gpu] 429 µs → 99.9 µs −76.7% +2.6% (v3 twin) median of 3, band +0.4% 5107c36e → 9ed49abc
materializers · sweep: filter(fn) [gpu] 265 µs → 76.3 µs −71.2% −1.2% (v3 twin) median of 3, band +1.4% 5107c36e → 9ed49abc
Moved, but unscreened 14 row(s) — one-shot, or inside their own run-to-run band. Not evidence of anything, in either direction.
rowp50changenoise controlwhy unscreenedspan
load · load: v4 ingest forms (construct + dispose) [def clone alone (control)] 301 µs → 617 µs ×2.05 no frozen twin inside the row's own 111% run-to-run band 5107c36e → 9ed49abc
curves · curve premium: edge.controlPoints x 4000 [straight] 2.70 ms → 1.43 ms −47.2% no frozen twin one-shot row (a single measurement) 5107c36e → 9ed49abc
curves · curve premium: edge.hide/show x 1000 (bundle re-fan) [curved] 4.50 ms → 3.72 ms −17.4% no frozen twin one-shot row (a single measurement) 5107c36e → 9ed49abc
style-bundle · colour-valued vs numeric reads (the string build) [gpu width (number)] 67.3 ns → 58.6 ns −12.9% no frozen twin inside the row's own 25% run-to-run band 5107c36e → 9ed49abc
compaction · control: whole-graph boundingBox (expected parity) [peak] 100 µs → 112 µs +12% no frozen twin inside the row's own 17% run-to-run band 5107c36e → 9ed49abc
core+collection · iter: map() [gpu] 10.3 µs → 11.5 µs +12% −3.2% (v3 twin) inside the row's own 16% run-to-run band 5107c36e → 9ed49abc
compaction · control: whole-graph boundingBox (expected parity) [compacted] 101 µs → 112 µs +11% no frozen twin inside the row's own 19% run-to-run band 5107c36e → 9ed49abc
style-bundle · the getters that ride readProp [gpu renderedStyle( width )] 86.8 ns → 77.2 ns −11.0% no frozen twin inside the row's own 30% run-to-run band 5107c36e → 9ed49abc
surface · dimensions: rendered dims (4 calls) [gpu] 224 ns → 249 ns +11% −2.6% (v3 twin) inside the row's own 26% run-to-run band 5107c36e → 9ed49abc
surface · collection: layoutDimensions() [gpu] 169 ns → 187 ns +11% +0.7% (v3 twin) inside the row's own 21% run-to-run band 5107c36e → 9ed49abc
algorithms · algo: floydWarshall [gpu] 127 ms → 140 ms +10% +0.2% (v3 twin) inside the row's own 14% run-to-run band 5107c36e → 9ed49abc
style-bundle · the getters that ride readProp [gpu numericStyle( width )] 67.9 ns → 61.0 ns −10.1% no frozen twin inside the row's own 26% run-to-run band 5107c36e → 9ed49abc
algorithms · algo: tarjan SCC [gpu] 169 µs → 152 µs −10.1% +1.2% (v3 twin) inside the row's own 13% run-to-run band 5107c36e → 9ed49abc
materializers · sweep: all nodes ($("node") vs filter({group})) [gpu] 57.4 µs → 63.2 µs +10% +0.5% (v3 twin) inside the row's own 11% run-to-run band 5107c36e → 9ed49abc

Every row, every run

Each cell is that run's p50 with its change against the nearest earlier run that measured the same row. A dash means the run did not measure it (a --suite filter, or the row did not exist yet) — gaps are shown, never dropped.

core+collection n=2000 · 70 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
core: getElementById() [v3]96.2 ns95.0 ns −1.2%86.7 ns −8.7%89.2 ns ⋮ harness90.8 ns +1.8%94.8 ns +4.4%93.4 ns −1.4%
core: getElementById() [gpu]86.2 ns83.1 ns −3.6%84.4 ns +1.5%91.2 ns ⋮ harness91.2 ns +0.1%91.2 ns −0.0%90.1 ns −1.3%
core: id lookup ($("#id") vs $id()) [v3]2.19 µs2.03 µs −7.5%2.00 µs −1.4%1.95 µs ⋮ harness2.03 µs +4.1%1.99 µs −1.8%2.09 µs +4.6%
core: id lookup ($("#id") vs $id()) [gpu]79.4 ns78.4 ns −1.2%76.7 ns −2.2%84.6 ns ⋮ harness84.5 ns −0.1%84.7 ns +0.3%84.6 ns −0.2%
core: nodes() [v3]421 µs419 µs −0.3%422 µs +0.6%412 µs ⋮ harness421 µs +2.2%415 µs −1.4%418 µs +0.8%
core: nodes() [gpu]8.21 ns8.20 ns −0.1%8.16 ns −0.6%8.15 ns ⋮ harness8.21 ns +0.6%8.21 ns −0.0%7.92 ns −3.5%
core: edges() [v3]733 µs742 µs +1.2%732 µs −1.4%725 µs ⋮ harness727 µs +0.3%724 µs −0.4%723 µs −0.1%
core: edges() [gpu]7.89 ns7.93 ns +0.5%8.10 ns +2.2%7.74 ns ⋮ harness7.91 ns +2.2%7.89 ns −0.2%7.73 ns −2.0%
core: elements() [v3]147 µs162 µs +10%153 µs −6.1%142 µs ⋮ harness149 µs +4.9%142 µs −4.2%145 µs +1.8%
core: elements() [gpu]6.93 ns6.94 ns +0.2%6.84 ns −1.5%6.96 ns ⋮ harness6.89 ns −1.0%6.99 ns +1.5%6.94 ns −0.8%
core: nodes ($("node") vs filter({group})) [v3]553 µs562 µs +1.6%562 µs +0.1%548 µs ⋮ harness550 µs +0.4%550 µs −0.1%539 µs −1.9%
core: nodes ($("node") vs filter({group})) [gpu]98.3 µs100 µs +1.7%99.5 µs −0.4%113 µs ⋮ harness113 µs +0.4%114 µs +1.1%114 µs −0.4%
core: selected ($(":selected") vs filter({selected})) [v3]347 µs364 µs +4.8%357 µs −1.8%346 µs ⋮ harness362 µs +4.7%329 µs −9.3%349 µs +6.2%
core: selected ($(":selected") vs filter({selected})) [gpu]25.3 µs25.6 µs +1.3%24.8 µs −3.0%24.9 µs ⋮ harness25.0 µs +0.5%25.1 µs +0.1%25.8 µs +3.0%
core: filter(fn) [v3]416 µs415 µs −0.4%423 µs +1.9%414 µs ⋮ harness424 µs +2.6%410 µs −3.4%421 µs +2.6%
core: filter(fn) [gpu]344 µs351 µs +2.0%345 µs −1.7%418 µs ⋮ harness419 µs +0.0%429 µs +2.4%99.9 µs −76.7%
core: collection() [v3]477 ns476 ns −0.1%459 ns −3.6%463 ns ⋮ harness458 ns −1.1%456 ns −0.4%459 ns +0.7%
core: collection() [gpu]68.2 ns67.4 ns −1.2%68.0 ns +1.0%64.4 ns ⋮ harness64.8 ns +0.6%65.2 ns +0.6%63.6 ns −2.5%
core: pan() get (x32) [v3]45.6 ns45.6 ns −0.1%44.5 ns −2.3%44.5 ns ⋮ harness44.5 ns +0.0%44.7 ns +0.3%44.5 ns −0.3%
core: pan() get (x32) [gpu]33.8 ns34.1 ns +0.9%33.3 ns −2.1%33.9 ns ⋮ harness33.8 ns −0.3%34.3 ns +1.5%34.3 ns −0.0%
core: extent() [v3]22.7 ns22.8 ns +0.5%22.4 ns −1.8%22.9 ns ⋮ harness22.6 ns −1.4%22.7 ns +0.6%22.5 ns −0.7%
core: extent() [gpu]20.7 ns20.8 ns +0.3%21.5 ns +3.3%20.5 ns ⋮ harness20.6 ns +0.6%21.5 ns +4.3%20.0 ns −7.0%
core: add + remove [v3]120 µs130 µs +7.9%131 µs +0.6%121 µs ⋮ harness120 µs −1.1%129 µs +7.3%127 µs −1.3%
core: add + remove [gpu]6.96 µs7.56 µs +8.7%7.50 µs −0.8%6.77 µs ⋮ harness6.77 µs +0.0%6.70 µs −1.1%6.57 µs −1.9%
core: zoom set [v3]1.28 µs1.26 µs −1.8%1.23 µs −2.5%1.33 µs ⋮ harness1.37 µs +3.2%1.36 µs −0.8%1.35 µs −0.7%
core: zoom set [gpu]662 ns704 ns +6.4%697 ns −0.9%583 ns ⋮ harness568 ns −2.5%586 ns +3.2%585 ns −0.2%
traverse: neighborhood() [v3]3.61 µs3.60 µs −0.5%3.69 µs +2.5%3.70 µs ⋮ harness3.64 µs −1.5%3.55 µs −2.6%3.58 µs +0.9%
traverse: neighborhood() [gpu]1.03 µs942 ns −8.4%1.08 µs +15%976 ns ⋮ harness972 ns −0.5%960 ns −1.2%967 ns +0.7%
traverse: connectedEdges() [v3]1.05 µs1.01 µs −3.8%1.03 µs +1.8%1.05 µs ⋮ harness1.06 µs +0.3%1.06 µs +0.2%1.07 µs +1.0%
traverse: connectedEdges() [gpu]442 ns388 ns −12.3%471 ns +21%385 ns ⋮ harness383 ns −0.6%386 ns +0.8%383 ns −0.7%
traverse: outgoers() [v3]2.38 µs2.35 µs −1.0%2.31 µs −1.8%2.44 µs ⋮ harness2.39 µs −1.9%2.43 µs +1.7%2.41 µs −0.7%
traverse: outgoers() [gpu]495 ns453 ns −8.4%531 ns +17%454 ns ⋮ harness451 ns −0.7%488 ns +8.3%473 ns −3.2%
traverse: incomers() [v3]2.42 µs2.44 µs +0.8%2.32 µs −5.2%2.42 µs ⋮ harness2.41 µs −0.3%2.44 µs +1.2%2.37 µs −2.7%
traverse: incomers() [gpu]497 ns462 ns −7.0%538 ns +17%460 ns ⋮ harness451 ns −2.1%488 ns +8.3%461 ns −5.5%
traverse: components() [v3]79.7 ms82.5 ms +3.5%78.3 ms −5.2%80.2 ms ⋮ harness81.1 ms +1.2%80.9 ms −0.3%79.9 ms −1.3%
traverse: components() [gpu]2.02 ms2.04 ms +1.4%2.03 ms −0.7%1.93 ms ⋮ harness1.94 ms +0.1%1.97 ms +1.6%1.93 ms −1.9%
degree: node.degree() [v3]3.63 µs3.37 µs −7.1%3.33 µs −1.4%3.66 µs ⋮ harness3.41 µs −6.8%3.61 µs +5.9%3.50 µs −2.9%
degree: node.degree() [gpu]28.7 ns28.3 ns −1.1%29.0 ns +2.5%41.5 ns ⋮ harness41.6 ns +0.2%41.5 ns −0.2%41.3 ns −0.5%
degree: nodes.totalDegree() [v3]7.81 ms7.29 ms −6.6%8.45 ms +16%7.27 ms ⋮ harness7.12 ms −2.0%7.24 ms +1.7%7.24 ms −0.1%
degree: nodes.totalDegree() [gpu]43.7 µs43.6 µs −0.2%50.4 µs +16%64.7 µs ⋮ harness64.2 µs −0.8%63.7 µs −0.7%64.9 µs +1.9%
degree: nodes.maxDegree() [v3]7.47 ms7.26 ms −2.9%7.31 ms +0.7%7.25 ms ⋮ harness7.19 ms −0.8%7.16 ms −0.4%7.05 ms −1.5%
degree: nodes.maxDegree() [gpu]51.6 µs51.6 µs +0.0%57.4 µs +11%75.2 µs ⋮ harness74.0 µs −1.6%73.6 µs −0.5%76.4 µs +3.8%
data: get [v3]30.1 ns30.0 ns −0.3%30.7 ns +2.2%30.0 ns ⋮ harness30.5 ns +1.5%30.4 ns −0.1%30.3 ns −0.5%
data: get [gpu]27.6 ns26.0 ns −6.0%25.9 ns −0.3%29.2 ns ⋮ harness29.1 ns −0.4%29.1 ns −0.1%29.8 ns +2.4%
position: get [v3]31.0 ns31.4 ns +1.4%33.8 ns +7.5%35.8 ns ⋮ harness31.9 ns −11.1%34.0 ns +6.7%35.2 ns +3.5%
position: get [gpu]20.9 ns20.8 ns −0.3%24.3 ns +17%21.8 ns ⋮ harness21.8 ns +0.1%21.8 ns −0.2%21.9 ns +0.5%
json: element [v3]303 ns294 ns −2.9%300 ns +1.9%300 ns ⋮ harness302 ns +0.8%300 ns −0.9%300 ns +0.2%
json: element [gpu]153 ns152 ns −0.4%160 ns +4.7%160 ns ⋮ harness159 ns −0.0%160 ns +0.2%160 ns +0.1%
set: union() [v3]102 µs94.2 µs −7.7%93.1 µs −1.1%93.3 µs ⋮ harness93.0 µs −0.3%94.9 µs +2.1%94.8 µs −0.2%
set: union() [gpu]17.2 µs18.3 µs +6.0%16.5 µs −9.6%18.1 µs ⋮ harness17.8 µs −1.8%18.1 µs +1.7%18.1 µs −0.2%
set: intersection() [v3]92.3 µs91.4 µs −0.9%90.1 µs −1.4%92.6 µs ⋮ harness92.0 µs −0.7%94.0 µs +2.2%89.5 µs −4.9%
set: intersection() [gpu]3.84 µs3.41 µs −11.1%3.48 µs +1.9%3.56 µs ⋮ harness3.51 µs −1.6%3.48 µs −0.7%3.59 µs +2.9%
set: difference() [v3]93.3 µs99.0 µs +6.1%90.5 µs −8.6%91.1 µs ⋮ harness91.7 µs +0.6%93.7 µs +2.2%90.0 µs −4.0%
set: difference() [gpu]3.92 µs3.41 µs −13.0%3.44 µs +0.9%3.54 µs ⋮ harness3.43 µs −3.0%3.44 µs +0.1%3.55 µs +3.2%
iter: map() [v3]27.1 µs23.9 µs −12.0%28.6 µs +20%29.6 µs ⋮ harness29.0 µs −1.9%28.3 µs −2.4%27.4 µs −3.2%
iter: map() [gpu]11.1 µs10.1 µs −8.6%10.4 µs +2.4%10.3 µs ⋮ harness10.3 µs +0.3%10.3 µs −0.0%11.5 µs +12%
iter: forEach() [v3]3.48 µs3.44 µs −1.0%3.45 µs +0.1%3.48 µs ⋮ harness3.49 µs +0.1%3.47 µs −0.5%3.51 µs +1.2%
iter: forEach() [gpu]3.31 µs3.31 µs −0.1%3.32 µs +0.5%3.35 µs ⋮ harness3.32 µs −0.8%3.31 µs −0.2%3.32 µs +0.2%
iter: filter(fn) [v3]245 µs240 µs −2.3%245 µs +2.3%245 µs ⋮ harness242 µs −1.3%246 µs +1.4%242 µs −1.3%
iter: filter(fn) [gpu]147 µs128 µs −12.9%130 µs +1.1%138 µs ⋮ harness133 µs −3.6%127 µs −4.1%115 µs −10.0%
compare: same() [v3]117 µs113 µs −3.5%116 µs +3.0%119 µs ⋮ harness124 µs +3.8%124 µs +0.0%121 µs −2.5%
compare: same() [gpu]14.9 ns14.8 ns −0.7%14.9 ns +0.4%14.6 ns ⋮ harness15.0 ns +2.8%14.7 ns −2.0%14.8 ns +0.3%
compare: contains() [v3]6.01 µs6.07 µs +1.1%5.97 µs −1.7%6.12 µs ⋮ harness6.12 µs −0.1%6.26 µs +2.4%6.22 µs −0.6%
compare: contains() [gpu]1.25 µs1.29 µs +2.9%1.21 µs −6.1%1.26 µs ⋮ harness1.28 µs +1.8%1.26 µs −1.5%1.24 µs −1.6%
mut: data set [v3]445 ns454 ns +2.1%417 ns −8.1%618 ns ⋮ harness642 ns +3.9%630 ns −1.9%617 ns −2.0%
mut: data set [gpu]108 ns109 ns +0.4%108 ns −0.6%230 ns ⋮ harness233 ns +1.3%231 ns −0.8%234 ns +1.2%
mut: position set [v3]1.30 µs1.22 µs −5.7%1.22 µs −0.2%1.18 µs ⋮ harness1.23 µs +4.4%1.21 µs −1.8%1.20 µs −0.6%
mut: position set [gpu]47.6 ns50.7 ns +6.6%70.4 ns +39%52.1 ns ⋮ harness53.7 ns +3.2%49.2 ns −8.4%52.3 ns +6.4%
mut: select + unselect [v3]2.76 µs2.54 µs −7.8%2.60 µs +2.3%2.43 µs ⋮ harness2.61 µs +7.4%2.61 µs +0.0%2.53 µs −2.8%
mut: select + unselect [gpu]686 ns670 ns −2.3%712 ns +6.3%610 ns ⋮ harness625 ns +2.5%620 ns −0.9%596 ns −3.9%
materializers n=2000 · 16 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
sweep: nodes() [v3]412 µs413 µs +0.1%415 µs +0.6%417 µs +0.4%437 µs +4.7%413 µs −5.6%410 µs −0.7%
sweep: nodes() [gpu]2.41 ns2.46 ns +2.1%2.41 ns −1.9%2.41 ns −0.1%2.41 ns +0.1%2.41 ns −0.1%2.41 ns +0.1%
sweep: edges() [v3]729 µs781 µs +7.1%741 µs −5.1%717 µs −3.3%739 µs +3.1%715 µs −3.2%714 µs −0.2%
sweep: edges() [gpu]2.51 ns2.56 ns +2.1%2.51 ns −2.0%2.51 ns −0.0%2.51 ns +0.0%2.51 ns −0.0%2.52 ns +0.1%
sweep: elements() [v3]143 µs144 µs +0.9%159 µs +11%139 µs −12.3%157 µs +12%141 µs −10.0%139 µs −1.6%
sweep: elements() [gpu]4.86 ns4.80 ns −1.1%4.81 ns +0.1%4.85 ns +1.0%4.85 ns −0.0%4.80 ns −1.1%4.76 ns −0.8%
sweep: all nodes ($("node") vs filter({group})) [v3]544 µs550 µs +1.1%552 µs +0.4%545 µs −1.4%574 µs +5.4%543 µs −5.4%546 µs +0.5%
sweep: all nodes ($("node") vs filter({group})) [gpu]61.2 µs58.5 µs −4.4%60.2 µs +2.9%57.5 µs −4.5%58.0 µs +0.9%57.4 µs −1.0%63.2 µs +10%
sweep: selected ($(":selected") vs filter({selected})) [v3]349 µs345 µs −1.1%359 µs +4.1%328 µs −8.6%351 µs +6.9%329 µs −6.3%339 µs +3.1%
sweep: selected ($(":selected") vs filter({selected})) [gpu]25.8 µs26.5 µs +2.4%26.3 µs −0.8%25.8 µs −1.8%26.4 µs +2.5%25.8 µs −2.4%25.7 µs −0.3%
sweep: selected nodes ($("node:selected") vs filter({group, selected})) [v3]322 µs332 µs +3.3%330 µs −0.5%318 µs −3.6%338 µs +6.0%320 µs −5.3%325 µs +1.8%
sweep: selected nodes ($("node:selected") vs filter({group, selected})) [gpu]9.01 µs9.53 µs +5.8%9.46 µs −0.8%9.03 µs −4.5%9.52 µs +5.5%9.11 µs −4.3%9.07 µs −0.4%
sweep: nodes(":selected") vs nodes({selected}) [v3]533 µs532 µs −0.3%552 µs +3.9%529 µs −4.3%556 µs +5.2%531 µs −4.6%532 µs +0.3%
sweep: nodes(":selected") vs nodes({selected}) [gpu]8.97 µs9.04 µs +0.8%8.99 µs −0.5%9.03 µs +0.4%9.37 µs +3.8%8.92 µs −4.8%8.95 µs +0.4%
sweep: filter(fn) [v3]412 µs415 µs +0.8%418 µs +0.7%409 µs −2.1%432 µs +5.6%412 µs −4.7%407 µs −1.2%
sweep: filter(fn) [gpu]242 µs246 µs +1.7%263 µs +6.6%242 µs −7.9%246 µs +1.5%265 µs +7.9%76.3 µs −71.2%
mutators n=2000 · 16 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
mut-bulk: select + unselect [v3]2.21 ms1.89 ms −14.7%1.88 ms −0.6%2.00 ms ⋮ harness2.19 ms +9.5%1.97 ms −9.9%2.12 ms +7.4%
mut-bulk: select + unselect [gpu]254 µs267 µs +5.0%264 µs −1.2%255 µs ⋮ harness278 µs +9.1%248 µs −10.9%261 µs +5.2%
mut-bulk: hide + show [v3]60.4 ms60.3 ms −0.1%60.7 ms +0.6%57.7 ms ⋮ harness59.6 ms +3.3%54.5 ms −8.6%56.4 ms +3.5%
mut-bulk: hide + show [gpu]214 µs213 µs −0.2%225 µs +5.3%216 µs ⋮ harness216 µs +0.2%214 µs −0.9%214 µs −0.2%
mut-bulk: lock + unlock [v3]1.99 ms2.00 ms +0.4%2.20 ms +10%2.09 ms ⋮ harness2.04 ms −2.8%2.06 ms +1.3%2.04 ms −0.9%
mut-bulk: lock + unlock [gpu]38.5 µs38.5 µs −0.2%38.6 µs +0.4%38.7 µs ⋮ harness38.6 µs −0.4%38.4 µs −0.5%38.3 µs −0.2%
mut-bulk: positions(obj) [v3]2.28 ms2.17 ms −4.7%2.37 ms +9.1%2.39 ms ⋮ harness2.21 ms −7.7%2.16 ms −1.8%2.28 ms +5.4%
mut-bulk: positions(obj) [gpu]20.4 µs20.6 µs +1.3%20.5 µs −0.9%37.0 µs ⋮ harness37.5 µs +1.4%36.8 µs −1.9%36.8 µs −0.0%
mut-bulk: positions(fn) [v3]3.37 ms3.45 ms +2.5%3.40 ms −1.5%3.41 ms ⋮ harness3.40 ms −0.3%3.40 ms +0.2%3.36 ms −1.4%
mut-bulk: positions(fn) [gpu]34.8 µs34.7 µs −0.2%34.8 µs +0.4%148 µs ⋮ harness146 µs −0.8%146 µs −0.3%146 µs −0.2%
mut-bulk: shift [v3]3.41 ms3.41 ms +0.1%3.66 ms +7.3%3.58 ms ⋮ harness3.41 ms −4.8%3.41 ms +0.1%3.40 ms −0.2%
mut-bulk: shift [gpu]34.3 µs34.0 µs −0.8%34.1 µs +0.2%32.3 µs ⋮ harness32.3 µs −0.1%32.3 µs +0.1%32.3 µs −0.1%
mut-bulk: data set [v3]919 µs850 µs −7.5%836 µs −1.7%907 µs ⋮ harness867 µs −4.4%876 µs +1.0%871 µs −0.5%
mut-bulk: data set [gpu]62.4 µs62.3 µs −0.2%56.5 µs −9.3%63.5 µs ⋮ harness65.6 µs +3.4%64.7 µs −1.4%65.7 µs +1.6%
mut-bulk: remove + re-add (256 nodes + cascade) [v3]41.2 ms41.4 ms +0.6%41.3 ms −0.3%41.4 ms ⋮ harness40.4 ms −2.4%41.2 ms +1.9%41.6 ms +0.9%
mut-bulk: remove + re-add (256 nodes + cascade) [gpu]6.89 ms6.73 ms −2.2%6.71 ms −0.3%6.49 ms ⋮ harness6.47 ms −0.3%6.45 ms −0.4%6.35 ms −1.6%
scenarios n=2000 · 10 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
scn: explore (expand 2-hop + select + fit) [v3]297 µs307 µs +3.4%302 µs −1.6%300 µs −0.9%290 µs −3.1%288 µs −0.8%297 µs +3.1%
scn: explore (expand 2-hop + select + fit) [gpu]37.6 µs37.6 µs −0.0%38.2 µs +1.6%37.6 µs −1.6%37.5 µs −0.2%37.0 µs −1.3%37.3 µs +0.8%
scn: select-all + fit (listeners on) [v3]25.3 ms23.9 ms −5.6%24.2 ms +1.5%25.3 ms +4.5%25.1 ms −1.1%23.7 ms −5.3%25.1 ms +5.7%
scn: select-all + fit (listeners on) [gpu]910 µs910 µs +0.1%955 µs +5.0%969 µs +1.4%922 µs −4.8%905 µs −1.9%931 µs +2.9%
scn: drag (select band of 100 + 8-step shift, position listener) [v3]1.64 ms1.64 ms +0.4%1.60 ms −2.7%1.62 ms +1.3%1.64 ms +1.1%1.63 ms −0.4%1.65 ms +1.2%
scn: drag (select band of 100 + 8-step shift, position listener) [gpu]99.9 µs102 µs +2.4%102 µs −0.8%99.9 µs −1.6%102 µs +1.6%97.7 µs −3.8%102 µs +4.0%
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) [v3]50.9 ms47.2 ms −7.3%44.6 ms −5.5%44.5 ms −0.1%47.4 ms +6.5%45.2 ms −4.7%44.6 ms −1.2%
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) [gpu]7.08 ms7.09 ms +0.1%6.88 ms −3.0%6.57 ms −4.5%6.51 ms −0.8%6.79 ms +4.2%6.53 ms −3.8%
scn: refresh (bulk data write + mapped labels + filter + fit, data listener) [v3]7.72 ms7.53 ms −2.5%7.61 ms +1.0%7.57 ms −0.5%7.74 ms +2.2%7.86 ms +1.7%7.50 ms −4.7%
scn: refresh (bulk data write + mapped labels + filter + fit, data listener) [gpu]4.20 ms4.22 ms +0.5%4.14 ms −2.0%4.23 ms +2.2%4.22 ms −0.1%4.21 ms −0.3%4.13 ms −1.9%
traversal n=2000 · 24 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
trav: neighborhood() [v3]3.91 µs4.04 µs +3.2%3.78 µs −6.4%3.97 µs +5.0%3.99 µs +0.5%4.00 µs +0.2%3.94 µs −1.4%
trav: neighborhood() [gpu]1.01 µs1.02 µs +1.2%1.02 µs +0.4%1.03 µs +0.9%1.02 µs −1.0%999 ns −2.1%1.01 µs +1.2%
trav: closedNeighborhood() [v3]5.93 µs5.55 µs −6.4%5.76 µs +3.7%5.81 µs +0.9%5.87 µs +0.9%5.64 µs −3.8%5.83 µs +3.3%
trav: closedNeighborhood() [gpu]2.16 µs2.20 µs +1.8%2.14 µs −2.8%2.20 µs +2.6%2.13 µs −2.9%2.15 µs +0.8%2.09 µs −2.9%
trav: connectedEdges() [v3]978 ns1.04 µs +6.5%990 ns −5.0%1.01 µs +1.9%980 ns −2.9%995 ns +1.6%991 ns −0.4%
trav: connectedEdges() [gpu]397 ns397 ns +0.1%388 ns −2.4%401 ns +3.4%390 ns −2.8%383 ns −1.7%388 ns +1.2%
trav: outgoers() [v3]2.32 µs2.32 µs +0.1%2.28 µs −1.7%2.29 µs +0.4%2.33 µs +1.7%2.28 µs −2.2%2.26 µs −0.6%
trav: outgoers() [gpu]452 ns439 ns −2.7%451 ns +2.6%465 ns +3.3%456 ns −2.0%449 ns −1.5%441 ns −1.8%
trav: incomers() [v3]2.28 µs2.26 µs −0.8%2.24 µs −0.8%2.31 µs +3.3%2.33 µs +0.7%2.27 µs −2.7%2.29 µs +1.0%
trav: incomers() [gpu]448 ns442 ns −1.3%454 ns +2.7%472 ns +4.0%482 ns +2.0%468 ns −2.9%466 ns −0.3%
trav: successors() [v3]442 ms428 ms −3.1%438 ms +2.4%431 ms −1.7%439 ms +1.9%432 ms −1.5%432 ms −0.1%
trav: successors() [gpu]565 µs565 µs −0.1%560 µs −0.8%599 µs +6.9%581 µs −3.0%584 µs +0.5%587 µs +0.6%
trav: predecessors() [v3]437 ms432 ms −1.1%431 ms −0.1%431 ms −0.1%437 ms +1.5%433 ms −0.9%434 ms +0.0%
trav: predecessors() [gpu]593 µs587 µs −1.1%598 µs +1.9%595 µs −0.4%597 µs +0.3%600 µs +0.4%598 µs −0.3%
trav: band neighborhood() [v3]190 µs182 µs −4.1%186 µs +1.9%184 µs −0.6%186 µs +1.0%186 µs +0.0%187 µs +0.3%
trav: band neighborhood() [gpu]38.1 µs37.3 µs −2.2%37.3 µs +0.0%36.9 µs −1.1%37.8 µs +2.6%36.6 µs −3.2%37.0 µs +0.9%
trav: band connectedEdges() [v3]24.7 µs24.0 µs −2.9%24.5 µs +2.2%24.0 µs −2.0%24.4 µs +1.7%24.9 µs +1.9%24.5 µs −1.4%
trav: band connectedEdges() [gpu]17.1 µs16.9 µs −0.8%16.6 µs −1.6%16.5 µs −0.9%16.8 µs +1.8%16.4 µs −2.7%16.7 µs +1.9%
trav: band roots() [v3]111 µs109 µs −1.8%107 µs −1.5%109 µs +1.4%108 µs −0.5%108 µs −0.3%109 µs +0.7%
trav: band roots() [gpu]4.89 µs4.90 µs +0.1%4.84 µs −1.1%4.54 µs −6.3%4.53 µs −0.1%4.52 µs −0.3%4.49 µs −0.8%
trav: band sources() [v3]6.58 µs7.01 µs +6.5%6.50 µs −7.2%6.48 µs −0.4%6.67 µs +2.9%6.65 µs −0.2%6.51 µs −2.1%
trav: band sources() [gpu]4.43 µs4.39 µs −1.1%4.38 µs −0.2%4.37 µs −0.1%4.45 µs +1.8%4.36 µs −2.1%4.38 µs +0.5%
trav: band connectedNodes() [v3]14.1 µs14.1 µs −0.0%13.9 µs −1.2%14.0 µs +0.5%14.1 µs +1.0%14.3 µs +1.1%14.1 µs −0.8%
trav: band connectedNodes() [gpu]4.98 µs4.96 µs −0.5%4.99 µs +0.6%4.96 µs −0.5%5.10 µs +2.9%4.92 µs −3.6%4.97 µs +1.0%
algorithms n=2000 · 26 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
algo: bfs (whole graph) [v3]50.3 ms56.7 ms ⋮ harness56.3 ms −0.6%50.2 ms −10.8%52.3 ms ⋮ harness51.3 ms −1.9%51.4 ms +0.1%
algo: bfs (whole graph) [gpu]915 µs918 µs ⋮ harness931 µs +1.5%866 µs −7.0%948 µs ⋮ harness881 µs −7.1%879 µs −0.3%
algo: dfs (whole graph) [v3]48.5 ms50.2 ms ⋮ harness48.4 ms −3.6%49.0 ms +1.3%50.3 ms ⋮ harness50.6 ms +0.5%48.8 ms −3.6%
algo: dfs (whole graph) [gpu]825 µs828 µs ⋮ harness849 µs +2.5%828 µs −2.4%868 µs ⋮ harness833 µs −4.0%836 µs +0.4%
algo: dijkstra + pathTo [v3]51.4 ms52.6 ms ⋮ harness54.2 ms +2.9%52.6 ms −2.9%53.2 ms ⋮ harness54.0 ms +1.5%52.1 ms −3.6%
algo: dijkstra + pathTo [gpu]925 µs931 µs ⋮ harness945 µs +1.4%938 µs −0.6%961 µs ⋮ harness951 µs −1.0%920 µs −3.3%
algo: aStar [v3]1.65 ms1.74 ms ⋮ harness1.69 ms −2.9%1.65 ms −2.6%1.70 ms ⋮ harness1.66 ms −2.1%1.64 ms −1.6%
algo: aStar [gpu]505 µs507 µs ⋮ harness509 µs +0.5%489 µs −3.9%507 µs ⋮ harness493 µs −2.8%483 µs −2.0%
algo: bellmanFord [v3]226 ms233 ms ⋮ harness237 ms +1.9%231 ms −2.8%236 ms ⋮ harness230 ms −2.8%227 ms −1.3%
algo: bellmanFord [gpu]12.2 ms11.7 ms ⋮ harness11.9 ms +2.0%11.7 ms −2.0%11.8 ms ⋮ harness11.7 ms −0.9%11.7 ms −0.0%
algo: kruskal [v3]13.6 ms13.8 ms ⋮ harness13.5 ms −2.5%13.0 ms −3.5%13.3 ms ⋮ harness13.1 ms −0.8%13.2 ms +0.2%
algo: kruskal [gpu]506 µs503 µs ⋮ harness495 µs −1.4%462 µs −6.8%510 µs ⋮ harness472 µs −7.5%461 µs −2.2%
algo: tarjan SCC [v3]23.3 ms24.4 ms ⋮ harness23.1 ms −5.3%22.4 ms −3.0%23.1 ms ⋮ harness22.8 ms −1.1%22.9 ms +0.5%
algo: tarjan SCC [gpu]652 µs647 µs ⋮ harness625 µs −3.3%673 µs +7.7%672 µs ⋮ harness653 µs −2.7%667 µs +2.0%
algo: hopcroft-tarjan biconnected [v3]85.9 ms87.8 ms ⋮ harness86.0 ms −2.1%84.9 ms −1.2%88.3 ms ⋮ harness89.5 ms +1.4%84.8 ms −5.3%
algo: hopcroft-tarjan biconnected [gpu]3.44 ms3.43 ms ⋮ harness3.48 ms +1.3%3.53 ms +1.6%3.44 ms ⋮ harness3.58 ms +4.0%3.53 ms −1.5%
algo: hierholzer (directed) [v3]22.4 ms23.2 ms ⋮ harness22.5 ms −3.0%22.4 ms −0.3%23.1 ms ⋮ harness23.2 ms +0.4%22.3 ms −3.7%
algo: hierholzer (directed) [gpu]8.07 ms7.75 ms ⋮ harness7.95 ms +2.6%7.82 ms −1.6%7.79 ms ⋮ harness7.86 ms +0.9%7.76 ms −1.3%
algo: betweennessCentrality (unweighted) [v3]3.98 s4.07 s ⋮ harness4.06 s −0.1%4.04 s −0.6%4.08 s ⋮ harness4.02 s −1.5%4.07 s +1.3%
algo: betweennessCentrality (unweighted) [gpu]344 ms359 ms ⋮ harness359 ms +0.0%360 ms +0.2%358 ms ⋮ harness356 ms −0.3%358 ms +0.6%
algo: degreeCentralityNormalized [v3]15.2 ms15.1 ms ⋮ harness14.4 ms −4.4%14.4 ms −0.4%14.6 ms ⋮ harness14.8 ms +1.4%14.6 ms −1.2%
algo: degreeCentralityNormalized [gpu]392 µs401 µs ⋮ harness402 µs +0.1%389 µs −3.2%392 µs ⋮ harness390 µs −0.4%392 µs +0.4%
algo: closenessCentrality (one root) [v3]58.9 ms60.3 ms ⋮ harness60.4 ms +0.2%59.3 ms −1.8%60.4 ms ⋮ harness60.2 ms −0.2%59.8 ms −0.7%
algo: closenessCentrality (one root) [gpu]816 µs816 µs ⋮ harness847 µs +3.8%853 µs +0.8%848 µs ⋮ harness840 µs −0.9%842 µs +0.3%
algo: degreeCentrality (one root) [v3]7.33 µs7.39 µs ⋮ harness7.51 µs +1.7%7.40 µs −1.5%7.43 µs ⋮ harness7.61 µs +2.4%7.35 µs −3.4%
algo: degreeCentrality (one root) [gpu]246 ns244 ns ⋮ harness248 ns +1.5%218 ns −12.0%216 ns ⋮ harness216 ns −0.1%218 ns +1.1%
algorithms n=500 · 50 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
algo: bfs (whole graph) [v3]13.5 ms12.8 ms ⋮ harness13.6 ms +6.1%12.7 ms −6.5%12.7 ms ⋮ harness12.5 ms −1.5%12.7 ms +2.0%
algo: bfs (whole graph) [gpu]212 µs198 µs ⋮ harness223 µs +12%224 µs +0.3%209 µs ⋮ harness222 µs +6.0%208 µs −6.1%
algo: dfs (whole graph) [v3]12.1 ms11.8 ms ⋮ harness11.5 ms −2.1%11.4 ms −1.0%11.5 ms ⋮ harness11.3 ms −2.4%11.7 ms +4.0%
algo: dfs (whole graph) [gpu]194 µs186 µs ⋮ harness183 µs −1.9%204 µs +11%203 µs ⋮ harness201 µs −1.1%204 µs +1.6%
algo: dijkstra + pathTo [v3]13.3 ms12.4 ms ⋮ harness12.4 ms −0.7%11.8 ms −4.6%12.2 ms ⋮ harness11.7 ms −3.9%12.1 ms +2.9%
algo: dijkstra + pathTo [gpu]230 µs227 µs ⋮ harness240 µs +5.5%240 µs −0.1%241 µs ⋮ harness232 µs −3.5%234 µs +0.8%
algo: aStar [v3]439 µs434 µs ⋮ harness437 µs +0.6%443 µs +1.5%443 µs ⋮ harness442 µs −0.3%442 µs +0.0%
algo: aStar [gpu]123 µs119 µs ⋮ harness124 µs +4.0%127 µs +2.2%125 µs ⋮ harness124 µs −0.5%125 µs +0.2%
algo: bellmanFord [v3]16.9 ms17.3 ms ⋮ harness17.0 ms −1.4%16.8 ms −1.0%17.1 ms ⋮ harness16.8 ms −2.1%17.7 ms +5.3%
algo: bellmanFord [gpu]808 µs805 µs ⋮ harness824 µs +2.4%824 µs −0.0%814 µs ⋮ harness823 µs +1.0%810 µs −1.5%
algo: kruskal [v3]3.42 ms3.31 ms ⋮ harness3.18 ms −4.0%3.25 ms +2.3%3.24 ms ⋮ harness3.18 ms −1.7%3.22 ms +1.0%
algo: kruskal [gpu]131 µs132 µs ⋮ harness133 µs +0.3%132 µs −0.6%128 µs ⋮ harness128 µs +0.2%126 µs −1.9%
algo: tarjan SCC [v3]5.71 ms5.63 ms ⋮ harness5.28 ms −6.2%5.34 ms +1.2%5.39 ms ⋮ harness5.29 ms −2.0%5.35 ms +1.2%
algo: tarjan SCC [gpu]151 µs147 µs ⋮ harness159 µs +8.3%159 µs −0.2%158 µs ⋮ harness169 µs +7.0%152 µs −10.1%
algo: hopcroft-tarjan biconnected [v3]22.1 ms21.6 ms ⋮ harness19.9 ms −7.9%20.9 ms +5.3%20.3 ms ⋮ harness20.0 ms −1.3%20.4 ms +1.6%
algo: hopcroft-tarjan biconnected [gpu]798 µs818 µs ⋮ harness805 µs −1.6%799 µs −0.8%817 µs ⋮ harness801 µs −1.9%825 µs +3.0%
algo: hierholzer (directed) [v3]4.57 ms4.33 ms ⋮ harness4.36 ms +0.5%4.28 ms −1.6%4.21 ms ⋮ harness4.26 ms +1.0%4.27 ms +0.2%
algo: hierholzer (directed) [gpu]822 µs801 µs ⋮ harness831 µs +3.8%821 µs −1.2%823 µs ⋮ harness819 µs −0.5%819 µs −0.0%
algo: betweennessCentrality (unweighted) [v3]255 ms264 ms ⋮ harness260 ms −1.2%253 ms −2.7%258 ms ⋮ harness254 ms −1.6%260 ms +2.3%
algo: betweennessCentrality (unweighted) [gpu]22.4 ms24.2 ms ⋮ harness20.6 ms −14.8%20.5 ms −0.8%24.0 ms ⋮ harness20.3 ms −15.5%20.2 ms −0.1%
algo: degreeCentralityNormalized [v3]3.79 ms3.69 ms ⋮ harness3.43 ms −7.1%3.52 ms +2.5%3.56 ms ⋮ harness3.45 ms −3.0%3.48 ms +0.7%
algo: degreeCentralityNormalized [gpu]94.8 µs92.7 µs ⋮ harness93.9 µs +1.4%94.8 µs +0.9%95.3 µs ⋮ harness97.3 µs +2.1%94.5 µs −2.8%
algo: closenessCentrality (one root) [v3]14.7 ms14.7 ms ⋮ harness13.4 ms −9.0%14.3 ms +6.7%13.6 ms ⋮ harness13.3 ms −2.3%13.7 ms +3.3%
algo: closenessCentrality (one root) [gpu]192 µs197 µs ⋮ harness197 µs −0.1%206 µs +4.9%204 µs ⋮ harness203 µs −0.1%201 µs −1.1%
algo: degreeCentrality (one root) [v3]8.15 µs7.72 µs ⋮ harness7.39 µs −4.3%7.60 µs +2.8%7.64 µs ⋮ harness7.50 µs −1.7%7.39 µs −1.5%
algo: degreeCentrality (one root) [gpu]242 ns241 ns ⋮ harness243 ns +1.0%216 ns −11.3%213 ns ⋮ harness213 ns −0.2%214 ns +0.7%
algo: pageRank (20 iters) [v3]2.73 ms2.76 ms ⋮ harness2.76 ms +0.0%2.81 ms +1.8%2.74 ms ⋮ harness2.74 ms +0.0%2.75 ms +0.2%
algo: pageRank (20 iters) [gpu]1.45 ms1.44 ms ⋮ harness40.1 µs −97.2%39.9 µs −0.4%39.2 µs ⋮ harness39.4 µs +0.4%39.3 µs −0.3%
algo: closenessCentrality (weighted, one root) [v3]14.7 ms14.3 ms ⋮ harness14.4 ms +1.0%13.8 ms −4.6%13.9 ms ⋮ harness13.4 ms −3.7%13.4 ms −0.3%
algo: closenessCentrality (weighted, one root) [gpu]249 µs249 µs ⋮ harness260 µs +4.2%259 µs −0.5%257 µs ⋮ harness256 µs −0.3%256 µs +0.0%
algo: floydWarshall [v3]248 ms247 ms ⋮ harness248 ms +0.4%249 ms +0.5%248 ms ⋮ harness245 ms −1.3%245 ms +0.2%
algo: floydWarshall [gpu]139 ms154 ms ⋮ harness125 ms −18.9%129 ms +3.5%140 ms ⋮ harness127 ms −9.2%140 ms +10%
algo: closenessCentralityNormalized [v3]274 ms274 ms ⋮ harness274 ms −0.2%277 ms +1.4%272 ms ⋮ harness274 ms +0.8%273 ms −0.3%
algo: closenessCentralityNormalized [gpu]164 ms163 ms ⋮ harness168 ms +2.9%155 ms −7.6%111 ms ⋮ harness112 ms +0.1%111 ms −0.4%
algo: markovClustering [v3]4.12 s4.14 s ⋮ harness4.14 s +0.1%4.17 s +0.6%4.13 s ⋮ harness4.14 s +0.3%4.10 s −1.0%
algo: markovClustering [gpu]3.29 s3.76 s ⋮ harness3.75 s −0.3%3.76 s +0.4%3.77 s ⋮ harness3.74 s −0.8%3.73 s −0.1%
algo: hierarchicalClustering (threshold) [v3]34.8 ms35.3 ms ⋮ harness34.8 ms −1.3%34.2 ms −1.7%34.7 ms ⋮ harness34.7 ms +0.0%34.4 ms −0.7%
algo: hierarchicalClustering (threshold) [gpu]15.0 ms14.2 ms ⋮ harness4.12 ms −71.0%4.12 ms +0.1%4.18 ms ⋮ harness4.19 ms +0.4%4.14 ms −1.4%
algo: kMeans (fixed centroids) [v3]8.97 ms9.12 ms ⋮ harness9.05 ms −0.8%8.94 ms −1.2%9.00 ms ⋮ harness9.06 ms +0.6%9.01 ms −0.5%
algo: kMeans (fixed centroids) [gpu]2.33 ms2.32 ms ⋮ harness1.96 ms −15.3%1.93 ms −2.0%1.94 ms ⋮ harness1.92 ms −0.9%1.98 ms +2.8%
algo: kMedoids [v3]363 ms363 ms ⋮ harness377 ms +3.8%358 ms −4.9%232 ms ⋮ harness312 ms +35%301 ms −3.5%
algo: kMedoids [gpu]42.1 ms41.9 ms ⋮ harness41.7 ms −0.4%41.2 ms −1.4%40.5 ms ⋮ harness40.5 ms +0.1%39.3 ms −2.9%
algo: fuzzyCMeans [v3]79.8 ms78.1 ms ⋮ harness78.5 ms +0.5%79.3 ms +1.0%78.6 ms ⋮ harness77.9 ms −0.9%78.8 ms +1.1%
algo: fuzzyCMeans [gpu]9.90 ms9.11 ms ⋮ harness6.95 ms −23.7%6.98 ms +0.4%6.79 ms ⋮ harness6.79 ms +0.1%6.93 ms +1.9%
algo: affinityPropagation [v3]215 ms209 ms ⋮ harness208 ms −0.2%209 ms +0.3%209 ms ⋮ harness208 ms −0.3%208 ms −0.2%
algo: affinityPropagation [gpu]121 ms40.0 ms ⋮ harness39.0 ms −2.3%40.8 ms +4.5%41.5 ms ⋮ harness42.2 ms +1.8%39.1 ms −7.3%
algo: kargerStein [v3]316 ms317 ms ⋮ harness327 ms +3.1%318 ms −2.8%321 ms ⋮ harness321 ms +0.2%322 ms +0.2%
algo: kargerStein [gpu]308 ms308 ms ⋮ harness303 ms −1.6%307 ms +1.4%301 ms ⋮ harness303 ms +0.8%306 ms +0.8%
algo: betweennessCentrality (weighted) [v3]708 ms720 ms ⋮ harness730 ms +1.4%718 ms −1.7%712 ms ⋮ harness705 ms −0.9%705 ms −0.1%
algo: betweennessCentrality (weighted) [gpu]80.0 ms79.8 ms ⋮ harness79.8 ms −0.0%81.3 ms +1.9%83.2 ms ⋮ harness82.9 ms −0.4%81.1 ms −2.1%
mappers n=2000 · 5 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
mapper: bulk write, color [cpu eval]2.68 ms2.77 ms +3.5%2.58 ms −7.1%1.31 ms −49.1%1.31 ms +0.3%1.31 ms −0.4%1.31 ms +0.0%
mapper: bulk write, color [gpu path]177 µs175 µs −1.1%176 µs +0.7%175 µs −0.2%175 µs −0.1%175 µs −0.2%175 µs +0.2%
mapper: bulk write, color + size [cpu eval]3.13 ms3.14 ms +0.1%3.19 ms +1.8%1.60 ms −50.0%1.59 ms −0.4%1.56 ms −1.9%1.57 ms +1.0%
mapper: bulk write, color + size [gpu color / cpu size]2.61 ms2.79 ms +7.1%2.70 ms −3.3%1.50 ms −44.6%1.53 ms +2.3%1.47 ms −4.1%1.47 ms +0.3%
mapper: bulk write, mapped labels (round-5 path) [label refresh]4.07 ms3.95 ms −2.8%4.08 ms +3.2%4.06 ms −0.5%4.10 ms +1.1%3.95 ms −3.7%3.97 ms +0.4%
layouts n=2000 · 29 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
layout: grid [v3]11.9 ms11.6 ms −2.2%11.5 ms −1.1%12.1 ms +5.0%12.3 ms +1.8%11.3 ms ⋮ harness11.0 ms −2.7%
layout: grid [gpu]130 µs75.5 µs −42.1%74.6 µs −1.2%129 µs +73%128 µs −0.4%127 µs ⋮ harness127 µs +0.6%
layout: preset [v3]5.59 ms5.83 ms +4.2%5.78 ms −0.8%5.75 ms −0.6%5.80 ms +1.0%5.62 ms ⋮ harness5.50 ms −2.1%
layout: preset [gpu]297 µs329 µs +11%331 µs +0.5%295 µs −10.7%293 µs −0.8%295 µs ⋮ harness296 µs +0.1%
layout: preset (fn form) [v3]5.64 ms5.56 ms −1.4%6.07 ms +9.2%5.78 ms −4.8%5.97 ms +3.3%5.55 ms ⋮ harness5.43 ms −2.2%
layout: preset (fn form) [gpu]98.3 µs96.9 µs −1.4%99.0 µs +2.1%96.3 µs −2.8%98.4 µs +2.2%150 µs ⋮ harness145 µs −3.3%
layout: circle [v3]9.43 ms9.58 ms +1.6%10.0 ms +4.5%9.65 ms −3.7%9.84 ms +2.0%9.52 ms ⋮ harness9.43 ms −1.0%
layout: circle [gpu]778 µs800 µs +2.8%770 µs −3.7%816 µs +5.9%795 µs −2.6%1.42 ms ⋮ harness1.39 ms −2.4%
layout: concentric [v3]32.1 ms31.0 ms −3.5%30.0 ms −3.1%31.6 ms +5.2%31.9 ms +1.1%31.7 ms ⋮ harness32.1 ms +1.1%
layout: concentric [gpu]1.23 ms1.21 ms −1.1%1.18 ms −3.1%1.15 ms −2.5%1.22 ms +6.3%2.05 ms ⋮ harness1.98 ms −3.9%
layout: breadthfirst [v3]398 ms410 ms +2.9%400 ms −2.3%388 ms −3.2%414 ms +6.8%387 ms ⋮ harness392 ms +1.4%
layout: breadthfirst [gpu]11.4 ms11.2 ms −1.5%11.1 ms −1.0%10.8 ms −2.4%11.0 ms +1.3%13.0 ms ⋮ harness12.5 ms −3.4%
layout: random [v3]5.53 ms5.33 ms −3.6%5.56 ms +4.3%5.76 ms +3.7%5.74 ms −0.5%5.57 ms ⋮ harness5.34 ms −4.1%
layout: random [gpu]518 µs497 µs −4.1%520 µs +4.8%537 µs +3.1%533 µs −0.6%646 µs ⋮ harness663 µs +2.8%
layout: force (CPU executor, 20 iterations) [gpu]119 ms113 ms −4.9%120 ms +5.6%114 ms −5.0%113 ms −0.5%117 ms ⋮ harness115 ms −2.1%
layout: force seed — spectral vs scatter (20 iterations) [spectral (landmark MDS, the default)]112 ms111 ms −0.9%109 ms −1.7%112 ms +2.4%113 ms +0.7%115 ms ⋮ harness110 ms −3.6%
layout: force seed — spectral vs scatter (20 iterations) [scatter]58.0 ms55.9 ms −3.7%57.0 ms +2.0%56.5 ms −1.0%56.8 ms +0.6%56.5 ms ⋮ harness57.0 ms +0.9%
layout: plumbing (layoutPositions vs setPositions) [finisher]371 µs360 µs −2.9%366 µs +1.7%356 µs −2.7%370 µs +3.9%454 µs ⋮ harness457 µs +0.8%
layout: plumbing (layoutPositions vs setPositions) [bulk]31.6 µs31.1 µs −1.5%31.6 µs +1.5%31.5 µs −0.2%31.5 µs +0.1%31.9 µs ⋮ harness32.0 µs +0.1%
layout: contract fixed cost (empty impl vs bulk placement) [wrapper only]526 ns529 ns +0.5%523 ns −1.1%521 ns −0.5%528 ns +1.4%535 ns ⋮ harness544 ns +1.8%
layout: contract fixed cost (empty impl vs bulk placement) [wrapper + bulk write]39.7 µs39.9 µs +0.5%39.3 µs −1.3%39.4 µs +0.2%39.4 µs −0.1%40.1 µs ⋮ harness39.8 µs −0.8%
layout: scope (eles.layout, 10% of nodes) [v3]958 µs969 µs +1.1%999 µs +3.1%947 µs −5.2%998 µs +5.4%987 µs ⋮ harness971 µs −1.6%
layout: scope (eles.layout, 10% of nodes) [gpu]100 µs102 µs +1.5%97.8 µs −4.1%94.1 µs −3.8%101 µs +7.0%139 µs ⋮ harness130 µs −6.9%
layout: radial vs breadthfirst-circle (unbalanced tree) [radial]2.63 ms2.49 ms −5.2%
layout: radial vs breadthfirst-circle (unbalanced tree) [breadthfirst circle]8.09 ms7.76 ms −4.1%
layout: flow vs breadthfirst (staged DAG) [flow]168 ms165 ms −1.9%
layout: flow vs breadthfirst (staged DAG) [breadthfirst]10.3 ms10.3 ms −0.4%
layout: force constrained vs plain (CPU, 20 iterations) [constrained]115 ms110 ms −4.3%
layout: force constrained vs plain (CPU, 20 iterations) [plain]110 ms109 ms −1.4%
style n=2000 · 33 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
style: sheet swap (compile + applyAll) [v3]13.1 ms12.4 ms ⋮ harness13.6 ms +9.8%13.0 ms −4.0%12.7 ms −2.3%12.5 ms −2.3%13.3 ms +6.8%
style: sheet swap (compile + applyAll) [gpu]10.8 ms10.8 ms ⋮ harness10.3 ms −4.7%2.25 ms −78.1%2.32 ms +2.8%2.30 ms −0.8%2.28 ms −0.8%
style: compile vs compile + apply [compile only (in batch)]27.3 µs32.6 µs ⋮ harness29.1 µs −10.9%24.6 µs −15.4%25.1 µs +2.2%24.4 µs −2.8%24.6 µs +0.5%
style: compile vs compile + apply [compile + apply]10.6 ms10.5 ms ⋮ harness10.1 ms −3.7%2.24 ms −77.9%2.30 ms +3.0%2.30 ms −0.3%2.25 ms −1.9%
style: first apply on add (256-node band) [v3]1.31 ms1.32 ms ⋮ harness1.33 ms +0.7%1.41 ms +6.4%1.41 ms −0.2%1.34 ms −4.7%1.40 ms +4.0%
style: first apply on add (256-node band) [gpu]833 µs820 µs ⋮ harness814 µs −0.7%726 µs −10.9%717 µs −1.2%721 µs +0.5%739 µs +2.5%
style: applyAll, flat vs compound (100 parents — the 14.6 partition) [flat]10.5 ms10.7 ms ⋮ harness10.1 ms −5.4%2.26 ms −77.7%2.30 ms +1.9%2.29 ms −0.6%2.27 ms −1.0%
style: applyAll, flat vs compound (100 parents — the 14.6 partition) [compound]11.1 ms11.3 ms ⋮ harness10.9 ms −3.4%2.72 ms −75.0%2.73 ms +0.6%2.79 ms +1.9%2.74 ms −1.8%
style: applyAll — constant vs state-case (the 57.1d partition) [constant sheet]10.4 ms10.5 ms ⋮ harness10.3 ms −2.0%2.25 ms −78.2%2.26 ms +0.5%2.32 ms +2.5%2.26 ms −2.6%
style: applyAll — constant vs state-case (the 57.1d partition) [state-case sheet]10.3 ms10.6 ms ⋮ harness10.4 ms −2.0%2.26 ms −78.3%2.28 ms +1.0%2.30 ms +0.9%2.27 ms −1.6%
style: applyAll — state-case vs data-case (what the partition avoids) [state-case sheet]10.5 ms10.8 ms ⋮ harness10.4 ms −4.3%2.24 ms −78.4%2.27 ms +1.4%2.29 ms +0.6%2.29 ms +0.1%
style: applyAll — state-case vs data-case (what the partition avoids) [data-case sheet]14.0 ms14.3 ms ⋮ harness14.5 ms +1.1%10.0 ms −30.9%10.0 ms +0.2%10.2 ms +2.0%9.93 ms −3.0%
style: select+unselect 256-band — constant vs state-case sheet [constant sheet (skips restyle)]6.76 µs6.77 µs ⋮ harness6.77 µs +0.0%6.77 µs −0.1%6.79 µs +0.3%6.75 µs −0.7%6.71 µs −0.5%
style: select+unselect 256-band — constant vs state-case sheet [paint-only state sheet (round-61 diff path)]34.7 µs34.4 µs ⋮ harness32.7 µs −5.0%32.9 µs +0.7%32.3 µs −1.8%33.8 µs +4.8%32.6 µs −3.7%
style: select+unselect 256-band — constant vs state-case sheet [state-case sheet (all channels; full write)]611 µs573 µs ⋮ harness595 µs +3.8%372 µs −37.4%376 µs +0.9%383 µs +1.9%382 µs −0.3%
style: read one prop (color) [v3]108 ns91.0 ns ⋮ harness95.0 ns +4.4%95.0 ns +0.0%96.0 ns +1.1%95.0 ns −1.0%94.0 ns −1.1%
style: read one prop (color) [gpu]56.9 ns61.3 ns ⋮ harness57.6 ns −6.0%54.8 ns −5.0%54.2 ns −1.0%56.7 ns +4.6%53.4 ns −5.9%
style: read one prop (width) [v3]111 ns109 ns ⋮ harness115 ns +5.5%115 ns +0.0%115 ns +0.0%114 ns −0.9%113 ns −0.9%
style: read one prop (width) [gpu]53.0 ns51.6 ns ⋮ harness52.6 ns +1.9%51.9 ns −1.3%51.6 ns −0.6%51.9 ns +0.5%53.3 ns +2.7%
style: numericStyle [v3]138 ns98.0 ns ⋮ harness140 ns +43%141 ns +0.7%138 ns −2.1%141 ns +2.2%139 ns −1.4%
style: numericStyle [gpu]49.8 ns49.0 ns ⋮ harness49.9 ns +1.8%48.9 ns −2.1%47.8 ns −2.1%49.3 ns +3.0%51.5 ns +4.6%
style: renderedStyle (one prop) [v3]913 ns903 ns ⋮ harness931 ns +3.1%883 ns −5.2%910 ns +3.1%879 ns −3.4%918 ns +4.4%
style: renderedStyle (one prop) [gpu]63.4 ns64.5 ns ⋮ harness62.8 ns −2.6%65.6 ns +4.5%63.6 ns −3.0%64.0 ns +0.6%68.8 ns +7.4%
style: whole-object style() [v3]87.0 µs87.3 µs ⋮ harness83.5 µs −4.5%85.5 µs +2.4%85.8 µs +0.4%84.5 µs −1.6%84.8 µs +0.3%
style: whole-object style() [gpu]14.0 µs14.0 µs ⋮ harness13.7 µs −2.1%13.8 µs +0.6%14.0 µs +1.1%14.3 µs +2.2%14.4 µs +0.8%
style: bypass set (ele.style name,value) [v3]9.97 µs10.2 µs +2.3%10.0 µs −1.9%10.2 µs +2.5%10.1 µs −1.8%10.6 µs +5.5%
style: bypass set (ele.style name,value) [gpu]3.15 µs3.10 µs −1.6%2.46 µs −20.4%2.52 µs +2.2%2.45 µs −2.6%2.57 µs +4.6%
style: bypass set + removeStyle round-trip [v3]21.7 µs20.3 µs −6.3%21.0 µs +3.3%21.1 µs +0.6%20.5 µs −2.9%20.9 µs +2.1%
style: bypass set + removeStyle round-trip [gpu]5.00 µs4.74 µs −5.1%3.60 µs −24.2%3.56 µs −1.1%3.46 µs −2.8%3.64 µs +5.3%
style: select+unselect 256-band under the default sheet — bypass punch-out [no bypasses (diff path; the O(0) gate row)]35.2 µs33.6 µs −4.6%33.7 µs +0.2%33.4 µs −0.7%34.4 µs +3.0%33.1 µs −3.9%
style: select+unselect 256-band under the default sheet — bypass punch-out [128 of 256 bypassed (punched out to merged writes)]343 µs333 µs −2.7%226 µs −32.2%233 µs +3.3%226 µs −3.0%226 µs −0.3%
style: sheet swap (applyAll) — 0 vs 128 bypasses [no bypasses]11.0 ms11.1 ms +0.9%2.43 ms −78.1%2.47 ms +1.4%2.45 ms −0.7%2.46 ms +0.5%
style: sheet swap (applyAll) — 0 vs 128 bypasses [128 bypassed]11.5 ms11.4 ms −1.2%8.90 ms −21.6%8.91 ms +0.1%8.83 ms −0.9%8.59 ms −2.7%
load n=2000 · 19 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
load: init from the definition form (construct + dispose) [v3]134 ms132 ms −1.7%136 ms +3.0%135 ms −0.7%134 ms −0.3%135 ms +0.7%133 ms −1.9%
load: init from the definition form (construct + dispose) [gpu]22.5 ms21.3 ms −5.5%22.4 ms +5.3%5.19 ms −76.9%5.03 ms −3.0%4.89 ms −2.7%5.02 ms +2.6%
load: v4 ingest forms (construct + dispose) [definition form]21.7 ms21.3 ms −2.1%21.6 ms +1.8%4.58 ms −78.8%4.50 ms −1.7%4.35 ms −3.3%4.36 ms +0.2%
load: v4 ingest forms (construct + dispose) [columnar form]12.6 ms12.5 ms −0.5%12.6 ms +0.8%3.26 ms −74.2%3.34 ms +2.3%3.28 ms −1.7%3.30 ms +0.5%
load: v4 ingest forms (construct + dispose) [wire buffer]12.1 ms12.1 ms +0.6%11.8 ms −2.7%2.86 ms −75.9%2.89 ms +1.3%2.88 ms −0.5%2.86 ms −0.6%
load: v4 ingest forms (construct + dispose) [def clone alone (control)]308 µs304 µs −1.4%300 µs −1.2%301 µs +0.2%311 µs +3.3%301 µs −3.1%617 µs ×2.05
load: conversion [toColumnarElements]709 µs708 µs −0.0%706 µs −0.3%693 µs −1.8%708 µs +2.2%692 µs −2.4%696 µs +0.6%
load: conversion [serializeElements (from columnar)]206 µs204 µs −1.2%190 µs −7.0%179 µs −5.6%180 µs +0.7%179 µs −0.5%181 µs +0.9%
load: conversion [serializeElements (from defs)]891 µs886 µs −0.6%869 µs −1.9%880 µs +1.3%886 µs +0.6%875 µs −1.2%870 µs −0.5%
load: conversion [deserializeElements]4.55 µs4.63 µs +1.9%4.60 µs −0.7%4.54 µs −1.4%4.60 µs +1.4%4.45 µs −3.3%4.59 µs +3.2%
load: export from a live graph [cy.serialize() (wire)]493 µs492 µs −0.3%501 µs +2.0%501 µs −0.1%502 µs +0.2%500 µs −0.3%499 µs −0.2%
load: export from a live graph [cy.json() (v4)]730 µs737 µs +0.9%717 µs −2.7%727 µs +1.4%716 µs −1.5%728 µs +1.6%727 µs −0.1%
load: cy.json() [v3]2.00 ms2.00 ms −0.0%2.02 ms +1.3%2.05 ms +1.3%2.00 ms −2.3%2.02 ms +0.7%2.02 ms −0.0%
load: cy.json() [gpu]746 µs742 µs −0.5%735 µs −0.9%738 µs +0.4%739 µs +0.1%722 µs −2.4%762 µs +5.5%
load: add a 256-node band (add + remove) [v3]3.65 ms3.58 ms −1.9%3.66 ms +2.3%3.67 ms +0.2%3.65 ms −0.4%3.60 ms −1.6%3.69 ms +2.5%
load: add a 256-node band (add + remove) [gpu]2.68 ms2.69 ms +0.4%2.67 ms −0.8%2.21 ms −17.2%2.22 ms +0.2%2.26 ms +2.1%2.32 ms +2.7%
load: add a 256-node band, v4 forms [definition form]2.63 ms2.61 ms −0.8%2.73 ms +4.5%2.26 ms −17.2%2.29 ms +1.3%2.22 ms −3.0%2.32 ms +4.5%
load: add a 256-node band, v4 forms [columnar form]2.24 ms2.28 ms +2.0%2.37 ms +3.7%1.71 ms −27.7%1.94 ms +14%1.89 ms −2.7%1.92 ms +1.4%
load: add a 256-node band, v4 forms [wire buffer]2.20 ms2.26 ms +2.6%2.31 ms +2.3%1.95 ms −15.6%1.92 ms −1.7%1.91 ms −0.4%1.92 ms +0.5%
spatial n=2000 · 42 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
pick: hit (the walk; one inside-test) [zoom 1]20.6 µs20.5 µs −0.6%21.0 µs +2.4%20.6 µs −1.9%20.8 µs +1.0%21.0 µs ⋮ harness20.7 µs −1.8%
pick: hit (the walk; one inside-test) [zoom 2]21.0 µs21.1 µs +0.6%21.3 µs +1.0%21.2 µs −0.5%21.1 µs −0.4%21.0 µs ⋮ harness20.8 µs −1.0%
pick: miss walk — exact vs 24 px touch halo (57.9) [exact]46.2 µs45.9 µs −0.6%47.6 µs +3.7%45.8 µs −4.0%46.6 µs +1.8%46.4 µs ⋮ harness46.2 µs −0.4%
pick: miss walk — exact vs 24 px touch halo (57.9) [padPx 24]45.6 µs44.3 µs −2.7%45.2 µs +2.0%44.5 µs −1.7%44.8 µs +0.6%44.4 µs ⋮ harness44.7 µs +0.7%
pick: shape inside-test, 2000 coincident misses [ellipse]87.2 µs87.5 µs +0.4%87.0 µs −0.6%89.0 µs +2.3%88.3 µs −0.8%87.2 µs ⋮ harness87.5 µs +0.3%
pick: shape inside-test, 2000 coincident misses [star]235 µs233 µs −0.8%234 µs +0.6%235 µs +0.4%235 µs −0.1%234 µs ⋮ harness234 µs +0.0%
pick: shape inside-test, 2000 coincident misses [round-hexagon]793 µs829 µs +4.5%808 µs −2.5%797 µs −1.3%794 µs −0.4%796 µs ⋮ harness792 µs −0.5%
pick: shape inside-test, 2000 coincident misses [barrel]681 µs689 µs +1.1%683 µs −0.7%681 µs −0.4%686 µs +0.8%696 µs ⋮ harness688 µs −1.1%
pick: shape inside-test, 2000 coincident misses [cut-rectangle]99.8 µs99.6 µs −0.2%100 µs +0.5%100 µs +0.0%100 µs +0.2%99.3 µs ⋮ harness99.6 µs +0.3%
pick: shape inside-test, 2000 coincident misses [polygon]214 µs228 µs +6.3%211 µs −7.2%212 µs +0.6%211 µs −0.4%211 µs ⋮ harness209 µs −0.7%
pick: round-hexagon inside-test by zoom (not affine-invariant) [zoom 1]802 µs827 µs +3.1%807 µs −2.4%800 µs −0.9%790 µs −1.2%796 µs ⋮ harness803 µs +0.9%
pick: round-hexagon inside-test by zoom (not affine-invariant) [zoom 2]799 µs811 µs +1.5%793 µs −2.2%790 µs −0.4%799 µs +1.1%802 µs ⋮ harness791 µs −1.4%
pick: background miss (full highWater walk) [gpu]45.1 µs45.4 µs +0.8%45.6 µs +0.4%45.2 µs −0.8%45.8 µs +1.3%44.9 µs ⋮ harness44.9 µs +0.0%
pick: label box in the scan (text-events) [text-events: no]45.3 µs45.2 µs −0.3%45.8 µs +1.5%45.1 µs −1.6%45.3 µs +0.5%44.9 µs ⋮ harness45.0 µs +0.3%
pick: label box in the scan (text-events) [text-events: yes]127 µs125 µs −1.2%125 µs −0.7%126 µs +1.1%126 µs +0.1%125 µs ⋮ harness123 µs −1.2%
box: elementsInBox by covered fraction [10%]149 µs148 µs −0.8%149 µs +0.4%149 µs +0.0%148 µs −0.3%150 µs ⋮ harness149 µs −0.9%
box: elementsInBox by covered fraction [50%]192 µs197 µs +2.4%200 µs +1.4%196 µs −1.9%193 µs −1.8%196 µs ⋮ harness197 µs +0.6%
box: elementsInBox by covered fraction [100%]324 µs344 µs +6.3%344 µs +0.0%321 µs −6.7%321 µs −0.2%325 µs ⋮ harness331 µs +2.0%
box: label containment (boxSelectionIncludesLabels) [off]230 µs231 µs +0.2%238 µs +3.1%230 µs −3.4%228 µs −0.9%229 µs ⋮ harness229 µs −0.1%
box: label containment (boxSelectionIncludesLabels) [on]264 µs261 µs −1.2%263 µs +0.7%262 µs −0.4%263 µs +0.4%264 µs ⋮ harness262 µs −0.7%
box: overlap vs contain (straight edges) [contain]235 µs241 µs +2.6%245 µs +1.6%234 µs −4.5%235 µs +0.4%239 µs ⋮ harness234 µs −1.9%
box: overlap vs contain (straight edges) [overlap]475 µs473 µs −0.5%487 µs +2.9%485 µs −0.3%508 µs +4.7%481 µs ⋮ harness463 µs −3.7%
box: overlap vs contain (curved edges — the segment walk) [contain]1.26 ms1.24 ms −1.6%1.29 ms +4.3%1.28 ms −0.8%1.28 ms −0.2%1.25 ms ⋮ harness1.25 ms −0.7%
box: overlap vs contain (curved edges — the segment walk) [overlap]2.14 ms2.13 ms −0.4%2.24 ms +5.4%2.18 ms −2.6%2.20 ms +0.8%1.21 ms ⋮ harness1.21 ms −0.1%
bounds: whole-graph boundingBox() [v3]7.64 ms7.54 ms −1.3%8.11 ms +7.5%7.76 ms −4.2%7.96 ms +2.5%7.66 ms ⋮ harness7.72 ms +0.7%
bounds: whole-graph boundingBox() [gpu]1.25 ms1.26 ms +0.5%1.28 ms +2.1%1.32 ms +3.0%1.38 ms +4.6%1.24 ms ⋮ harness1.21 ms −2.2%
bounds: boundingBox, labels in vs out (v4) [includeLabels: true (default)]1.25 ms1.26 ms +1.1%1.30 ms +3.1%1.34 ms +3.1%1.36 ms +1.1%1.25 ms ⋮ harness1.20 ms −4.0%
bounds: boundingBox, labels in vs out (v4) [includeLabels: false]715 µs693 µs −3.1%747 µs +7.8%816 µs +9.2%811 µs −0.6%657 µs ⋮ harness656 µs −0.2%
bounds: cy.fit() (whole-graph scan) [v3]7.75 ms7.46 ms −3.8%7.77 ms +4.2%7.73 ms −0.5%7.72 ms −0.0%7.55 ms ⋮ harness7.57 ms +0.2%
bounds: cy.fit() (whole-graph scan) [gpu]238 µs237 µs −0.4%238 µs +0.6%237 µs −0.3%238 µs +0.2%231 µs ⋮ harness232 µs +0.4%
bounds: getFitViewport() (compute without committing) [v3]7.85 ms7.40 ms −5.7%7.73 ms +4.5%7.70 ms −0.5%7.76 ms +0.8%7.54 ms ⋮ harness7.62 ms +1.1%
bounds: getFitViewport() (compute without committing) [gpu]235 µs233 µs −0.7%236 µs +1.6%236 µs −0.1%236 µs −0.2%231 µs ⋮ harness232 µs +0.7%
bounds: boundingBoxAt (v4 only) [gpu]2.53 ms2.71 ms +7.2%2.52 ms −7.0%2.63 ms +4.4%2.65 ms +0.7%1.49 ms ⋮ harness1.47 ms −1.2%
bounds: one node boundingBox() [v3]1.74 µs1.61 µs −7.1%1.65 µs +2.1%1.68 µs +1.8%1.64 µs −2.4%1.63 µs ⋮ harness1.64 µs +0.1%
bounds: one node boundingBox() [gpu]995 ns996 ns +0.2%1.01 µs +1.6%1.04 µs +3.1%1.01 µs −2.9%1.03 µs ⋮ harness1.00 µs −3.1%
bounds: labelBoundingBox (v4 only) [gpu]409 ns419 ns +2.3%426 ns +1.8%429 ns +0.6%427 ns −0.5%450 ns ⋮ harness415 ns −7.9%
bounds: compound + taxi conservative scan (round 54, v4 only) [warm (curve bbs memoized)]75.2 µs74.4 µs −1.1%74.4 µs +0.0%76.7 µs +3.1%75.4 µs −1.7%
bounds: compound + taxi conservative scan (round 54, v4 only) [cold (geometry write per call)]152 µs148 µs −3.0%146 µs −0.9%151 µs +2.9%149 µs −1.1%
bounds: compound + taxi exact scan (rounds 54/92, v4 only) [warm (curve bbs memoized)]19.3 µs19.2 µs −0.7%
bounds: compound + taxi exact scan (rounds 54/92, v4 only) [cold (geometry write per call)]207 µs204 µs −1.2%
bounds: straight-only scan (ndex-shaped, round 92, v4 only) [warm]34.2 µs34.1 µs −0.2%
bounds: straight-only scan (ndex-shaped, round 92, v4 only) [cold (geometry write per call)]34.4 µs34.6 µs +0.7%
data n=2000 · 32 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
data: bulk write, numeric column [v3]1.80 ms1.64 ms −8.8%1.71 ms +4.2%1.67 ms −2.0%1.78 ms +6.3%1.81 ms +1.6%1.79 ms −1.0%
data: bulk write, numeric column [gpu]84.3 µs84.3 µs +0.1%84.7 µs +0.4%84.3 µs −0.4%84.2 µs −0.1%84.9 µs +0.8%85.9 µs +1.3%
data: bulk write, dictionary string column (4 values) [v3]1.68 ms1.64 ms −2.3%1.69 ms +2.9%1.77 ms +4.6%1.77 ms +0.1%1.80 ms +1.7%1.71 ms −5.1%
data: bulk write, dictionary string column (4 values) [gpu]101 µs101 µs −0.1%101 µs −0.4%109 µs +7.8%108 µs −0.8%102 µs −5.4%103 µs +0.9%
data: bulk write, one new dictionary entry per pass [v3]1.66 ms1.65 ms −0.9%1.75 ms +6.2%1.77 ms +1.4%1.79 ms +0.8%1.84 ms +2.8%1.70 ms −7.8%
data: bulk write, one new dictionary entry per pass [gpu]99.8 µs100 µs +0.5%100 µs −0.1%99.7 µs −0.4%101 µs +1.1%98.8 µs −2.0%99.9 µs +1.1%
data: bulk write, object column (plain-array fallback) [v3]1.68 ms1.66 ms −1.5%1.72 ms +4.0%1.77 ms +2.8%1.78 ms +0.3%1.81 ms +2.0%1.71 ms −5.6%
data: bulk write, object column (plain-array fallback) [gpu]85.5 µs84.9 µs −0.7%83.9 µs −1.2%83.3 µs −0.8%83.3 µs +0.1%83.3 µs −0.0%83.8 µs +0.6%
data: removeData (whole collection) [v3]2.52 ms2.42 ms −4.2%2.57 ms +6.4%2.76 ms +7.1%2.62 ms −4.9%2.76 ms +5.4%2.53 ms −8.2%
data: removeData (whole collection) [gpu]328 µs336 µs +2.4%329 µs −2.1%328 µs −0.4%330 µs +0.8%335 µs +1.5%326 µs −2.9%
data: read one numeric key [v3]38.5 ns38.5 ns −0.1%38.4 ns −0.2%38.7 ns +0.8%38.5 ns −0.5%38.3 ns −0.6%38.3 ns +0.1%
data: read one numeric key [gpu]28.3 ns28.6 ns +0.8%27.4 ns −4.2%27.5 ns +0.3%28.6 ns +4.3%28.2 ns −1.6%30.3 ns +7.4%
data: read one string key (dictionary decode) [v3]41.8 ns41.6 ns −0.4%41.5 ns −0.4%41.9 ns +1.1%42.0 ns +0.1%41.4 ns −1.4%41.4 ns +0.1%
data: read one string key (dictionary decode) [gpu]31.4 ns31.7 ns +0.8%32.0 ns +0.9%31.1 ns −2.7%31.2 ns +0.1%31.1 ns −0.2%31.0 ns −0.2%
data: read the whole object [v3]48.0 ns48.0 ns −0.2%46.8 ns −2.4%46.2 ns −1.4%47.7 ns +3.2%45.6 ns −4.2%47.7 ns +4.6%
data: read the whole object [gpu]20.9 ns21.0 ns +0.4%21.1 ns +0.5%21.0 ns −0.7%21.0 ns +0.2%21.0 ns −0.3%21.1 ns +0.6%
query: data equality ([bucket = 3] vs { data: { bucket: 3 } }) [v3]661 µs656 µs −0.8%661 µs +0.8%664 µs +0.5%656 µs −1.2%664 µs +1.2%682 µs +2.6%
query: data equality ([bucket = 3] vs { data: { bucket: 3 } }) [gpu]52.3 µs52.0 µs −0.6%47.5 µs −8.7%46.8 µs −1.4%47.3 µs +1.0%47.6 µs +0.6%48.2 µs +1.4%
query: data comparison ([weight > 3] vs { gt }) [v3]738 µs758 µs +2.8%784 µs +3.4%751 µs −4.2%751 µs −0.0%762 µs +1.4%764 µs +0.3%
query: data comparison ([weight > 3] vs { gt }) [gpu]59.6 µs61.7 µs +3.5%70.1 µs +14%69.9 µs −0.3%71.5 µs +2.3%70.1 µs −1.9%69.2 µs −1.3%
query: two keys AND-ed [v3]777 µs791 µs +1.9%786 µs −0.7%796 µs +1.3%824 µs +3.4%801 µs −2.8%796 µs −0.6%
query: two keys AND-ed [gpu]67.0 µs68.5 µs +2.2%66.2 µs −3.5%65.9 µs −0.4%66.7 µs +1.2%67.1 µs +0.6%66.4 µs −1.0%
query: membership ([bucket in ...] vs { in }) [v3]1.01 ms1.11 ms +10%1.01 ms −9.0%1.01 ms −0.3%1.00 ms −0.2%1.02 ms +1.5%1.01 ms −1.1%
query: membership ([bucket in ...] vs { in }) [gpu]65.3 µs66.6 µs +1.9%63.8 µs −4.2%65.6 µs +2.9%65.1 µs −0.8%64.8 µs −0.6%65.0 µs +0.4%
query: predicate function (both sides) [v3]657 µs653 µs −0.6%648 µs −0.7%661 µs +2.0%651 µs −1.5%672 µs +3.3%657 µs −2.3%
query: predicate function (both sides) [gpu]98.5 µs76.6 µs −22.3%92.1 µs +20%110 µs +20%76.1 µs −30.9%90.3 µs +19%83.5 µs −7.6%
query: structural, parents (:parent vs { parent: true }) [v3]516 µs532 µs +3.1%523 µs −1.7%524 µs +0.3%515 µs −1.9%526 µs +2.1%530 µs +0.8%
query: structural, parents (:parent vs { parent: true }) [gpu]15.6 µs15.5 µs −0.6%15.5 µs −0.5%15.4 µs −0.8%15.4 µs +0.3%15.6 µs +1.3%15.2 µs −2.7%
query: structural, childless (:childless vs { parent: false }) [v3]798 µs802 µs +0.5%808 µs +0.7%804 µs −0.5%796 µs −1.0%793 µs −0.3%795 µs +0.3%
query: structural, childless (:childless vs { parent: false }) [gpu]60.5 µs60.1 µs −0.7%60.9 µs +1.3%61.3 µs +0.7%61.4 µs +0.2%60.4 µs −1.7%59.6 µs −1.2%
query: structural, orphans (:orphan vs { child: false }) [v3]503 µs509 µs +1.2%503 µs −1.2%499 µs −0.8%488 µs −2.1%504 µs +3.3%499 µs −1.0%
query: structural, orphans (:orphan vs { child: false }) [gpu]15.5 µs15.5 µs +0.3%15.3 µs −1.3%15.4 µs +0.5%15.4 µs −0.2%15.3 µs −0.3%15.4 µs +0.3%
events n=2000 · 28 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
emit: position write, no listeners [v3]1.31 µs1.28 µs −2.4%1.33 µs +4.0%1.31 µs −1.2%1.31 µs +0.1%1.31 µs −0.3%1.29 µs −1.3%
emit: position write, no listeners [gpu]45.7 ns52.3 ns +14%53.0 ns +1.3%47.3 ns −10.7%48.9 ns +3.3%51.6 ns +5.6%49.0 ns −5.1%
emit: 1 core listener [v3]1.35 µs1.38 µs +2.5%1.42 µs +2.4%1.44 µs +1.4%1.40 µs −2.5%1.40 µs −0.5%1.45 µs +4.1%
emit: 1 core listener [gpu]158 ns171 ns +8.4%166 ns −2.9%169 ns +1.4%169 ns +0.2%170 ns +0.4%164 ns −3.7%
emit: 1 element (ref-qualified) listener [v3]1.38 µs1.38 µs −0.3%1.42 µs +3.1%1.38 µs −2.8%1.41 µs +2.6%1.40 µs −0.8%1.41 µs +0.9%
emit: 1 element (ref-qualified) listener [gpu]167 ns189 ns +13%186 ns −1.6%182 ns −1.9%183 ns +0.3%182 ns −0.7%178 ns −2.0%
emit: delegated (v3 selector vs v4 predicate) [v3]1.52 µs1.46 µs −3.5%1.48 µs +1.5%1.49 µs +0.4%1.50 µs +1.0%1.46 µs −2.9%1.52 µs +4.2%
emit: delegated (v3 selector vs v4 predicate) [gpu]169 ns191 ns +13%188 ns −1.7%185 ns −1.1%183 ns −1.4%185 ns +1.4%187 ns +0.6%
emit: 10 core listeners [v3]1.92 µs1.92 µs −0.1%1.97 µs +2.6%1.93 µs −1.9%1.97 µs +2.1%1.97 µs −0.0%1.97 µs −0.3%
emit: 10 core listeners [gpu]279 ns304 ns +8.9%323 ns +6.3%319 ns −1.2%316 ns −1.0%304 ns −3.9%296 ns −2.4%
emit: on() + off() round-trip [v3]477 ns462 ns −3.1%480 ns +3.7%470 ns −1.9%460 ns −2.3%462 ns +0.5%459 ns −0.7%
emit: on() + off() round-trip [gpu]216 ns215 ns −0.5%213 ns −0.9%212 ns −0.5%216 ns +2.0%210 ns −2.5%214 ns +1.8%
emit: flat vs phased (compound bubbling, 14.5) [orphan (flat emit)]307 ns297 ns −3.3%310 ns +4.4%285 ns −8.1%305 ns +7.0%300 ns −1.6%295 ns −1.7%
emit: flat vs phased (compound bubbling, 14.5) [child of 2 ancestors (phased)]915 ns834 ns −8.8%869 ns +4.2%834 ns −4.1%850 ns +2.0%877 ns +3.1%845 ns −3.6%
emit: flat vs phased, no listeners [orphan (flat)]76.2 ns80.2 ns +5.3%83.9 ns +4.6%77.0 ns −8.2%83.5 ns +8.4%87.5 ns +4.8%80.6 ns −7.9%
emit: flat vs phased, no listeners [child (phased)]468 ns487 ns +4.1%488 ns +0.2%483 ns −0.9%506 ns +4.7%513 ns +1.4%526 ns +2.4%
anim: start + stop, one element [v3]892 ns923 ns +3.5%821 ns −11.1%870 ns +6.0%824 ns −5.3%848 ns +2.9%826 ns −2.6%
anim: start + stop, one element [gpu]650 ns634 ns −2.5%635 ns +0.2%633 ns −0.3%642 ns +1.4%630 ns −1.9%630 ns +0.0%
anim: start against a running animation (round-21 eviction) [disjoint channels (composes)]1.28 µs1.35 µs +5.6%1.32 µs −1.8%1.28 µs −3.6%1.26 µs −1.3%1.31 µs +4.0%1.29 µs −1.7%
anim: start against a running animation (round-21 eviction) [overlapping channels (evicts)]810 ns839 ns +3.6%898 ns +7.1%817 ns −9.1%813 ns −0.5%831 ns +2.3%818 ns −1.6%
anim: start + stop, 512-node collection [v3]299 µs296 µs −1.0%298 µs +0.9%297 µs −0.3%299 µs +0.5%297 µs −0.6%294 µs −0.9%
anim: start + stop, 512-node collection [gpu]99.2 µs98.4 µs −0.8%99.9 µs +1.6%98.5 µs −1.5%100 µs +1.5%99.5 µs −0.5%99.9 µs +0.4%
anim: delay() (no channels touched) [v3]656 ns637 ns −3.0%647 ns +1.5%676 ns +4.6%651 ns −3.8%653 ns +0.3%646 ns −1.0%
anim: delay() (no channels touched) [gpu]414 ns408 ns −1.6%411 ns +0.9%426 ns +3.6%411 ns −3.6%412 ns +0.2%410 ns −0.3%
anim: controls (v4 only) [pause + resume]452 ns449 ns −0.7%479 ns +6.7%458 ns −4.3%456 ns −0.5%466 ns +2.3%463 ns −0.6%
anim: controls (v4 only) [reverse]903 ns849 ns −6.0%905 ns +6.6%896 ns −1.0%873 ns −2.6%877 ns +0.5%893 ns +1.8%
anim: viewport animate + stop [v3]558 ns545 ns −2.3%575 ns +5.4%575 ns +0.0%572 ns −0.5%553 ns −3.3%558 ns +0.9%
anim: viewport animate + stop [gpu]201 ns193 ns −4.0%189 ns −2.1%191 ns +1.1%198 ns +3.7%203 ns +2.1%194 ns −4.1%
store n=2000 · 23 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
id index: set x 2000 (build) [gpu]283 µs285 µs +0.6%290 µs +1.8%264 µs −8.9%269 µs +2.1%262 µs −2.9%263 µs +0.5%
id index: single-key operations [get (probe)]57.5 ns57.3 ns −0.5%63.0 ns +10%65.8 ns +4.4%66.0 ns +0.2%66.6 ns +0.9%66.1 ns −0.7%
id index: single-key operations [has]51.3 ns51.0 ns −0.6%54.9 ns +7.8%51.6 ns −6.1%51.2 ns −0.7%51.0 ns −0.5%50.9 ns −0.1%
id index: single-key operations [idAt (memoized hit)]9.02 ns8.97 ns −0.6%8.97 ns +0.0%9.02 ns +0.5%8.97 ns −0.5%8.99 ns +0.2%8.96 ns −0.3%
id index: single-key operations [hashAt]7.01 ns6.97 ns −0.5%7.01 ns +0.5%7.01 ns +0.1%6.98 ns −0.4%7.02 ns +0.5%6.98 ns −0.6%
id index: remove + re-set (churn, drives the round-11 reclaim) [gpu]232 ns235 ns +1.3%232 ns −1.1%232 ns −0.0%231 ns −0.4%232 ns +0.3%231 ns −0.5%
adjacency: rebuild (4000 edges, two counting passes) [gpu]56.2 µs56.8 µs +1.1%57.2 µs +0.7%39.1 µs −31.6%39.1 µs +0.1%39.0 µs −0.5%39.2 µs +0.5%
adjacency: reads [outDegree (O(1))]6.19 ns6.24 ns +0.7%6.22 ns −0.3%6.26 ns +0.8%6.16 ns −1.7%6.11 ns −0.8%6.16 ns +0.8%
adjacency: reads [outEdges]45.0 ns45.4 ns +0.7%44.6 ns −1.7%45.2 ns +1.4%44.7 ns −1.2%45.1 ns +1.0%44.9 ns −0.4%
adjacency: reads [connectedEdges]124 ns119 ns −4.4%118 ns −0.8%117 ns −0.6%118 ns +0.5%119 ns +0.9%117 ns −1.1%
adjacency: addEdge + removeEdge (the overlay path) [gpu]137 ns137 ns −0.0%135 ns −0.9%140 ns +3.8%143 ns +1.6%140 ns −1.7%143 ns +1.9%
blob: write x 2000 (build) [gpu]103 µs105 µs +2.0%103 µs −1.7%104 µs +1.0%105 µs +0.5%103 µs −1.8%104 µs +0.9%
blob: single-record operations [rewrite in place (same length)]29.9 ns29.9 ns −0.2%30.3 ns +1.6%29.7 ns −2.1%30.1 ns +1.3%29.8 ns −1.0%29.5 ns −1.0%
blob: single-record operations [offsetOf]4.25 ns4.24 ns −0.2%4.28 ns +1.1%4.28 ns −0.0%4.37 ns +2.1%4.24 ns −2.9%4.24 ns +0.0%
blob: single-record operations [free + rewrite]149 ns153 ns +2.6%152 ns −0.6%152 ns +0.4%155 ns +1.5%151 ns −2.3%151 ns −0.1%
dirty: mark (per-write span coalescing) [contiguous marks]12.8 ns12.8 ns +0.4%13.0 ns +1.4%12.8 ns −1.1%12.9 ns +0.4%12.8 ns −0.8%12.7 ns −0.4%
dirty: mark (per-write span coalescing) [scattered marks]17.8 ns17.7 ns −0.5%18.1 ns +2.2%17.8 ns −2.0%17.8 ns +0.1%17.7 ns −0.4%17.7 ns +0.1%
dirty: take (a frame's drain) [gpu]598 ns590 ns −1.4%594 ns +0.7%598 ns +0.8%598 ns −0.1%590 ns −1.3%587 ns −0.4%
images: registry bookkeeping [acquire (existing url)]201 ns204 ns +1.5%210 ns +2.9%205 ns −2.4%203 ns −0.9%206 ns +1.5%202 ns −2.1%
images: registry bookkeeping [acquire (new url) + release]534 ns534 ns −0.1%534 ns −0.0%535 ns +0.2%533 ns −0.3%533 ns +0.0%531 ns −0.5%
charts: sheet apply, chart vs no chart [no chart]10.4 ms10.4 ms −0.6%10.3 ms −1.1%2.22 ms −78.3%2.28 ms +2.5%2.26 ms −0.9%2.21 ms −1.9%
charts: sheet apply, chart vs no chart [pie from data (blob record per node)]10.9 ms11.0 ms +0.7%10.9 ms −0.6%2.69 ms −75.4%2.72 ms +1.3%2.69 ms −1.4%2.65 ms −1.3%
charts: data write refreshing chart-values [gpu]2.43 ms2.37 ms −2.2%2.48 ms +4.4%1.49 ms −39.8%1.49 ms −0.4%1.48 ms −0.1%1.48 ms −0.1%
surface n=2000 · 230 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
viewport: zoom() get [v3]5.70 ns5.58 ns −2.0%5.72 ns +2.4%5.63 ns −1.5%5.59 ns −0.7%5.61 ns ⋮ harness5.68 ns +1.3%
viewport: zoom() get [gpu]1.21 ns1.21 ns −0.1%1.21 ns +0.1%1.21 ns +0.0%1.21 ns −0.0%1.21 ns ⋮ harness1.21 ns −0.0%
viewport: zoom( n ) set [v3]620 ns639 ns +3.0%621 ns −2.7%612 ns −1.5%602 ns −1.6%615 ns ⋮ harness606 ns −1.4%
viewport: zoom( n ) set [gpu]344 ns321 ns −6.6%326 ns +1.5%321 ns −1.5%326 ns +1.6%329 ns ⋮ harness326 ns −0.8%
viewport: pan() get [v3]5.27 ns5.27 ns −0.0%5.27 ns +0.0%5.43 ns +2.9%5.39 ns −0.7%5.75 ns ⋮ harness6.94 ns +21%
viewport: pan() get [gpu]4.86 ns4.86 ns −0.0%5.01 ns +3.1%4.96 ns −1.0%4.91 ns −1.1%4.86 ns ⋮ harness4.92 ns +1.0%
viewport: pan( p ) set [v3]661 ns635 ns −3.9%647 ns +1.9%611 ns −5.5%610 ns −0.1%607 ns ⋮ harness594 ns −2.1%
viewport: pan( p ) set [gpu]339 ns345 ns +1.6%330 ns −4.3%342 ns +3.7%331 ns −3.3%326 ns ⋮ harness331 ns +1.6%
viewport: panBy() [v3]615 ns602 ns −2.2%598 ns −0.6%566 ns −5.3%561 ns −1.0%587 ns ⋮ harness590 ns +0.7%
viewport: panBy() [gpu]356 ns354 ns −0.7%326 ns −7.8%344 ns +5.6%343 ns −0.3%348 ns ⋮ harness345 ns −0.9%
viewport: extent() [v3]30.6 ns29.6 ns −3.2%29.2 ns −1.3%29.7 ns +1.5%29.3 ns −1.2%29.4 ns ⋮ harness30.0 ns +2.0%
viewport: extent() [gpu]19.3 ns19.4 ns +0.7%19.3 ns −0.8%19.8 ns +2.8%19.5 ns −1.6%19.3 ns ⋮ harness19.3 ns +0.1%
viewport: renderedExtent() [v3]27.2 ns27.0 ns −1.1%27.4 ns +1.7%27.0 ns −1.6%26.8 ns −0.8%27.1 ns ⋮ harness27.1 ns +0.3%
viewport: renderedExtent() [gpu]16.5 ns16.3 ns −1.2%16.3 ns −0.1%16.5 ns +1.4%17.0 ns +2.8%16.5 ns ⋮ harness16.4 ns −0.7%
viewport: width() + height() + size() (3 calls) [v3]20.9 ns21.7 ns +3.7%20.9 ns −3.7%21.1 ns +0.7%20.9 ns −0.9%20.8 ns ⋮ harness21.4 ns +2.5%
viewport: width() + height() + size() (3 calls) [gpu]7.27 ns5.55 ns −23.7%7.39 ns +33%7.18 ns −2.8%5.55 ns −22.8%5.58 ns ⋮ harness5.55 ns −0.5%
viewport: minZoom/maxZoom get (2 calls) [v3]14.7 ns14.6 ns −0.6%15.0 ns +2.6%14.8 ns −1.4%14.8 ns +0.1%14.7 ns ⋮ harness14.8 ns +0.8%
viewport: minZoom/maxZoom get (2 calls) [gpu]0.999 ns0.999 ns −0.1%0.999 ns +0.0%0.999 ns +0.0%0.999 ns +0.0%0.998 ns ⋮ harness0.999 ns +0.1%
viewport: center( eles ) [v3]121 µs117 µs −3.2%120 µs +2.7%117 µs −2.7%122 µs +4.3%117 µs ⋮ harness119 µs +2.1%
viewport: center( eles ) [gpu]6.19 µs6.20 µs +0.2%6.20 µs −0.1%6.57 µs +6.1%6.51 µs −0.9%6.68 µs ⋮ harness6.20 µs −7.2%
viewport: reset() [v3]1.07 µs974 ns −8.6%931 ns −4.4%938 ns +0.7%927 ns −1.2%935 ns ⋮ harness939 ns +0.4%
viewport: reset() [gpu]8.83 ns8.91 ns +0.9%8.76 ns −1.7%8.96 ns +2.3%8.95 ns −0.2%8.76 ns ⋮ harness8.81 ns +0.6%
viewport: viewport({ zoom, pan }) [v3]1.01 µs970 ns −3.8%928 ns −4.4%939 ns +1.2%929 ns −1.1%920 ns ⋮ harness933 ns +1.4%
viewport: viewport({ zoom, pan }) [gpu]15.8 ns15.8 ns +0.1%15.9 ns +0.1%16.0 ns +0.7%15.9 ns −0.5%15.8 ns ⋮ harness16.2 ns +2.7%
viewport: getCenterPan( eles ) [gpu]6.26 µs6.31 µs +0.9%6.21 µs −1.7%6.59 µs +6.1%6.62 µs +0.4%6.60 µs ⋮ harness6.10 µs −7.6%
core: instanceString + headless + styleEnabled (3 calls) [v3]32.9 ns32.8 ns −0.3%32.2 ns −1.7%32.6 ns +1.3%32.3 ns −0.9%32.2 ns ⋮ harness32.1 ns −0.5%
core: instanceString + headless + styleEnabled (3 calls) [gpu]26.3 ns25.8 ns −1.7%26.0 ns +0.5%25.8 ns −0.7%25.8 ns +0.0%26.3 ns ⋮ harness25.7 ns −2.0%
core: hasElementWithId + hasCompoundNodes (2 calls) [v3]40.5 ns42.7 ns +5.4%37.5 ns −12.3%39.3 ns +4.9%35.8 ns −8.8%38.4 ns ⋮ harness37.6 ns −2.3%
core: hasElementWithId + hasCompoundNodes (2 calls) [gpu]31.8 ns31.5 ns −0.9%31.5 ns +0.2%33.0 ns +4.6%32.0 ns −3.1%32.8 ns ⋮ harness31.8 ns −3.1%
core: options() [v3]91.5 ns89.8 ns −1.9%90.6 ns +0.9%93.4 ns +3.2%90.6 ns −3.0%90.9 ns ⋮ harness91.1 ns +0.2%
core: options() [gpu]1.07 ns1.07 ns −0.1%1.07 ns +0.0%1.07 ns +0.3%1.07 ns −0.3%1.07 ns ⋮ harness1.07 ns +0.0%
core: mutableElements() (v4 materializes; v3 is O(1)) [v3]3.19 ns3.19 ns −0.1%3.26 ns +2.3%3.19 ns −2.2%3.19 ns −0.0%
core: mutableElements() (v4 materializes; v3 is O(1)) [gpu]2.35 ns2.35 ns −0.0%2.35 ns +0.0%2.35 ns −0.0%2.35 ns −0.0%
core: gating getters (5 calls) [v3]15.7 ns15.6 ns −0.2%15.2 ns −3.1%15.7 ns +3.4%15.5 ns −1.3%15.6 ns ⋮ harness15.6 ns +0.0%
core: gating getters (5 calls) [gpu]13.5 ns13.8 ns +1.8%13.6 ns −1.0%13.3 ns −2.6%13.5 ns +1.6%13.3 ns ⋮ harness13.5 ns +1.0%
core: gating setters round-trip (autolock/autoungrabify/autounselectify) [v3]11.2 ns11.2 ns −0.0%11.3 ns +0.5%11.4 ns +1.7%11.2 ns −2.4%11.2 ns ⋮ harness11.2 ns −0.0%
core: gating setters round-trip (autolock/autoungrabify/autounselectify) [gpu]6.06 ns6.00 ns −0.9%6.01 ns +0.1%6.03 ns +0.4%6.00 ns −0.5%6.00 ns ⋮ harness6.01 ns +0.0%
core: interaction tuning getters (5 calls) [gpu]7.15 ns7.30 ns +2.1%7.30 ns +0.0%7.26 ns −0.6%7.25 ns −0.1%7.30 ns ⋮ harness7.30 ns −0.0%
core: graph data() set + get (v3 restyles the graph) [v3]2.78 ms2.81 ms +1.3%2.84 ms +0.9%2.68 ms −5.7%2.74 ms +2.5%2.76 ms ⋮ harness2.84 ms +3.2%
core: graph data() set + get (v3 restyles the graph) [gpu]322 ns340 ns +5.4%335 ns −1.5%329 ns −1.8%330 ns +0.5%329 ns ⋮ harness328 ns −0.0%
core: graph scratch() set + get (v3 restyles the graph) [v3]2.79 ms2.83 ms +1.4%2.86 ms +0.9%2.71 ms −5.2%2.77 ms +2.4%2.79 ms ⋮ harness2.74 ms −1.9%
core: graph scratch() set + get (v3 restyles the graph) [gpu]168 ns166 ns −1.4%167 ns +0.5%165 ns −1.0%166 ns +0.4%169 ns ⋮ harness169 ns +0.1%
core: batch( fn ) (empty) [v3]567 ns542 ns −4.4%532 ns −1.8%533 ns +0.2%533 ns −0.1%545 ns ⋮ harness524 ns −3.9%
core: batch( fn ) (empty) [gpu]83.9 ns82.9 ns −1.2%83.9 ns +1.2%84.9 ns +1.1%83.7 ns −1.3%82.6 ns ⋮ harness83.7 ns +1.2%
core: startBatch + endBatch + batching [v3]532 ns523 ns −1.8%516 ns −1.4%530 ns +2.8%540 ns +1.8%537 ns ⋮ harness526 ns −2.1%
core: startBatch + endBatch + batching [gpu]91.3 ns89.7 ns −1.7%90.1 ns +0.3%89.6 ns −0.5%90.4 ns +0.8%90.7 ns ⋮ harness89.8 ns −0.9%
core: collection() [v3]446 ns452 ns +1.4%476 ns +5.2%448 ns −5.8%451 ns +0.7%447 ns ⋮ harness451 ns +0.9%
core: collection() [gpu]61.7 ns62.0 ns +0.5%59.9 ns −3.3%62.0 ns +3.4%64.6 ns +4.2%62.1 ns ⋮ harness62.4 ns +0.5%
core: compact() (no dead slots — the early-out) [gpu]16.9 µs16.9 µs +0.3%16.9 µs +0.0%17.0 µs +0.2%16.7 µs −1.4%16.7 µs ⋮ harness16.9 µs +0.8%
collection: element accessors (id/group/isNode/isEdge, 4 calls) [v3]60.6 ns60.6 ns −0.1%60.6 ns +0.1%60.8 ns +0.3%60.6 ns −0.4%60.1 ns ⋮ harness60.5 ns +0.6%
collection: element accessors (id/group/isNode/isEdge, 4 calls) [gpu]33.8 ns34.6 ns +2.1%34.7 ns +0.5%34.5 ns −0.7%34.8 ns +0.7%34.5 ns ⋮ harness34.3 ns −0.8%
collection: length + empty + nonempty (3 calls) [v3]6.60 ns6.78 ns +2.8%6.72 ns −1.0%6.72 ns +0.0%6.68 ns −0.6%6.70 ns ⋮ harness6.66 ns −0.6%
collection: length + empty + nonempty (3 calls) [gpu]1.47 ns1.47 ns −0.0%1.47 ns +0.0%1.47 ns +0.1%1.47 ns −0.0%1.47 ns ⋮ harness1.47 ns +0.0%
collection: eq/first/last (3 calls) [v3]15.1 ns15.3 ns +1.0%15.4 ns +0.6%15.2 ns −1.3%15.2 ns −0.0%15.1 ns ⋮ harness15.2 ns +0.5%
collection: eq/first/last (3 calls) [gpu]8.24 ns8.24 ns +0.0%6.50 ns −21.1%6.64 ns +2.2%8.09 ns +22%8.24 ns ⋮ harness8.30 ns +0.7%
collection: slice() [v3]3.80 µs3.81 µs +0.2%3.87 µs +1.6%3.73 µs −3.5%3.71 µs −0.6%3.73 µs ⋮ harness3.83 µs +2.6%
collection: slice() [gpu]1.79 µs1.73 µs −3.3%1.72 µs −0.2%1.72 µs −0.0%1.70 µs −1.1%1.71 µs ⋮ harness1.70 µs −0.6%
collection: toArray() [v3]8.92 µs8.85 µs −0.7%8.79 µs −0.7%8.85 µs +0.7%8.80 µs −0.6%8.94 µs ⋮ harness8.66 µs −3.2%
collection: toArray() [gpu]751 ns759 ns +1.0%746 ns −1.7%757 ns +1.5%754 ns −0.4%739 ns ⋮ harness734 ns −0.6%
collection: sort( fn ) [v3]14.1 µs14.5 µs +2.9%14.6 µs +0.8%14.7 µs +0.8%14.2 µs −3.3%14.2 µs ⋮ harness14.1 µs −0.6%
collection: sort( fn ) [gpu]8.97 µs9.08 µs +1.3%9.10 µs +0.2%9.10 µs +0.0%9.06 µs −0.4%8.97 µs ⋮ harness9.02 µs +0.6%
collection: reduce( fn ) [v3]157 ns157 ns −0.2%157 ns −0.0%157 ns +0.2%157 ns +0.3%156 ns ⋮ harness157 ns +0.3%
collection: reduce( fn ) [gpu]113 ns112 ns −1.3%114 ns +1.9%112 ns −2.0%112 ns +0.2%111 ns ⋮ harness114 ns +1.8%
collection: min + max ( fn ) (2 calls) [v3]11.3 µs11.0 µs −2.4%11.1 µs +0.4%11.3 µs +1.8%11.0 µs −2.7%10.9 µs ⋮ harness11.1 µs +1.6%
collection: min + max ( fn ) (2 calls) [gpu]5.56 µs5.64 µs +1.3%5.67 µs +0.6%5.60 µs −1.3%5.60 µs +0.1%5.54 µs ⋮ harness5.49 µs −1.0%
collection: some + every (2 calls) [v3]887 ns894 ns +0.8%885 ns −1.0%894 ns +1.0%894 ns +0.0%887 ns ⋮ harness878 ns −1.0%
collection: some + every (2 calls) [gpu]565 ns557 ns −1.4%551 ns −1.1%551 ns +0.0%562 ns +2.0%559 ns ⋮ harness554 ns −1.0%
collection: same + anySame + contains (3 calls) [v3]7.28 µs7.50 µs +3.1%7.71 µs +2.8%7.58 µs −1.7%7.33 µs −3.3%7.49 µs ⋮ harness7.20 µs −3.8%
collection: same + anySame + contains (3 calls) [gpu]101 ns99.5 ns −1.2%100 ns +0.8%101 ns +1.1%100 ns −0.9%102 ns ⋮ harness101 ns −1.7%
collection: allAre (all match: the full walk) [v3]3.75 µs3.63 µs −3.1%3.68 µs +1.3%3.64 µs −0.9%3.66 µs +0.4%3.61 µs ⋮ harness3.65 µs +1.2%
collection: allAre (all match: the full walk) [gpu]2.47 µs2.48 µs +0.4%2.45 µs −1.3%2.34 µs −4.2%2.45 µs +4.6%2.56 µs ⋮ harness2.46 µs −4.0%
collection: is (none match: the full walk) [v3]5.65 µs5.73 µs +1.4%5.58 µs −2.6%5.67 µs +1.6%5.66 µs −0.1%5.59 µs ⋮ harness5.53 µs −1.1%
collection: is (none match: the full walk) [gpu]2.62 µs2.29 µs −12.6%2.37 µs +3.7%2.27 µs −4.5%2.38 µs +5.1%2.50 µs ⋮ harness2.36 µs −5.7%
collection: union [v3]94.7 µs95.4 µs +0.7%92.8 µs −2.7%98.3 µs +5.9%95.3 µs −3.0%96.6 µs ⋮ harness93.8 µs −2.9%
collection: union [gpu]15.1 µs15.1 µs −0.1%16.2 µs +7.8%16.4 µs +1.2%16.2 µs −1.3%16.3 µs ⋮ harness16.4 µs +0.5%
collection: intersection [v3]89.7 µs92.5 µs +3.1%90.9 µs −1.7%93.5 µs +2.8%90.4 µs −3.2%92.2 µs ⋮ harness92.8 µs +0.7%
collection: intersection [gpu]3.31 µs3.31 µs −0.1%3.17 µs −4.3%3.21 µs +1.3%3.20 µs −0.3%3.21 µs ⋮ harness3.21 µs +0.1%
collection: difference [v3]90.5 µs92.6 µs +2.3%92.1 µs −0.5%93.0 µs +1.0%92.3 µs −0.8%93.6 µs ⋮ harness91.6 µs −2.2%
collection: difference [gpu]3.25 µs3.27 µs +0.6%3.20 µs −1.9%3.16 µs −1.4%3.16 µs +0.1%3.20 µs ⋮ harness3.18 µs −0.5%
collection: symmetricDifference [v3]24.7 µs25.4 µs +2.8%25.3 µs −0.3%24.6 µs −2.7%25.7 µs +4.3%24.9 µs ⋮ harness24.7 µs −0.8%
collection: symmetricDifference [gpu]6.73 µs6.76 µs +0.4%6.62 µs −2.0%6.58 µs −0.7%6.67 µs +1.4%6.69 µs ⋮ harness6.50 µs −2.8%
collection: absoluteComplement [v3]6.03 ms6.19 ms +2.7%6.04 ms −2.5%6.23 ms +3.2%6.37 ms +2.1%6.34 ms ⋮ harness6.01 ms −5.1%
collection: absoluteComplement [gpu]462 µs462 µs +0.1%417 µs −9.9%410 µs −1.6%409 µs −0.1%407 µs ⋮ harness408 µs +0.3%
collection: byGroup [v3]979 µs998 µs +1.9%1.01 ms +1.4%995 µs −1.7%1.00 ms +1.0%1.01 ms ⋮ harness1.00 ms −0.8%
collection: byGroup [gpu]380 µs375 µs −1.3%334 µs −11.1%328 µs −1.6%326 µs −0.7%322 µs ⋮ harness326 µs +1.4%
collection: diff [v3]34.5 µs37.6 µs +9.1%37.2 µs −1.0%37.3 µs +0.2%37.7 µs +1.1%36.4 µs ⋮ harness35.5 µs −2.5%
collection: diff [gpu]11.8 µs11.8 µs −0.3%11.4 µs −3.3%11.3 µs −0.8%11.4 µs +0.8%11.6 µs ⋮ harness11.5 µs −0.9%
collection: indexOf [v3]32.7 ns29.9 ns −8.4%28.7 ns −4.1%34.9 ns +22%31.6 ns −9.5%32.2 ns ⋮ harness31.6 ns −2.0%
collection: indexOf [gpu]23.2 ns23.2 ns −0.1%23.2 ns +0.1%23.4 ns +0.6%23.4 ns +0.2%23.4 ns ⋮ harness23.4 ns −0.0%
traversal: openNeighborhood + closedNeighborhood (2 calls) [v3]9.45 µs9.24 µs −2.2%9.71 µs +5.1%9.54 µs −1.7%9.45 µs −1.0%9.33 µs ⋮ harness9.30 µs −0.3%
traversal: openNeighborhood + closedNeighborhood (2 calls) [gpu]3.22 µs3.25 µs +0.9%3.28 µs +1.0%3.25 µs −1.0%3.17 µs −2.6%3.16 µs ⋮ harness3.21 µs +1.7%
traversal: connectedNodes [v3]984 ns979 ns −0.5%1.13 µs +15%1.02 µs −9.4%1.01 µs −0.9%970 ns ⋮ harness1.01 µs +3.7%
traversal: connectedNodes [gpu]301 ns298 ns −0.9%303 ns +1.5%311 ns +2.8%301 ns −3.4%303 ns ⋮ harness300 ns −0.7%
traversal: sources + targets (2 calls) [v3]1.74 µs1.73 µs −0.5%1.74 µs +0.1%1.77 µs +2.1%1.69 µs −4.8%1.72 µs ⋮ harness1.72 µs +0.3%
traversal: sources + targets (2 calls) [gpu]513 ns525 ns +2.3%514 ns −2.0%528 ns +2.6%520 ns −1.4%539 ns ⋮ harness508 ns −5.7%
traversal: source() + target() (2 calls) [v3]71.6 ns72.6 ns +1.4%75.6 ns +4.2%77.4 ns +2.3%77.3 ns −0.1%74.7 ns ⋮ harness71.9 ns −3.8%
traversal: source() + target() (2 calls) [gpu]56.5 ns57.0 ns +0.9%56.5 ns −0.8%57.3 ns +1.3%56.8 ns −0.8%56.2 ns ⋮ harness56.0 ns −0.4%
traversal: edgesWith [v3]68.1 µs71.2 µs +4.6%69.9 µs −1.8%68.3 µs −2.3%67.7 µs −0.8%68.8 µs ⋮ harness67.6 µs −1.7%
traversal: edgesWith [gpu]56.2 µs57.1 µs +1.6%57.7 µs +1.1%53.5 µs −7.3%53.2 µs −0.7%53.3 µs ⋮ harness54.0 µs +1.3%
traversal: edgesTo [v3]68.6 µs72.7 µs +6.0%70.2 µs −3.4%68.2 µs −2.9%67.6 µs −0.9%69.7 µs ⋮ harness68.8 µs −1.4%
traversal: edgesTo [gpu]58.8 µs58.7 µs −0.3%59.5 µs +1.5%53.2 µs −10.6%53.7 µs +0.9%53.1 µs ⋮ harness53.8 µs +1.3%
traversal: parallelEdges + codirectedEdges (2 calls) [v3]3.57 µs3.52 µs −1.3%3.52 µs +0.0%3.75 µs +6.4%3.59 µs −4.2%3.56 µs ⋮ harness3.52 µs −1.2%
traversal: parallelEdges + codirectedEdges (2 calls) [gpu]1.07 µs1.15 µs +7.1%1.21 µs +5.0%1.08 µs −10.3%988 ns −8.7%1.04 µs ⋮ harness1.05 µs +0.9%
traversal: roots + leaves (2 calls) [v3]5.15 ms4.99 ms −2.9%5.75 ms +15%5.05 ms −12.1%5.04 ms −0.3%4.88 ms ⋮ harness5.17 ms +6.0%
traversal: roots + leaves (2 calls) [gpu]345 µs342 µs −1.1%342 µs +0.2%387 µs +13%392 µs +1.2%389 µs ⋮ harness386 µs −0.8%
traversal: allAreNeighbors [v3]198 µs195 µs −1.1%199 µs +1.6%198 µs −0.4%202 µs +2.3%198 µs ⋮ harness194 µs −2.1%
traversal: allAreNeighbors [gpu]38.9 µs38.7 µs −0.4%38.6 µs −0.4%37.3 µs −3.2%37.3 µs −0.1%37.2 µs ⋮ harness37.2 µs −0.2%
traversal: isLoop + isSimple (2 calls) [v3]126 ns127 ns +0.5%132 ns +3.8%156 ns +19%135 ns −13.8%131 ns ⋮ harness128 ns −2.5%
traversal: isLoop + isSimple (2 calls) [gpu]53.9 ns51.2 ns −5.0%53.5 ns +4.6%50.3 ns −6.0%58.7 ns +17%49.3 ns ⋮ harness49.4 ns +0.2%
degree: indegree + outdegree (2 calls) [v3]3.50 µs3.52 µs +0.6%3.35 µs −4.6%3.59 µs +7.1%3.51 µs −2.4%3.53 µs ⋮ harness3.43 µs −2.9%
degree: indegree + outdegree (2 calls) [gpu]48.8 ns50.1 ns +2.7%49.0 ns −2.3%46.8 ns −4.5%46.4 ns −0.8%46.4 ns ⋮ harness46.0 ns −0.9%
degree: minDegree + maxDegree (2 calls) [v3]15.7 ms17.9 ms +14%15.9 ms −10.9%16.3 ms +2.4%16.4 ms +0.5%15.9 ms ⋮ harness15.9 ms −0.0%
degree: minDegree + maxDegree (2 calls) [gpu]453 µs443 µs −2.1%441 µs −0.6%370 µs −16.1%388 µs +4.9%368 µs ⋮ harness364 µs −1.3%
degree: minIndegree + maxOutdegree (2 calls) [v3]9.30 ms9.16 ms −1.5%8.91 ms −2.8%9.22 ms +3.5%9.17 ms −0.5%9.07 ms ⋮ harness8.95 ms −1.4%
degree: minIndegree + maxOutdegree (2 calls) [gpu]434 µs426 µs −1.6%423 µs −0.7%359 µs −15.1%376 µs +4.8%357 µs ⋮ harness355 µs −0.5%
dimensions: renderedPosition get [v3]74.1 ns67.2 ns −9.4%74.8 ns +11%73.7 ns −1.4%74.5 ns +1.1%73.8 ns ⋮ harness69.4 ns −5.9%
dimensions: renderedPosition get [gpu]29.5 ns29.9 ns +1.4%29.3 ns −2.2%30.5 ns +4.2%29.8 ns −2.4%29.2 ns ⋮ harness30.3 ns +3.9%
dimensions: relativePosition get [v3]837 ns838 ns +0.0%858 ns +2.4%860 ns +0.2%838 ns −2.5%832 ns ⋮ harness842 ns +1.2%
dimensions: relativePosition get [gpu]72.5 ns73.6 ns +1.5%76.1 ns +3.5%76.1 ns +0.0%77.9 ns +2.3%79.4 ns ⋮ harness73.2 ns −7.8%
dimensions: width + height + outerWidth + outerHeight (4 calls) [v3]594 ns604 ns +1.7%617 ns +2.2%618 ns +0.2%611 ns −1.1%615 ns ⋮ harness602 ns −2.1%
dimensions: width + height + outerWidth + outerHeight (4 calls) [gpu]242 ns232 ns −3.9%210 ns −9.6%232 ns +10%212 ns −8.6%219 ns ⋮ harness241 ns +9.8%
dimensions: rendered dims (4 calls) [v3]696 ns700 ns +0.6%717 ns +2.4%717 ns +0.1%707 ns −1.5%706 ns ⋮ harness687 ns −2.6%
dimensions: rendered dims (4 calls) [gpu]237 ns245 ns +3.4%216 ns −11.5%238 ns +10%228 ns −4.5%224 ns ⋮ harness249 ns +11%
dimensions: renderedBoundingBox [v3]1.74 µs1.73 µs −0.5%1.81 µs +4.3%1.79 µs −1.1%1.71 µs −4.0%1.69 µs ⋮ harness1.76 µs +4.3%
dimensions: renderedBoundingBox [gpu]911 ns933 ns +2.4%914 ns −2.0%926 ns +1.3%935 ns +0.9%926 ns ⋮ harness918 ns −0.9%
dimensions: midpoint + renderedMidpoint (2 calls) [gpu]1.10 µs1.22 µs +11%1.13 µs −7.8%1.17 µs +3.3%1.17 µs +0.5%1.17 µs ⋮ harness1.10 µs −6.7%
dimensions: source/targetEndpoint (2 calls) [gpu]381 ns405 ns +6.4%379 ns −6.4%386 ns +1.8%377 ns −2.4%380 ns ⋮ harness363 ns −4.4%
dimensions: rendered source/targetEndpoint (2 calls) [gpu]393 ns421 ns +7.1%389 ns −7.7%408 ns +5.0%399 ns −2.1%389 ns ⋮ harness384 ns −1.5%
dimensions: shift + silentShift (round-trip) [v3]291 µs293 µs +0.9%297 µs +1.2%292 µs −1.6%299 µs +2.3%289 µs ⋮ harness293 µs +1.5%
dimensions: shift + silentShift (round-trip) [gpu]4.85 µs4.77 µs −1.6%4.84 µs +1.4%4.82 µs −0.4%4.82 µs +0.1%4.82 µs ⋮ harness4.91 µs +1.9%
dimensions: silentPosition [v3]897 ns868 ns −3.2%850 ns −2.1%903 ns +6.2%874 ns −3.2%870 ns ⋮ harness873 ns +0.3%
dimensions: silentPosition [gpu]52.7 ns56.6 ns +7.3%55.8 ns −1.3%55.8 ns +0.1%56.6 ns +1.4%56.6 ns ⋮ harness53.2 ns −5.9%
dimensions: positions( fn ) over 100 [v3]169 µs175 µs +3.1%177 µs +1.3%178 µs +0.5%178 µs +0.1%175 µs ⋮ harness180 µs +2.8%
dimensions: positions( fn ) over 100 [gpu]3.06 µs3.05 µs −0.3%3.89 µs +28%3.54 µs −9.1%3.53 µs −0.2%3.48 µs ⋮ harness3.54 µs +1.6%
dimensions: padding + paddedWidth + paddedHeight (3 calls) [v3]1.99 µs2.02 µs +1.4%2.01 µs −0.5%2.03 µs +0.9%2.04 µs +0.3%2.02 µs ⋮ harness2.01 µs −0.3%
dimensions: padding + paddedWidth + paddedHeight (3 calls) [gpu]133 ns160 ns +20%142 ns −10.8%161 ns +13%153 ns −5.5%150 ns ⋮ harness162 ns +7.9%
curves: isBundledBezier [gpu]20.6 ns24.9 ns +21%20.5 ns −17.8%25.4 ns +24%33.5 ns +32%20.6 ns ⋮ harness20.7 ns +0.7%
curves: controlPoints + renderedControlPoints (2 calls) [gpu]525 ns545 ns +3.9%540 ns −1.0%532 ns −1.4%534 ns +0.4%527 ns ⋮ harness525 ns −0.3%
curves: segmentPoints (undefined for bezier) [gpu]33.2 ns41.9 ns +26%33.1 ns −21.0%41.9 ns +26%41.6 ns −0.7%33.4 ns ⋮ harness33.3 ns −0.3%
compound: parent + parents + ancestors (3 calls) [v3]3.03 µs2.89 µs −4.8%3.12 µs +8.0%3.06 µs −1.9%2.91 µs −4.7%2.99 µs ⋮ harness2.92 µs −2.3%
compound: parent + parents + ancestors (3 calls) [gpu]835 ns821 ns −1.6%802 ns −2.3%817 ns +1.8%792 ns −3.1%832 ns ⋮ harness802 ns −3.5%
compound: children + descendants + siblings (3 calls) [v3]8.78 µs9.05 µs +3.1%8.90 µs −1.7%8.79 µs −1.2%8.60 µs −2.2%8.53 µs ⋮ harness8.52 µs −0.2%
compound: children + descendants + siblings (3 calls) [gpu]1.93 µs1.83 µs −4.9%1.83 µs −0.3%1.83 µs −0.1%1.81 µs −0.9%1.82 µs ⋮ harness1.78 µs −2.1%
compound: orphans + nonorphans (2 calls) [v3]3.67 µs3.71 µs +1.0%3.71 µs −0.0%3.71 µs +0.1%3.67 µs −1.2%3.72 µs ⋮ harness3.64 µs −2.1%
compound: orphans + nonorphans (2 calls) [gpu]556 ns531 ns −4.7%528 ns −0.5%539 ns +2.1%523 ns −3.0%534 ns ⋮ harness517 ns −3.2%
compound: commonAncestors [v3]10.0 µs9.50 µs −5.3%9.72 µs +2.4%9.59 µs −1.4%9.61 µs +0.2%9.60 µs ⋮ harness9.40 µs −2.1%
compound: commonAncestors [gpu]76.7 ns74.5 ns −2.9%74.8 ns +0.5%77.1 ns +2.9%75.6 ns −1.8%75.3 ns ⋮ harness77.7 ns +3.2%
compound: isParent/isChild/isChildless/isOrphan (4 calls) [v3]71.7 ns70.5 ns −1.7%70.8 ns +0.4%70.6 ns −0.2%70.6 ns −0.1%71.7 ns ⋮ harness67.4 ns −6.1%
compound: isParent/isChild/isChildless/isOrphan (4 calls) [gpu]45.6 ns45.2 ns −0.7%46.2 ns +2.2%45.3 ns −1.9%45.1 ns −0.5%45.3 ns ⋮ harness45.4 ns +0.3%
flags: select + unselect + selected (band) [v3]193 µs197 µs +1.7%201 µs +2.0%181 µs −9.5%196 µs +7.8%193 µs ⋮ harness193 µs +0.3%
flags: select + unselect + selected (band) [gpu]12.9 µs12.3 µs −5.2%13.1 µs +6.8%12.1 µs −7.8%12.5 µs +3.6%12.4 µs ⋮ harness11.8 µs −4.9%
flags: selectify + unselectify + selectable [v3]195 µs197 µs +1.0%198 µs +0.8%181 µs −8.7%196 µs +8.3%194 µs ⋮ harness190 µs −1.7%
flags: selectify + unselectify + selectable [gpu]2.04 µs2.06 µs +0.8%2.03 µs −1.4%2.05 µs +1.1%2.03 µs −1.1%2.03 µs ⋮ harness2.02 µs −0.6%
flags: lock + unlock + locked [v3]189 µs195 µs +3.2%196 µs +0.8%179 µs −8.8%190 µs +5.9%191 µs ⋮ harness189 µs −1.0%
flags: lock + unlock + locked [gpu]2.05 µs2.06 µs +0.8%2.05 µs −0.7%2.04 µs −0.6%2.04 µs +0.2%2.04 µs ⋮ harness2.04 µs +0.2%
flags: grabify + ungrabify + grabbable [v3]190 µs199 µs +4.5%196 µs −1.3%178 µs −9.2%192 µs +7.8%195 µs ⋮ harness190 µs −2.5%
flags: grabify + ungrabify + grabbable [gpu]2.03 µs2.08 µs +2.5%2.04 µs −1.6%2.04 µs −0.3%2.03 µs −0.4%2.04 µs ⋮ harness2.02 µs −0.9%
flags: show + hide + visible [v3]2.58 ms2.61 ms +1.1%2.70 ms +3.8%2.57 ms −5.1%2.57 ms +0.1%2.61 ms ⋮ harness2.57 ms −1.8%
flags: show + hide + visible [gpu]11.5 µs12.5 µs +8.7%11.3 µs −9.7%11.3 µs +0.0%11.4 µs +0.5%11.3 µs ⋮ harness11.3 µs −0.4%
flags: active/activate/unactivate (3 calls) [v3]193 µs200 µs +3.7%196 µs −1.9%180 µs −8.3%196 µs +9.0%194 µs ⋮ harness191 µs −1.3%
flags: active/activate/unactivate (3 calls) [gpu]12.9 µs13.3 µs +2.9%11.9 µs −10.8%11.9 µs +0.8%13.1 µs +9.7%12.2 µs ⋮ harness12.0 µs −1.8%
flags: panify + unpanify + pannable [v3]192 µs199 µs +3.8%195 µs −1.9%182 µs −7.1%190 µs +4.6%195 µs ⋮ harness190 µs −2.2%
flags: panify + unpanify + pannable [gpu]2.02 µs2.05 µs +1.5%2.05 µs −0.2%2.03 µs −0.8%2.02 µs −0.8%2.01 µs ⋮ harness2.01 µs +0.3%
flags: takesUpSpace + interactive + transparent (3 calls) [v3]196 ns199 ns +1.5%187 ns −6.4%195 ns +4.4%195 ns +0.4%196 ns ⋮ harness194 ns −1.0%
flags: takesUpSpace + interactive + transparent (3 calls) [gpu]67.7 ns72.9 ns +7.7%68.2 ns −6.5%63.3 ns −7.2%69.7 ns +10%63.9 ns ⋮ harness64.7 ns +1.2%
flags: effectiveOpacity [v3]51.0 ns55.2 ns +8.4%49.4 ns −10.5%49.1 ns −0.7%51.6 ns +5.1%49.1 ns ⋮ harness49.0 ns −0.1%
flags: effectiveOpacity [gpu]23.9 ns21.6 ns −9.4%21.8 ns +1.0%21.3 ns −2.4%25.1 ns +18%21.3 ns ⋮ harness21.2 ns −0.7%
element data: scratch get + set [v3]1.29 µs1.37 µs +6.5%1.36 µs −0.5%1.30 µs −4.5%1.31 µs +0.5%1.31 µs ⋮ harness1.29 µs −1.7%
element data: scratch get + set [gpu]176 ns175 ns −0.3%175 ns −0.5%171 ns −2.2%171 ns +0.3%171 ns ⋮ harness172 ns +0.8%
element data: json() one element [v3]300 ns311 ns +3.6%286 ns −8.1%300 ns +5.1%301 ns +0.3%297 ns ⋮ harness299 ns +0.8%
element data: json() one element [gpu]151 ns141 ns −6.7%150 ns +6.3%141 ns −5.9%150 ns +6.4%151 ns ⋮ harness149 ns −1.1%
element data: jsons() over 100 [v3]39.9 µs43.1 µs +8.2%28.3 µs −34.4%39.8 µs +41%39.8 µs +0.0%39.3 µs ⋮ harness39.6 µs +0.7%
element data: jsons() over 100 [gpu]21.3 µs24.6 µs +15%20.0 µs −18.8%20.0 µs +0.2%20.6 µs +3.0%20.1 µs ⋮ harness19.8 µs −1.4%
element data: label() [gpu]15.4 ns15.6 ns +1.5%15.2 ns −2.5%15.2 ns +0.1%15.1 ns −0.7%15.2 ns ⋮ harness15.2 ns −0.3%
core: batchData() [v3]2.41 µs2.43 µs +0.6%2.40 µs −1.0%2.29 µs −4.7%2.47 µs +7.8%
core: batchData() [gpu]281 ns282 ns +0.3%283 ns +0.5%285 ns +0.6%285 ns −0.1%
core: animated() [v3]7.52 ns7.69 ns +2.2%7.52 ns −2.1%7.53 ns +0.0%7.53 ns +0.0%7.52 ns ⋮ harness7.58 ns +0.7%
core: animated() [gpu]1.53 ns1.56 ns +2.0%1.53 ns −2.0%1.53 ns −0.0%1.53 ns −0.0%1.53 ns ⋮ harness1.56 ns +2.1%
core: zoomRange get [gpu]2.16 ns2.16 ns +0.0%2.20 ns +2.0%2.16 ns −2.1%2.16 ns +0.0%2.16 ns ⋮ harness2.16 ns +0.0%
core: forceRender() (headless no-op) [v3]23.4 ns23.8 ns +1.7%23.8 ns +0.0%20.1 ns −15.8%23.3 ns +16%
core: forceRender() (headless no-op) [gpu]1.48 ns1.51 ns +2.1%1.48 ns −2.0%1.48 ns −0.1%1.48 ns −0.0%
core: resize() / invalidateSize() [v3]339 ns333 ns −1.9%287 ns −13.7%304 ns +5.8%286 ns −5.9%315 ns ⋮ harness314 ns −0.3%
core: resize() / invalidateSize() [gpu]126 ns135 ns +7.2%126 ns −6.4%127 ns +1.1%125 ns −1.7%129 ns ⋮ harness127 ns −1.7%
core: onRender + offRender [v3]457 ns451 ns −1.4%468 ns +3.8%472 ns +0.8%454 ns −3.8%
core: onRender + offRender [gpu]191 ns193 ns +1.3%190 ns −1.8%194 ns +2.2%192 ns −0.9%
core: removeScratch() [v3]2.73 ms2.82 ms +3.5%2.81 ms −0.5%2.50 ms −11.1%2.64 ms +5.9%2.65 ms ⋮ harness2.75 ms +3.6%
core: removeScratch() [gpu]282 ns296 ns +5.1%284 ns −3.9%279 ns −1.9%278 ns −0.4%279 ns ⋮ harness278 ns −0.4%
core: selectionType get [v3]4.51 ns4.60 ns +2.1%4.46 ns −3.2%4.51 ns +1.1%4.51 ns +0.1%4.55 ns ⋮ harness4.51 ns −0.9%
core: selectionType get [gpu]2.26 ns2.31 ns +2.0%2.26 ns −2.0%2.26 ns −0.0%2.26 ns +0.0%2.26 ns ⋮ harness2.26 ns +0.1%
core: isReady() [v3]3.37 ns3.32 ns −1.5%3.26 ns −2.0%3.25 ns −0.1%3.26 ns +0.1%3.25 ns ⋮ harness3.26 ns +0.0%
core: isReady() [gpu]1.51 ns1.51 ns +0.0%1.48 ns −2.1%1.48 ns +0.1%1.48 ns +0.0%1.48 ns ⋮ harness1.48 ns −0.1%
core: window() [v3]4.11 ns4.19 ns +2.0%4.10 ns −2.1%4.11 ns +0.1%4.10 ns −0.0%4.10 ns ⋮ harness4.10 ns +0.0%
core: window() [gpu]1.48 ns1.51 ns +2.1%1.48 ns −2.1%1.48 ns +0.0%1.48 ns +0.1%1.48 ns ⋮ harness1.48 ns +0.0%
core: container() [v3]3.96 ns3.96 ns +0.0%3.99 ns +0.8%3.94 ns −1.4%3.93 ns −0.2%3.90 ns ⋮ harness3.93 ns +0.8%
core: container() [gpu]1.48 ns1.51 ns +2.1%1.51 ns +0.0%1.48 ns −2.1%1.51 ns +2.1%1.48 ns ⋮ harness1.48 ns +0.0%
core: destroyed() [v3]3.31 ns3.33 ns +0.6%3.30 ns −0.6%3.30 ns +0.0%3.31 ns +0.1%3.26 ns ⋮ harness3.32 ns +2.0%
core: destroyed() [gpu]1.48 ns1.51 ns +2.0%1.48 ns −2.1%1.48 ns +0.0%1.48 ns +0.0%1.48 ns ⋮ harness1.48 ns +0.2%
core: removeAllListeners() [v3]13.9 ns14.1 ns +1.3%13.7 ns −2.6%13.5 ns −1.1%13.8 ns +2.2%13.5 ns ⋮ harness13.8 ns +2.0%
core: removeAllListeners() [gpu]1.58 ns1.62 ns +2.3%1.58 ns −2.3%1.58 ns +0.1%1.58 ns +0.0%1.58 ns ⋮ harness1.59 ns +0.1%
collection: cy() [v3]7.63 ns7.85 ns +2.9%7.73 ns −1.5%7.80 ns +0.9%7.58 ns −2.7%7.58 ns ⋮ harness7.58 ns +0.0%
collection: cy() [gpu]2.16 ns2.20 ns +2.1%2.16 ns −2.1%2.16 ns +0.0%2.16 ns −0.0%2.16 ns ⋮ harness2.16 ns −0.0%
collection: indexOfId() [v3]67.4 ns60.3 ns −10.5%59.4 ns −1.4%69.6 ns +17%66.0 ns −5.2%66.6 ns ⋮ harness66.1 ns −0.7%
collection: indexOfId() [gpu]36.0 ns36.9 ns +2.7%38.9 ns +5.2%38.8 ns −0.2%37.5 ns −3.4%37.8 ns ⋮ harness37.8 ns +0.1%
collection: removed() + inside() (2 calls) [v3]17.2 ns18.1 ns +5.6%16.7 ns −7.6%17.7 ns +5.9%17.7 ns +0.0%17.7 ns ⋮ harness17.6 ns −0.6%
collection: removed() + inside() (2 calls) [gpu]15.4 ns15.4 ns −0.0%15.1 ns −2.1%15.1 ns +0.0%15.2 ns +0.7%15.1 ns ⋮ harness15.1 ns −0.0%
collection: silentPositions( fn ) over 100 [v3]106 µs110 µs +3.1%109 µs −0.6%107 µs −1.9%111 µs +3.6%107 µs ⋮ harness112 µs +3.9%
collection: silentPositions( fn ) over 100 [gpu]3.03 µs3.22 µs +6.3%3.53 µs +9.6%3.53 µs −0.1%3.58 µs +1.5%3.50 µs ⋮ harness3.67 µs +5.1%
collection: animated() [v3]12.2 ns12.4 ns +2.1%12.1 ns −2.5%12.2 ns +0.5%12.2 ns −0.0%12.1 ns ⋮ harness12.2 ns +0.3%
collection: animated() [gpu]4.19 ns4.30 ns +2.6%4.28 ns −0.5%4.19 ns −2.0%4.19 ns +0.0%4.19 ns ⋮ harness4.19 ns +0.0%
collection: delayAnimation() [v3]450 ns453 ns +0.5%482 ns +6.6%456 ns −5.4%456 ns −0.1%467 ns ⋮ harness458 ns −1.9%
collection: delayAnimation() [gpu]168 ns164 ns −2.4%164 ns +0.0%165 ns +0.7%164 ns −0.6%162 ns ⋮ harness165 ns +1.5%
collection: removeScratch() [v3]1.80 µs1.97 µs +9.5%1.87 µs −5.2%1.81 µs −3.0%1.81 µs +0.3%1.79 µs ⋮ harness1.79 µs −0.3%
collection: removeScratch() [gpu]201 ns205 ns +2.4%205 ns −0.0%202 ns −1.7%205 ns +1.6%202 ns ⋮ harness202 ns +0.3%
collection: component() [v3]82.8 ms83.8 ms +1.3%86.3 ms +3.0%79.7 ms −7.7%80.4 ms +0.9%82.2 ms ⋮ harness78.8 ms −4.1%
collection: component() [gpu]1.98 ms2.02 ms +1.9%1.97 ms −2.3%1.84 ms −6.8%1.83 ms −0.6%1.84 ms ⋮ harness1.84 ms +0.1%
collection: layoutDimensions() [v3]613 ns621 ns +1.4%650 ns +4.6%618 ns −4.9%624 ns +1.1%611 ns ⋮ harness616 ns +0.7%
collection: layoutDimensions() [gpu]170 ns203 ns +20%169 ns −17.0%173 ns +2.6%174 ns +0.5%169 ns ⋮ harness187 ns +11%
degree: maxIndegree + minOutdegree (2 calls) [v3]9.27 ms10.5 ms +14%9.57 ms −9.3%8.87 ms −7.3%9.23 ms +4.1%9.05 ms ⋮ harness8.89 ms −1.8%
degree: maxIndegree + minOutdegree (2 calls) [gpu]428 µs436 µs +1.7%427 µs −2.0%353 µs −17.4%381 µs +7.9%359 µs ⋮ harness355 µs −1.3%
flags: grabbed + hidden + inactive (3 calls) [v3]86.5 ns87.3 ns +1.0%84.9 ns −2.8%85.9 ns +1.2%85.1 ns −0.9%86.3 ns ⋮ harness84.5 ns −2.1%
flags: grabbed + hidden + inactive (3 calls) [gpu]42.7 ns42.2 ns −1.1%42.4 ns +0.4%43.2 ns +2.0%38.8 ns −10.3%38.4 ns ⋮ harness38.4 ns −0.0%
curves: renderedSegmentPoints [gpu]36.1 ns36.7 ns +1.8%37.3 ns +1.5%36.7 ns −1.6%36.2 ns −1.2%35.9 ns ⋮ harness36.1 ns +0.7%
layout contract: edgeSlots + endpoints + degreeOf [gpu]34.7 µs35.3 µs +1.9%34.6 µs −2.0%34.6 µs +0.1%34.7 µs +0.1%34.7 µs ⋮ harness34.5 µs −0.5%
formats: isColumnarElements + isSerializedElements + isPackedIds [gpu]4.61 ns4.71 ns +2.1%4.61 ns −2.0%4.61 ns −0.1%4.61 ns −0.0%4.61 ns ⋮ harness4.52 ns −1.9%
core: elements() memo hit (was mutableElements, round 90) [v3]2.40 ns2.41 ns +0.1%
core: elements() memo hit (was mutableElements, round 90) [gpu]2.30 ns2.35 ns +2.1%
core: batch + per-id data() (was batchData, round 90) [v3]2.37 µs2.49 µs +5.1%
core: batch + per-id data() (was batchData, round 90) [gpu]266 ns263 ns −1.1%
core: on('render') + off('render') (was onRender/offRender, round 90) [v3]486 ns462 ns −4.9%
core: on('render') + off('render') (was onRender/offRender, round 90) [gpu]196 ns195 ns −0.7%
compaction n=20000 · 12 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
cpu pick: background miss (full highWater walk) [peak]221 µs227 µs +2.7%222 µs −2.4%223 µs +0.4%222 µs −0.2%207 µs −6.8%207 µs −0.1%
cpu pick: background miss (full highWater walk) [compacted]51.0 µs51.4 µs +0.8%49.6 µs −3.4%50.2 µs +1.1%50.3 µs +0.2%48.7 µs −3.1%48.7 µs +0.0%
cpu pick: node hit [peak]226 µs226 µs +0.2%223 µs −1.7%223 µs +0.0%222 µs −0.2%223 µs +0.2%218 µs −2.1%
cpu pick: node hit [compacted]49.7 µs51.2 µs +2.9%49.9 µs −2.5%50.2 µs +0.6%49.7 µs −1.0%49.8 µs +0.2%48.9 µs −1.7%
isCurrent: current ref (forwards present vs absent) [no forwards (peak)]5.92 ns6.08 ns +2.6%6.02 ns −0.9%5.88 ns −2.4%5.95 ns +1.2%5.87 ns −1.4%5.95 ns +1.4%
isCurrent: current ref (forwards present vs absent) [forwards present (compacted)]5.95 ns4.60 ns −22.7%5.90 ns +28%5.98 ns +1.4%5.93 ns −0.8%5.85 ns −1.3%5.90 ns +0.9%
isCurrent: stale-ref repair (chase + rewrite, alloc included) [current (baseline alloc)]8.80 ns9.17 ns +4.2%8.86 ns −3.3%8.90 ns +0.4%8.89 ns −0.1%8.89 ns −0.0%8.89 ns +0.0%
isCurrent: stale-ref repair (chase + rewrite, alloc included) [stale → repair]49.3 ns46.2 ns −6.2%44.7 ns −3.2%50.3 ns +12%48.3 ns −3.8%48.3 ns −0.0%49.1 ns +1.5%
control: nodes({ selected }) scan (order-list, expected parity) [peak]24.8 µs23.6 µs −4.8%25.4 µs +7.7%23.7 µs −6.7%23.6 µs −0.5%22.4 µs −5.3%25.2 µs +13%
control: nodes({ selected }) scan (order-list, expected parity) [compacted]21.3 µs23.4 µs +10%21.0 µs −10.3%22.8 µs +8.6%22.1 µs −3.0%22.4 µs +1.2%21.6 µs −3.2%
control: whole-graph boundingBox (expected parity) [peak]96.3 µs117 µs +22%96.5 µs −17.6%104 µs +7.4%111 µs +7.2%100 µs −10.0%112 µs +12%
control: whole-graph boundingBox (expected parity) [compacted]95.5 µs114 µs +19%97.3 µs −14.5%100 µs +2.8%110 µs +10%101 µs −8.5%112 µs +11%
compound n=2000 · 6 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
parent drag (shift subtree + bb settle) [v3]253 µs267 µs +5.3%266 µs −0.3%260 µs −2.2%256 µs −1.8%251 µs −1.9%252 µs +0.6%
parent drag (shift subtree + bb settle) [gpu]1.36 µs1.44 µs +5.4%1.39 µs −3.2%1.40 µs +0.8%1.37 µs −2.2%1.38 µs +0.7%1.38 µs −0.2%
child drag (move + parent re-derive) [v3]80.1 µs83.1 µs +3.8%83.9 µs +0.9%81.7 µs −2.5%81.4 µs −0.5%79.0 µs −2.9%80.1 µs +1.3%
child drag (move + parent re-derive) [gpu]1.57 µs1.62 µs +3.3%1.66 µs +2.5%1.59 µs −4.2%1.57 µs −0.9%1.56 µs −0.7%1.62 µs +3.4%
reparent round-trip [v3]82.2 µs84.9 µs +3.3%85.0 µs +0.1%84.6 µs −0.4%84.4 µs −0.3%83.8 µs −0.7%83.0 µs −0.9%
reparent round-trip [gpu]1.18 µs1.15 µs −2.9%1.26 µs +10.0%1.11 µs −11.9%1.08 µs −3.0%1.06 µs −1.4%1.08 µs +1.2%
curves n=2000 · 22 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
curve premium: build (style apply + derivation) [curved]25.7 ms31.8 ms +24%26.3 ms −17.4%10.3 ms −61.0%11.1 ms +8.5%11.5 ms +3.6%12.0 ms +3.9%
curve premium: build (style apply + derivation) [straight]22.6 ms28.4 ms +25%23.1 ms −18.4%8.90 ms −61.6%8.03 ms −9.7%6.42 ms −20.1%6.64 ms +3.5%
curve premium: node.position x 1000 (drag) [curved]589 µs536 µs −9.0%386 µs −28.0%376 µs −2.6%388 µs +3.2%374 µs −3.5%377 µs +0.7%
curve premium: node.position x 1000 (drag) [straight]253 µs314 µs +24%348 µs +11%313 µs −10.2%299 µs −4.5%302 µs +1.2%326 µs +7.9%
curve premium: nodes().positions() (bulk move) [curved]304 µs368 µs +21%305 µs −17.0%302 µs −1.1%313 µs +3.6%319 µs +1.9%309 µs −3.2%
curve premium: nodes().positions() (bulk move) [straight]297 µs399 µs +34%288 µs −27.9%297 µs +3.0%296 µs −0.3%305 µs +3.3%296 µs −3.1%
curve premium: first read after a bulk move (cold) [curved]7.56 ms9.63 ms +27%7.58 ms −21.3%5.86 ms −22.7%5.95 ms +1.6%5.24 ms −11.9%5.59 ms +6.7%
curve premium: first read after a bulk move (cold) [straight]2.99 ms3.22 ms +7.7%3.27 ms +1.4%2.73 ms −16.6%2.88 ms +5.6%2.60 ms −9.6%2.71 ms +4.3%
curve premium: same read again (warm) [curved]2.59 ms2.85 ms +9.9%2.72 ms −4.7%2.21 ms −18.6%2.19 ms −0.7%1.42 ms −35.2%1.43 ms +0.8%
curve premium: same read again (warm) [straight]1.64 ms1.75 ms +6.7%1.58 ms −9.7%3.20 ms ×2.021.39 ms −56.5%1.42 ms +1.9%1.42 ms +0.0%
curve premium: edge.midpoint x 4000 [curved]1.89 ms4.43 ms ×2.341.88 ms −57.6%1.83 ms −2.8%2.16 ms +18%2.35 ms +8.8%2.37 ms +0.9%
curve premium: edge.midpoint x 4000 [straight]3.01 ms3.36 ms +12%3.06 ms −9.1%3.11 ms +1.7%4.16 ms +34%4.19 ms +0.7%4.21 ms +0.5%
curve premium: edge.controlPoints x 4000 [curved]1.89 ms2.30 ms +21%1.95 ms −15.3%1.95 ms −0.1%2.20 ms +13%2.34 ms +6.2%2.39 ms +2.1%
curve premium: edge.controlPoints x 4000 [straight]1.11 ms1.36 ms +23%1.21 ms −11.2%1.09 ms −9.9%1.39 ms +28%2.70 ms +94%1.43 ms −47.2%
curve premium: cy.elements().boundingBox() x 20 [curved]35.1 ms36.3 ms +3.6%34.7 ms −4.5%38.0 ms +9.4%35.6 ms −6.1%18.1 ms −49.2%17.7 ms −2.4%
curve premium: cy.elements().boundingBox() x 20 [straight]21.9 ms22.7 ms +4.0%34.6 ms +52%21.2 ms −38.7%21.7 ms +2.1%19.6 ms −9.5%21.0 ms +7.2%
curve premium: cy.fit() x 20 (store scan) [curved]3.94 ms4.00 ms +1.4%4.01 ms +0.3%3.84 ms −4.3%3.88 ms +1.0%3.71 ms −4.2%3.69 ms −0.6%
curve premium: cy.fit() x 20 (store scan) [straight]3.58 ms3.73 ms +4.0%3.65 ms −2.0%3.53 ms −3.3%3.61 ms +2.3%3.40 ms −5.8%3.38 ms −0.8%
curve premium: elementsInBox x 20 (half the graph) [curved]23.7 ms27.7 ms +17%23.9 ms −13.6%24.9 ms +3.8%24.6 ms −1.0%23.4 ms −4.8%24.3 ms +3.7%
curve premium: elementsInBox x 20 (half the graph) [straight]5.86 ms7.24 ms +24%6.14 ms −15.3%6.10 ms −0.6%5.91 ms −3.1%5.71 ms −3.4%6.03 ms +5.6%
curve premium: edge.hide/show x 1000 (bundle re-fan) [curved]3.98 ms4.23 ms +6.1%3.68 ms −13.0%3.88 ms +5.5%3.81 ms −1.9%4.50 ms +18%3.72 ms −17.4%
curve premium: edge.hide/show x 1000 (bundle re-fan) [straight]2.14 ms2.39 ms +12%2.01 ms −15.6%2.15 ms +6.6%2.24 ms +4.5%2.21 ms −1.6%2.29 ms +3.6%
arrows n=2000 · 21 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
arrow premium: build (style apply + arrow fold) [arrowed]26.7 ms24.5 ms −8.5%24.2 ms −1.3%5.91 ms −75.5%5.77 ms −2.4%6.94 ms +20%6.68 ms −3.7%
arrow premium: build (style apply + arrow fold) [none]21.0 ms22.2 ms +5.4%20.6 ms −7.0%5.95 ms −71.1%6.48 ms +8.9%6.33 ms −2.3%6.34 ms +0.1%
arrow premium: cy.style() re-apply x 4 [arrowed]40.8 ms43.6 ms +6.7%41.8 ms −4.1%8.08 ms −80.6%8.14 ms +0.7%7.68 ms −5.6%7.95 ms +3.5%
arrow premium: cy.style() re-apply x 4 [none]39.6 ms44.0 ms +11%40.9 ms −7.1%8.05 ms −80.3%7.82 ms −2.8%7.93 ms +1.4%7.99 ms +0.8%
arrow premium: node.position x 200000 (drag) [arrowed]24.5 ms23.5 ms −4.5%23.5 ms +0.4%22.1 ms −6.3%21.6 ms −2.2%21.6 ms +0.1%21.7 ms +0.4%
arrow premium: node.position x 200000 (drag) [none]24.9 ms23.4 ms −6.3%23.5 ms +0.5%22.2 ms −5.3%21.6 ms −3.1%21.6 ms +0.3%21.8 ms +0.8%
arrow premium: edge.sourceEndpoint x 200000 [arrowed]61.7 ms60.2 ms −2.3%61.0 ms +1.3%61.1 ms +0.2%60.5 ms −1.0%59.6 ms −1.5%62.1 ms +4.1%
arrow premium: edge.sourceEndpoint x 200000 [none]59.8 ms58.5 ms −2.3%61.9 ms +5.9%60.8 ms −1.8%58.5 ms −3.8%60.2 ms +2.8%59.1 ms −1.8%
arrow premium: edge.targetEndpoint x 200000 [arrowed]60.8 ms60.8 ms +0.0%61.8 ms +1.5%61.2 ms −0.9%60.4 ms −1.4%59.0 ms −2.3%59.9 ms +1.6%
arrow premium: edge.targetEndpoint x 200000 [none]60.3 ms62.3 ms +3.4%61.6 ms −1.2%60.0 ms −2.6%59.3 ms −1.1%58.7 ms −1.1%59.7 ms +1.7%
arrow premium: edge.midpoint x 200000 [arrowed]151 ms139 ms −8.3%146 ms +5.4%145 ms −0.9%144 ms −0.5%139 ms −3.5%141 ms +1.5%
arrow premium: edge.midpoint x 200000 [none]155 ms137 ms −11.9%146 ms +6.6%144 ms −1.3%138 ms −3.7%137 ms −1.0%137 ms +0.0%
arrow premium: edge.style('target-arrow-shape') x 200000 [arrowed]35.7 ms34.0 ms −4.7%35.0 ms +2.9%32.8 ms −6.2%33.7 ms +2.7%31.5 ms −6.7%33.3 ms +5.9%
arrow premium: edge.style('target-arrow-shape') x 200000 [none]30.9 ms30.6 ms −1.2%29.1 ms −4.9%27.8 ms −4.6%28.3 ms +2.0%27.5 ms −2.8%27.3 ms −0.7%
arrow premium: cy.elements().boundingBox() x 20 [arrowed]21.6 ms21.2 ms −1.9%20.9 ms −1.3%20.3 ms −3.2%21.0 ms +3.7%18.3 ms −12.9%18.4 ms +0.8%
arrow premium: cy.elements().boundingBox() x 20 [none]21.7 ms21.2 ms −2.5%21.3 ms +0.3%20.3 ms −4.6%21.0 ms +3.5%18.2 ms −13.6%17.7 ms −2.3%
arrow premium: elementsInBox x 20 (half the graph) [arrowed]5.61 ms5.54 ms −1.2%5.61 ms +1.1%6.54 ms +17%5.84 ms −10.7%5.47 ms −6.2%5.45 ms −0.4%
arrow premium: elementsInBox x 20 (half the graph) [none]5.58 ms5.48 ms −1.8%5.52 ms +0.8%5.71 ms +3.4%5.76 ms +0.9%5.53 ms −4.1%5.38 ms −2.6%
arrow premium: control: sourceEndpoint, bezier vs straight [arrowed]76.0 ms73.4 ms −3.4%76.4 ms +4.1%77.2 ms +1.0%75.2 ms −2.5%75.4 ms +0.2%74.1 ms −1.7%
arrow premium: control: sourceEndpoint, bezier vs straight [none]60.6 ms58.5 ms −3.5%60.9 ms +4.2%60.9 ms −0.0%59.3 ms −2.6%60.4 ms +1.8%58.7 ms −2.7%
arrow premium: edge column bytes [B/edge]156 ms156 ms +0.0%156 ms +0.0%156 ms +0.0%156 ms +0.0%156 ms +0.0%156 ms +0.0%
labels n=20000 · 8 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
labels: breakLines x 20000 [gpu]78.8 ms83.5 ms +6.0%79.1 ms −5.3%79.6 ms +0.6%84.9 ms +6.7%84.0 ms ⋮ harness85.8 ms +2.1%
labels: estimateBlock x 20000 [gpu]89.0 ms92.7 ms +4.2%93.4 ms +0.7%90.7 ms −2.8%94.3 ms +3.9%91.3 ms ⋮ harness89.0 ms −2.5%
labels: addNode x 20000 [gpu]29.2 ms30.8 ms +5.2%28.8 ms −6.3%30.5 ms +5.7%29.4 ms −3.7%30.4 ms ⋮ harness28.4 ms −6.4%
labels: setLabel (build) x 20000 [gpu]110 ms104 ms −5.4%104 ms +0.2%104 ms −0.4%98.3 ms −5.4%97.7 ms ⋮ harness97.1 ms −0.5%
labels: setLabel (rewrite) x 20000 [gpu]101 ms102 ms +1.7%102 ms −0.4%104 ms +1.7%101 ms −2.8%101 ms ⋮ harness101 ms −0.2%
labels: boundingBox with 20000 label terms [gpu]3.20 ms3.40 ms +6.3%3.42 ms +0.6%3.43 ms +0.3%3.01 ms −12.1%3.04 ms ⋮ harness3.05 ms +0.2%
labels: computeSdf tier 1 (30x42) x 96 glyphs [gpu]14.7 ms14.3 ms −2.1%
labels: computeSdf tier 2 (59x85) x 96 glyphs [gpu]37.8 ms38.6 ms +2.2%
transitions n=2000 · 7 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
transition: auto-extent shift, whole-channel re-derive (2000 slots) [transitions off]2.21 ms2.31 ms +4.6%2.29 ms −0.8%1.15 ms −50.0%1.16 ms +1.2%1.20 ms +3.1%1.16 ms −3.1%
transition: auto-extent shift, whole-channel re-derive (2000 slots) [transitions on]4.54 ms4.80 ms +5.6%4.69 ms −2.2%3.65 ms −22.3%3.66 ms +0.4%3.78 ms +3.1%3.52 ms −6.9%
transition: bulk tween tick (2000 slots, one manager tick) [tick]127 µs136 µs +7.5%139 µs +2.3%122 µs −12.8%130 µs +6.8%129 µs −0.6%128 µs −0.7%
transition: explicit-domain write (O(changed) — one element) [transitions off]2.35 µs2.45 µs +4.1%2.36 µs −3.6%14.8 µs ×6.2915.1 µs +1.5%14.7 µs −2.6%14.4 µs −2.2%
transition: explicit-domain write (O(changed) — one element) [transitions on]6.15 µs5.90 µs −4.1%6.28 µs +6.5%19.0 µs ×3.0218.5 µs −2.6%18.3 µs −1.0%18.2 µs −0.5%
transition: sheet swap, whole-graph apply (2000 slots diff + tween) [transitions off]9.97 ms10.0 ms +0.4%10.1 ms +0.9%2.11 ms −79.1%2.12 ms +0.1%2.09 ms −1.3%2.05 ms −1.9%
transition: sheet swap, whole-graph apply (2000 slots diff + tween) [transitions on]13.0 ms12.8 ms −1.3%12.7 ms −1.0%4.85 ms −61.7%4.91 ms +1.1%4.88 ms −0.6%4.75 ms −2.7%
geometry-tween n=2000 · 9 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
size tick: unlabelled (2000 slots) [tick]589 µs526 µs −10.8%541 µs +2.8%570 µs +5.5%544 µs −4.7%527 µs −3.1%567 µs +7.6%
size tick: labelled, center/center (re-anchor early-out) (2000 slots) [tick]636 µs548 µs −13.8%595 µs +8.6%605 µs +1.7%589 µs −2.7%562 µs −4.6%588 µs +4.6%
size tick: labelled, hanging (sidecar rewrite per tick) (2000 slots) [tick]1.26 ms1.18 ms −6.6%1.22 ms +3.5%1.25 ms +2.4%1.22 ms −2.2%1.22 ms −0.2%1.24 ms +1.7%
edge width tick (4000 slots) [bare]297 µs243 µs −18.0%281 µs +15%277 µs −1.3%290 µs +4.9%285 µs −1.7%276 µs −3.3%
edge width tick (4000 slots) [with rides (casing + match-line arrows)]706 µs724 µs +2.5%717 µs −0.9%690 µs −3.8%753 µs +9.1%722 µs −4.1%712 µs −1.4%
padding tick + auto-bounds flush (250 parents × 8 children) [tick + flush]179 µs175 µs −2.2%177 µs +1.2%176 µs −0.5%173 µs −1.4%173 µs −0.4%177 µs +2.2%
font-size tick (2000 labels) [wrap none (dims scale-patch)]359 µs360 µs +0.3%364 µs +1.0%368 µs +1.1%359 µs −2.4%350 µs −2.4%369 µs +5.4%
font-size tick (2000 labels) [wrapped (re-break per tick)]5.69 ms5.84 ms +2.7%6.61 ms +13%5.69 ms −13.9%5.75 ms +1.0%5.82 ms +1.2%5.54 ms −4.8%
baseline: paint (opacity) tick (2000 slots) [tick]142 µs147 µs +3.5%144 µs −2.3%141 µs −1.8%137 µs −3.0%151 µs +11%146 µs −3.3%
style-bundle n=2000 · 21 rows
row cf5727b4
2026-08-10
1f324088
2026-08-10
44e55dc9
2026-08-10
c2d24c2e
2026-08-12
0d3561de
2026-08-13
5107c36e
2026-09-01
9ed49abc
2026-09-02
style( 'background-color' ) (was #4 in the switch) [v3]59.6 ns58.9 ns −1.1%59.7 ns +1.3%59.2 ns −0.9%60.8 ns +2.8%59.6 ns −1.9%
style( 'background-color' ) (was #4 in the switch) [gpu]52.3 ns54.8 ns +4.8%53.4 ns −2.6%60.4 ns +13%55.9 ns −7.4%52.7 ns −5.7%
style( 'border-width' ) (was #6 in the switch) [v3]60.3 ns63.6 ns +5.6%61.5 ns −3.4%61.7 ns +0.3%60.4 ns −2.1%60.4 ns +0.0%
style( 'border-width' ) (was #6 in the switch) [gpu]50.6 ns50.5 ns −0.2%53.7 ns +6.3%53.7 ns +0.1%49.8 ns −7.3%54.3 ns +9.0%
style( 'text-wrap' ) (was #73 in the switch) [v3]61.3 ns59.6 ns −2.9%60.1 ns +1.0%61.7 ns +2.6%60.8 ns −1.5%61.3 ns +0.8%
style( 'text-wrap' ) (was #73 in the switch) [gpu]36.6 ns35.8 ns −2.3%35.3 ns −1.3%35.1 ns −0.7%36.0 ns +2.8%35.6 ns −1.3%
style( 'text-max-width' ) (was #74 in the switch) [v3]58.6 ns58.1 ns −0.8%59.5 ns +2.4%59.4 ns −0.2%60.5 ns +1.8%59.0 ns −2.4%
style( 'text-max-width' ) (was #74 in the switch) [gpu]34.6 ns34.8 ns +0.6%34.5 ns −0.9%34.2 ns −0.9%34.2 ns +0.1%34.0 ns −0.5%
style( 'taxi-radius' ) (was #142 in the switch) [v3]59.6 ns59.9 ns +0.4%63.4 ns +5.8%61.8 ns −2.5%62.7 ns +1.4%60.7 ns −3.2%
style( 'taxi-radius' ) (was #142 in the switch) [gpu]48.9 ns49.6 ns +1.5%49.3 ns −0.7%48.3 ns −1.9%48.9 ns +1.3%48.5 ns −0.9%
style( 'target-distance-from-node' ) (was #150 in the switch) [v3]59.5 ns60.2 ns +1.1%61.4 ns +2.0%61.3 ns −0.2%62.7 ns +2.3%65.0 ns +3.7%
style( 'target-distance-from-node' ) (was #150 in the switch) [gpu]48.7 ns49.6 ns +1.8%48.4 ns −2.3%47.6 ns −1.8%48.0 ns +0.8%48.3 ns +0.6%
whole-object style() (gpu-only: v3 returns a different shape) [gpu node]13.4 µs13.3 µs −0.8%13.4 µs +0.4%13.1 µs −2.1%13.3 µs +1.7%13.4 µs +0.5%
whole-object style() (gpu-only: v3 returns a different shape) [gpu edge]14.5 µs14.7 µs +1.5%14.4 µs −1.9%14.5 µs +0.4%14.1 µs −2.5%14.5 µs +2.4%
colour-valued vs numeric reads (the string build) [gpu background-color (colour)]70.2 ns76.1 ns +8.4%73.8 ns −3.0%78.3 ns +6.1%76.0 ns −2.9%73.0 ns −4.0%
colour-valued vs numeric reads (the string build) [gpu border-color (colour)]74.0 ns73.6 ns −0.5%65.7 ns −10.7%70.5 ns +7.3%67.0 ns −5.0%71.3 ns +6.4%
colour-valued vs numeric reads (the string build) [gpu border-width (number)]63.2 ns66.4 ns +5.0%67.1 ns +1.1%65.4 ns −2.5%60.9 ns −6.8%66.7 ns +9.5%
colour-valued vs numeric reads (the string build) [gpu width (number)]59.6 ns62.0 ns +3.9%60.9 ns −1.7%62.2 ns +2.2%67.3 ns +8.1%58.6 ns −12.9%
the getters that ride readProp [gpu numericStyle( width )]60.0 ns61.6 ns +2.8%62.9 ns +2.1%61.5 ns −2.3%67.9 ns +10%61.0 ns −10.1%
the getters that ride readProp [gpu effectiveOpacity()]20.7 ns21.7 ns +5.0%20.6 ns −5.3%22.7 ns +10%20.7 ns −8.5%21.5 ns +3.4%
the getters that ride readProp [gpu renderedStyle( width )]78.6 ns79.4 ns +1.1%77.2 ns −2.9%79.9 ns +3.5%86.8 ns +8.7%77.2 ns −11.0%