| CPU | Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz |
|---|---|
| Cores | 8 physical / 16 logical · 3.6 GHz base · 5 GHz max |
| Memory | 62.6 GiB |
| GPU | CoffeeLake-S GT2 [UHD Graphics 630] i915 Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (8.0 GiB) amdgpu |
| OS | Fedora Linux 43 (Workstation Edition) · 7.1.10-100.fc43.x86_64 · x64 |
| Node | v24.18.0 (v8 13.6.233.17-node.50) |
| Commit | 9ed49abc docs(113): the performance review recorded — what the sweep measured and what it fixed |
| Machine id | 5cf3f79c |
| group | × @ N=500 | × @ N=2k |
|---|---|---|
| algo: bfs (whole graph) | 61× | 58× |
| algo: dfs (whole graph) | 57× | 58× |
| algo: dijkstra + pathTo | 51× | 57× |
| algo: aStar | 3.5× | 3.4× |
| algo: bellmanFord | 22× | 19× |
| algo: kruskal | 26× | 29× |
| algo: tarjan SCC | 35× | 34× |
| algo: hopcroft-tarjan biconnected | 25× | 24× |
| algo: hierholzer (directed) | 5.2× | 2.9× |
| algo: betweennessCentrality (unweighted) | 13× | 11× |
| algo: degreeCentralityNormalized | 37× | 37× |
| algo: closenessCentrality (one root) | 68× | 71× |
| algo: degreeCentrality (one root) | 35× | 34× |
| algo: pageRank (20 iters) | 70× | – |
| algo: closenessCentrality (weighted, one root) | 52× | – |
| algo: floydWarshall | 1.76× | – |
| algo: closenessCentralityNormalized | 2.5× | – |
| algo: markovClustering | 1.10× | – |
| algo: hierarchicalClustering (threshold) | 8.3× | – |
| algo: kMeans (fixed centroids) | 4.6× | – |
| algo: kMedoids | 7.7× | – |
| algo: fuzzyCMeans | 11× | – |
| algo: affinityPropagation | 5.3× | – |
| algo: kargerStein | 1.05× | – |
| algo: betweennessCentrality (weighted) | 8.7× | – |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| core: getElementById() | v3 | 93.4 ns | 97.4 ns | 167 ns | 90.9 ns | 1761 |
| core: getElementById() | gpu | 90.1 ns | 93.9 ns | 157 ns | 87.8 ns | 1823 |
| core: id lookup ($("#id") vs $id()) | v3 | 2.09 µs | 2.46 µs | 3.96 µs | 2.00 µs | 64 |
| core: id lookup ($("#id") vs $id()) | gpu | 84.6 ns | 87.3 ns | 159 ns | 81.5 ns | 1958 |
| core: nodes() | v3 | 418 µs | 426 µs | 556 µs | 409 µs | 1643 |
| core: nodes() | gpu | 7.92 ns | 8.42 ns | 17.6 ns | 7.46 ns | 20201 |
| core: edges() | v3 | 723 µs | 742 µs | 922 µs | 701 µs | 942 |
| core: edges() | gpu | 7.73 ns | 8.25 ns | 16.6 ns | 7.51 ns | 20620 |
| core: elements() | v3 | 145 µs | 152 µs | 264 µs | 141 µs | 4596 |
| core: elements() | gpu | 6.94 ns | 7.28 ns | 23.8 ns | 6.49 ns | 23343 |
| core: nodes ($("node") vs filter({group})) | v3 | 539 µs | 575 µs | 1.25 ms | 531 µs | 1212 |
| core: nodes ($("node") vs filter({group})) | gpu | 114 µs | 119 µs | 260 µs | 84.9 µs | 5761 |
| core: selected ($(":selected") vs filter({selected})) | v3 | 349 µs | 370 µs | 651 µs | 334 µs | 1880 |
| core: selected ($(":selected") vs filter({selected})) | gpu | 25.8 µs | 26.5 µs | 26.8 µs | 25.1 µs | 12 |
| core: filter(fn) | v3 | 421 µs | 434 µs | 561 µs | 409 µs | 1609 |
| core: filter(fn) | gpu | 99.9 µs | 106 µs | 348 µs | 96.5 µs | 6557 |
| core: collection() | v3 | 459 ns | 578 ns | 1.83 µs | 447 ns | 290 |
| core: collection() | gpu | 63.6 ns | 67.8 ns | 180 ns | 60.9 ns | 2468 |
| core: pan() get (x32) | v3 | 44.5 ns | 46.3 ns | 58.0 ns | 42.4 ns | 3641 |
| core: pan() get (x32) | gpu | 34.3 ns | 36.3 ns | 77.4 ns | 32.9 ns | 4714 |
| core: extent() | v3 | 22.5 ns | 40.6 ns | 163 ns | 21.4 ns | 4157 |
| core: extent() | gpu | 20.0 ns | 28.0 ns | 111 ns | 18.6 ns | 5960 |
| core: add + remove | v3 | 127 µs | 132 µs | 311 µs | 117 µs | 5256 |
| core: add + remove | gpu | 6.57 µs | 7.57 µs | 25.9 µs | 6.19 µs | 85124 |
| core: zoom set | v3 | 1.35 µs | 1.37 µs | 1.57 µs | 1.24 µs | 120 |
| core: zoom set | gpu | 585 ns | 602 ns | 709 ns | 576 ns | 273 |
| traverse: neighborhood() | v3 | 3.58 µs | 3.81 µs | 4.51 µs | 3.41 µs | 40 |
| traverse: neighborhood() | gpu | 967 ns | 1.14 µs | 2.23 µs | 941 ns | 142 |
| traverse: connectedEdges() | v3 | 1.07 µs | 1.21 µs | 2.04 µs | 1.04 µs | 135 |
| traverse: connectedEdges() | gpu | 383 ns | 412 ns | 1.36 µs | 381 ns | 408 |
| traverse: outgoers() | v3 | 2.41 µs | 2.62 µs | 3.46 µs | 2.30 µs | 61 |
| traverse: outgoers() | gpu | 473 ns | 551 ns | 2.03 µs | 435 ns | 294 |
| traverse: incomers() | v3 | 2.37 µs | 2.57 µs | 3.36 µs | 2.26 µs | 62 |
| traverse: incomers() | gpu | 461 ns | 576 ns | 2.08 µs | 444 ns | 281 |
| traverse: components() | v3 | 79.9 ms | 82.2 ms | 88.8 ms | 76.4 ms | 12 |
| traverse: components() | gpu | 1.93 ms | 2.05 ms | 3.55 ms | 1.87 ms | 323 |
| degree: node.degree() | v3 | 3.50 µs | 3.93 µs | 5.08 µs | 3.36 µs | 40 |
| degree: node.degree() | gpu | 41.3 ns | 43.0 ns | 127 ns | 38.9 ns | 3970 |
| degree: nodes.totalDegree() | v3 | 7.24 ms | 8.01 ms | 11.4 ms | 6.72 ms | 83 |
| degree: nodes.totalDegree() | gpu | 64.9 µs | 66.6 µs | 105 µs | 60.8 µs | 10487 |
| degree: nodes.maxDegree() | v3 | 7.05 ms | 7.91 ms | 12.2 ms | 6.77 ms | 81 |
| degree: nodes.maxDegree() | gpu | 76.4 µs | 80.2 µs | 134 µs | 71.2 µs | 8452 |
| data: get | v3 | 30.3 ns | 32.0 ns | 62.0 ns | 28.8 ns | 5336 |
| data: get | gpu | 29.8 ns | 31.3 ns | 49.5 ns | 28.8 ns | 5469 |
| position: get | v3 | 35.2 ns | 36.6 ns | 75.3 ns | 33.9 ns | 4674 |
| position: get | gpu | 21.9 ns | 25.3 ns | 49.9 ns | 21.0 ns | 6584 |
| json: element | v3 | 300 ns | 394 ns | 3.54 µs | 293 ns | 423 |
| json: element | gpu | 160 ns | 165 ns | 255 ns | 153 ns | 985 |
| set: union() | v3 | 94.8 µs | 106 µs | 164 µs | 91.9 µs | 6388 |
| set: union() | gpu | 18.1 µs | 18.7 µs | 19.2 µs | 17.4 µs | 12 |
| set: intersection() | v3 | 89.5 µs | 102 µs | 156 µs | 86.5 µs | 6637 |
| set: intersection() | gpu | 3.59 µs | 3.62 µs | 3.98 µs | 3.53 µs | 42 |
| set: difference() | v3 | 90.0 µs | 100 µs | 142 µs | 87.0 µs | 6735 |
| set: difference() | gpu | 3.55 µs | 3.58 µs | 3.85 µs | 3.47 µs | 42 |
| iter: map() | v3 | 27.4 µs | 28.9 µs | 75.0 µs | 26.4 µs | 23841 |
| iter: map() | gpu | 11.5 µs | 11.6 µs | 11.8 µs | 11.4 µs | 11 |
| iter: forEach() | v3 | 3.51 µs | 3.78 µs | 3.75 µs | 3.37 µs | 36 |
| iter: forEach() | gpu | 3.32 µs | 3.35 µs | 3.53 µs | 3.25 µs | 45 |
| iter: filter(fn) | v3 | 242 µs | 248 µs | 316 µs | 237 µs | 2822 |
| iter: filter(fn) | gpu | 115 µs | 124 µs | 199 µs | 109 µs | 5600 |
| compare: same() | v3 | 121 µs | 124 µs | 177 µs | 115 µs | 5664 |
| compare: same() | gpu | 14.8 ns | 15.4 ns | 24.9 ns | 14.2 ns | 11082 |
| compare: contains() | v3 | 6.22 µs | 6.24 µs | 6.47 µs | 6.08 µs | 24 |
| compare: contains() | gpu | 1.24 µs | 1.26 µs | 1.35 µs | 1.20 µs | 130 |
| mut: data set | v3 | 617 ns | 636 ns | 1.05 µs | 590 ns | 264 |
| mut: data set | gpu | 234 ns | 246 ns | 430 ns | 228 ns | 690 |
| mut: position set | v3 | 1.20 µs | 1.21 µs | 1.34 µs | 1.16 µs | 136 |
| mut: position set | gpu | 52.3 ns | 55.2 ns | 90.2 ns | 50.9 ns | 3071 |
| mut: select + unselect | v3 | 2.53 µs | 2.71 µs | 3.31 µs | 2.42 µs | 58 |
| mut: select + unselect | gpu | 596 ns | 603 ns | 691 ns | 574 ns | 271 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| sweep: nodes() | v3 | 410 µs | 419 µs | 496 µs | 397 µs | 1673 |
| sweep: nodes() | gpu | 2.41 ns | 2.48 ns | 2.95 ns | 2.26 ns | 66581 |
| sweep: edges() | v3 | 714 µs | 726 µs | 830 µs | 679 µs | 962 |
| sweep: edges() | gpu | 2.52 ns | 2.62 ns | 4.76 ns | 2.46 ns | 63240 |
| sweep: elements() | v3 | 139 µs | 147 µs | 248 µs | 135 µs | 4727 |
| sweep: elements() | gpu | 4.76 ns | 4.89 ns | 8.99 ns | 4.55 ns | 34553 |
| sweep: all nodes ($("node") vs filter({group})) | v3 | 546 µs | 569 µs | 801 µs | 528 µs | 1228 |
| sweep: all nodes ($("node") vs filter({group})) | gpu | 63.2 µs | 76.4 µs | 177 µs | 59.3 µs | 9071 |
| sweep: selected ($(":selected") vs filter({selected})) | v3 | 339 µs | 354 µs | 605 µs | 329 µs | 1977 |
| sweep: selected ($(":selected") vs filter({selected})) | gpu | 25.7 µs | 26.1 µs | 26.2 µs | 25.5 µs | 12 |
| sweep: selected nodes ($("node:selected") vs filter({group, selected})) | v3 | 325 µs | 334 µs | 491 µs | 315 µs | 2096 |
| sweep: selected nodes ($("node:selected") vs filter({group, selected})) | gpu | 9.07 µs | 9.18 µs | 9.47 µs | 9.04 µs | 15 |
| sweep: nodes(":selected") vs nodes({selected}) | v3 | 532 µs | 541 µs | 776 µs | 510 µs | 1292 |
| sweep: nodes(":selected") vs nodes({selected}) | gpu | 8.95 µs | 8.99 µs | 9.11 µs | 8.88 µs | 15 |
| sweep: filter(fn) | v3 | 407 µs | 417 µs | 538 µs | 396 µs | 1680 |
| sweep: filter(fn) | gpu | 76.3 µs | 79.1 µs | 129 µs | 74.5 µs | 8830 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| mut-bulk: select + unselect | v3 | 2.12 ms | 2.19 ms | 3.49 ms | 2.05 ms | 303 |
| mut-bulk: select + unselect | gpu | 261 µs | 270 µs | 397 µs | 253 µs | 2594 |
| mut-bulk: hide + show | v3 | 56.4 ms | 61.5 ms | 72.6 ms | 55.3 ms | 12 |
| mut-bulk: hide + show | gpu | 214 µs | 219 µs | 361 µs | 209 µs | 3088 |
| mut-bulk: lock + unlock | v3 | 2.04 ms | 2.10 ms | 3.44 ms | 1.95 ms | 329 |
| mut-bulk: lock + unlock | gpu | 38.3 µs | 38.7 µs | 39.1 µs | 37.8 µs | 12 |
| mut-bulk: positions(obj) | v3 | 2.28 ms | 2.34 ms | 3.81 ms | 2.21 ms | 294 |
| mut-bulk: positions(obj) | gpu | 36.8 µs | 38.4 µs | 67.1 µs | 34.7 µs | 18007 |
| mut-bulk: positions(fn) | v3 | 3.36 ms | 3.53 ms | 5.60 ms | 3.26 ms | 194 |
| mut-bulk: positions(fn) | gpu | 146 µs | 149 µs | 201 µs | 141 µs | 4616 |
| mut-bulk: shift | v3 | 3.40 ms | 3.52 ms | 4.96 ms | 3.27 ms | 188 |
| mut-bulk: shift | gpu | 32.3 µs | 33.1 µs | 55.1 µs | 30.8 µs | 20547 |
| mut-bulk: data set | v3 | 871 µs | 902 µs | 1.54 ms | 846 µs | 770 |
| mut-bulk: data set | gpu | 65.7 µs | 67.6 µs | 118 µs | 62.9 µs | 10161 |
| mut-bulk: remove + re-add (256 nodes + cascade) | v3 | 41.6 ms | 45.6 ms | 53.3 ms | 40.4 ms | 11 |
| mut-bulk: remove + re-add (256 nodes + cascade) | gpu | 6.35 ms | 6.45 ms | 7.51 ms | 5.65 ms | 102 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| scn: explore (expand 2-hop + select + fit) | v3 | 297 µs | 349 µs | 981 µs | 281 µs | 1991 |
| scn: explore (expand 2-hop + select + fit) | gpu | 37.3 µs | 43.2 µs | 210 µs | 33.7 µs | 15793 |
| scn: select-all + fit (listeners on) | v3 | 25.1 ms | 25.2 ms | 27.0 ms | 23.3 ms | 23 |
| scn: select-all + fit (listeners on) | gpu | 931 µs | 977 µs | 1.39 ms | 892 µs | 688 |
| scn: drag (select band of 100 + 8-step shift, position listener) | v3 | 1.65 ms | 1.69 ms | 2.17 ms | 1.60 ms | 397 |
| scn: drag (select band of 100 + 8-step shift, position listener) | gpu | 102 µs | 109 µs | 348 µs | 97.5 µs | 6361 |
| scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) | v3 | 44.6 ms | 44.5 ms | 46.5 ms | 42.8 ms | 11 |
| scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) | gpu | 6.53 ms | 6.78 ms | 8.84 ms | 5.96 ms | 97 |
| scn: refresh (bulk data write + mapped labels + filter + fit, data listener) | v3 | 7.50 ms | 7.56 ms | 9.27 ms | 6.72 ms | 84 |
| scn: refresh (bulk data write + mapped labels + filter + fit, data listener) | gpu | 4.13 ms | 4.26 ms | 7.01 ms | 3.70 ms | 152 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| trav: neighborhood() | v3 | 3.94 µs | 4.05 µs | 5.30 µs | 3.46 µs | 38 |
| trav: neighborhood() | gpu | 1.01 µs | 1.06 µs | 2.00 µs | 825 ns | 156 |
| trav: closedNeighborhood() | v3 | 5.83 µs | 5.68 µs | 6.16 µs | 5.17 µs | 26 |
| trav: closedNeighborhood() | gpu | 2.09 µs | 2.24 µs | 2.84 µs | 2.03 µs | 72 |
| trav: connectedEdges() | v3 | 991 ns | 1.10 µs | 1.91 µs | 939 ns | 151 |
| trav: connectedEdges() | gpu | 388 ns | 404 ns | 663 ns | 378 ns | 419 |
| trav: outgoers() | v3 | 2.26 µs | 2.42 µs | 3.03 µs | 2.18 µs | 66 |
| trav: outgoers() | gpu | 441 ns | 522 ns | 2.01 µs | 438 ns | 318 |
| trav: incomers() | v3 | 2.29 µs | 2.43 µs | 2.95 µs | 2.23 µs | 66 |
| trav: incomers() | gpu | 466 ns | 544 ns | 2.02 µs | 441 ns | 303 |
| trav: successors() | v3 | 432 ms | 438 ms | 452 ms | 429 ms | 12 |
| trav: successors() | gpu | 587 µs | 617 µs | 1.75 ms | 574 µs | 1103 |
| trav: predecessors() | v3 | 434 ms | 435 ms | 443 ms | 428 ms | 12 |
| trav: predecessors() | gpu | 598 µs | 625 µs | 1.82 ms | 576 µs | 1090 |
| trav: band neighborhood() | v3 | 187 µs | 201 µs | 308 µs | 179 µs | 3473 |
| trav: band neighborhood() | gpu | 37.0 µs | 37.4 µs | 38.7 µs | 36.0 µs | 12 |
| trav: band connectedEdges() | v3 | 24.5 µs | 24.7 µs | 24.9 µs | 23.3 µs | 12 |
| trav: band connectedEdges() | gpu | 16.7 µs | 17.1 µs | 19.6 µs | 16.0 µs | 12 |
| trav: band roots() | v3 | 109 µs | 118 µs | 175 µs | 105 µs | 5870 |
| trav: band roots() | gpu | 4.49 µs | 4.50 µs | 4.64 µs | 4.41 µs | 34 |
| trav: band sources() | v3 | 6.51 µs | 6.52 µs | 6.77 µs | 6.19 µs | 22 |
| trav: band sources() | gpu | 4.38 µs | 4.43 µs | 4.81 µs | 4.27 µs | 34 |
| trav: band connectedNodes() | v3 | 14.1 µs | 14.7 µs | 15.5 µs | 13.9 µs | 12 |
| trav: band connectedNodes() | gpu | 4.97 µs | 5.03 µs | 5.34 µs | 4.87 µs | 30 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| algo: bfs (whole graph) | v3 | 51.4 ms | 53.5 ms | 59.5 ms | 49.7 ms | 9 |
| algo: bfs (whole graph) | gpu | 879 µs | 908 µs | 1.36 ms | 868 µs | 766 |
| algo: dfs (whole graph) | v3 | 48.8 ms | 49.0 ms | 49.9 ms | 48.3 ms | 10 |
| algo: dfs (whole graph) | gpu | 836 µs | 850 µs | 1.16 ms | 800 µs | 817 |
| algo: dijkstra + pathTo | v3 | 52.1 ms | 52.3 ms | 53.0 ms | 51.6 ms | 10 |
| algo: dijkstra + pathTo | gpu | 920 µs | 934 µs | 1.16 ms | 888 µs | 745 |
| algo: aStar | v3 | 1.64 ms | 1.68 ms | 2.50 ms | 1.57 ms | 411 |
| algo: aStar | gpu | 483 µs | 495 µs | 639 µs | 466 µs | 1412 |
| algo: bellmanFord | v3 | 227 ms | 225 ms | 248 ms | 205 ms | 12 |
| algo: bellmanFord | gpu | 11.7 ms | 11.8 ms | 12.3 ms | 11.6 ms | 56 |
| algo: kruskal | v3 | 13.2 ms | 14.1 ms | 17.2 ms | 12.8 ms | 45 |
| algo: kruskal | gpu | 461 µs | 482 µs | 953 µs | 452 µs | 1448 |
| algo: tarjan SCC | v3 | 22.9 ms | 24.1 ms | 30.0 ms | 21.1 ms | 25 |
| algo: tarjan SCC | gpu | 667 µs | 791 µs | 5.37 ms | 598 µs | 875 |
| algo: hopcroft-tarjan biconnected | v3 | 84.8 ms | 86.0 ms | 87.9 ms | 81.2 ms | 12 |
| algo: hopcroft-tarjan biconnected | gpu | 3.53 ms | 3.67 ms | 4.81 ms | 3.45 ms | 185 |
| algo: hierholzer (directed) | v3 | 22.3 ms | 23.2 ms | 25.6 ms | 21.5 ms | 26 |
| algo: hierholzer (directed) | gpu | 7.76 ms | 7.84 ms | 9.20 ms | 7.46 ms | 80 |
| algo: betweennessCentrality (unweighted) | v3 | 4.07 s | 4.08 s | 4.12 s | 4.04 s | 12 |
| algo: betweennessCentrality (unweighted) | gpu | 358 ms | 371 ms | 433 ms | 338 ms | 12 |
| algo: degreeCentralityNormalized | v3 | 14.6 ms | 15.2 ms | 18.1 ms | 13.5 ms | 42 |
| algo: degreeCentralityNormalized | gpu | 392 µs | 400 µs | 555 µs | 380 µs | 1708 |
| algo: closenessCentrality (one root) | v3 | 59.8 ms | 61.6 ms | 65.9 ms | 57.3 ms | 12 |
| algo: closenessCentrality (one root) | gpu | 842 µs | 855 µs | 1.03 ms | 815 µs | 796 |
| algo: degreeCentrality (one root) | v3 | 7.35 µs | 7.12 µs | 7.59 µs | 6.55 µs | 20 |
| algo: degreeCentrality (one root) | gpu | 218 ns | 223 ns | 299 ns | 209 ns | 759 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| algo: bfs (whole graph) | v3 | 12.7 ms | 13.2 ms | 18.1 ms | 10.7 ms | 49 |
| algo: bfs (whole graph) | gpu | 208 µs | 213 µs | 268 µs | 204 µs | 3286 |
| algo: dfs (whole graph) | v3 | 11.7 ms | 12.6 ms | 15.5 ms | 11.4 ms | 52 |
| algo: dfs (whole graph) | gpu | 204 µs | 209 µs | 306 µs | 200 µs | 3343 |
| algo: dijkstra + pathTo | v3 | 12.1 ms | 12.7 ms | 16.3 ms | 11.4 ms | 51 |
| algo: dijkstra + pathTo | gpu | 234 µs | 241 µs | 409 µs | 228 µs | 2888 |
| algo: aStar | v3 | 442 µs | 450 µs | 535 µs | 427 µs | 1556 |
| algo: aStar | gpu | 125 µs | 130 µs | 202 µs | 120 µs | 5393 |
| algo: bellmanFord | v3 | 17.7 ms | 17.8 ms | 18.5 ms | 17.3 ms | 36 |
| algo: bellmanFord | gpu | 810 µs | 837 µs | 1.90 ms | 784 µs | 830 |
| algo: kruskal | v3 | 3.22 ms | 3.50 ms | 7.04 ms | 3.14 ms | 196 |
| algo: kruskal | gpu | 126 µs | 131 µs | 198 µs | 121 µs | 5338 |
| algo: tarjan SCC | v3 | 5.35 ms | 5.71 ms | 8.86 ms | 5.21 ms | 118 |
| algo: tarjan SCC | gpu | 152 µs | 159 µs | 253 µs | 147 µs | 4408 |
| algo: hopcroft-tarjan biconnected | v3 | 20.4 ms | 20.9 ms | 24.3 ms | 18.9 ms | 30 |
| algo: hopcroft-tarjan biconnected | gpu | 825 µs | 856 µs | 1.29 ms | 803 µs | 814 |
| algo: hierholzer (directed) | v3 | 4.27 ms | 4.55 ms | 7.52 ms | 4.09 ms | 144 |
| algo: hierholzer (directed) | gpu | 819 µs | 845 µs | 1.22 ms | 795 µs | 806 |
| algo: betweennessCentrality (unweighted) | v3 | 260 ms | 262 ms | 266 ms | 257 ms | 12 |
| algo: betweennessCentrality (unweighted) | gpu | 20.2 ms | 20.2 ms | 20.6 ms | 19.8 ms | 30 |
| algo: degreeCentralityNormalized | v3 | 3.48 ms | 3.80 ms | 7.26 ms | 3.39 ms | 180 |
| algo: degreeCentralityNormalized | gpu | 94.5 µs | 97.1 µs | 145 µs | 92.9 µs | 7192 |
| algo: closenessCentrality (one root) | v3 | 13.7 ms | 14.3 ms | 17.0 ms | 13.0 ms | 45 |
| algo: closenessCentrality (one root) | gpu | 201 µs | 205 µs | 260 µs | 193 µs | 3414 |
| algo: degreeCentrality (one root) | v3 | 7.39 µs | 7.28 µs | 7.61 µs | 6.58 µs | 20 |
| algo: degreeCentrality (one root) | gpu | 214 ns | 223 ns | 345 ns | 204 ns | 763 |
| algo: pageRank (20 iters) | v3 | 2.75 ms | 2.90 ms | 6.07 ms | 2.67 ms | 237 |
| algo: pageRank (20 iters) | gpu | 39.3 µs | 44.1 µs | 144 µs | 38.4 µs | 15701 |
| algo: closenessCentrality (weighted, one root) | v3 | 13.4 ms | 14.4 ms | 18.6 ms | 13.1 ms | 44 |
| algo: closenessCentrality (weighted, one root) | gpu | 256 µs | 266 µs | 508 µs | 244 µs | 2635 |
| algo: floydWarshall | v3 | 245 ms | 273 ms | 387 ms | 242 ms | 12 |
| algo: floydWarshall | gpu | 140 ms | 141 ms | 141 ms | 138 ms | 12 |
| algo: closenessCentralityNormalized | v3 | 273 ms | 273 ms | 275 ms | 268 ms | 12 |
| algo: closenessCentralityNormalized | gpu | 111 ms | 117 ms | 141 ms | 110 ms | 12 |
| algo: markovClustering | v3 | 4.10 s | 4.35 s | 4.63 s | 4.07 s | 12 |
| algo: markovClustering | gpu | 3.73 s | 3.74 s | 3.76 s | 3.72 s | 12 |
| algo: hierarchicalClustering (threshold) | v3 | 34.4 ms | 34.5 ms | 35.6 ms | 33.9 ms | 16 |
| algo: hierarchicalClustering (threshold) | gpu | 4.14 ms | 4.25 ms | 5.61 ms | 4.03 ms | 160 |
| algo: kMeans (fixed centroids) | v3 | 9.01 ms | 9.04 ms | 9.70 ms | 8.60 ms | 74 |
| algo: kMeans (fixed centroids) | gpu | 1.98 ms | 2.03 ms | 3.12 ms | 1.90 ms | 342 |
| algo: kMedoids | v3 | 301 ms | 294 ms | 455 ms | 110 ms | 12 |
| algo: kMedoids | gpu | 39.3 ms | 35.8 ms | 45.8 ms | 13.0 ms | 17 |
| algo: fuzzyCMeans | v3 | 78.8 ms | 80.2 ms | 82.8 ms | 78.1 ms | 12 |
| algo: fuzzyCMeans | gpu | 6.93 ms | 6.99 ms | 7.74 ms | 6.71 ms | 96 |
| algo: affinityPropagation | v3 | 208 ms | 210 ms | 217 ms | 198 ms | 12 |
| algo: affinityPropagation | gpu | 39.1 ms | 39.6 ms | 41.7 ms | 38.7 ms | 14 |
| algo: kargerStein | v3 | 322 ms | 322 ms | 330 ms | 312 ms | 12 |
| algo: kargerStein | gpu | 306 ms | 307 ms | 312 ms | 298 ms | 12 |
| algo: betweennessCentrality (weighted) | v3 | 705 ms | 706 ms | 714 ms | 694 ms | 12 |
| algo: betweennessCentrality (weighted) | gpu | 81.1 ms | 82.9 ms | 90.5 ms | 77.9 ms | 12 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| mapper: bulk write, color | cpu eval | 1.31 ms | 1.35 ms | 1.98 ms | 1.25 ms | 516 |
| mapper: bulk write, color | gpu path | 175 µs | 184 µs | 328 µs | 169 µs | 3811 |
| mapper: bulk write, color + size | cpu eval | 1.57 ms | 1.60 ms | 1.74 ms | 1.53 ms | 429 |
| mapper: bulk write, color + size | gpu color / cpu size | 1.47 ms | 1.50 ms | 1.70 ms | 1.46 ms | 464 |
| mapper: bulk write, mapped labels (round-5 path) | label refresh | 3.97 ms | 4.20 ms | 6.70 ms | 3.39 ms | 161 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| layout: grid | v3 | 11.0 ms | 11.7 ms | 16.4 ms | 9.86 ms | 54 |
| layout: grid | gpu | 127 µs | 133 µs | 247 µs | 80.5 µs | 4911 |
| layout: preset | v3 | 5.50 ms | 5.74 ms | 8.49 ms | 5.35 ms | 111 |
| layout: preset | gpu | 296 µs | 316 µs | 660 µs | 288 µs | 2117 |
| layout: preset (fn form) | v3 | 5.43 ms | 5.73 ms | 9.01 ms | 5.15 ms | 117 |
| layout: preset (fn form) | gpu | 145 µs | 161 µs | 502 µs | 139 µs | 4297 |
| layout: circle | v3 | 9.43 ms | 10.0 ms | 15.1 ms | 9.01 ms | 65 |
| layout: circle | gpu | 1.39 ms | 1.50 ms | 3.54 ms | 1.30 ms | 453 |
| layout: concentric | v3 | 32.1 ms | 32.5 ms | 36.6 ms | 28.4 ms | 17 |
| layout: concentric | gpu | 1.98 ms | 2.21 ms | 4.52 ms | 1.94 ms | 306 |
| layout: breadthfirst | v3 | 392 ms | 405 ms | 448 ms | 386 ms | 12 |
| layout: breadthfirst | gpu | 12.5 ms | 13.1 ms | 16.0 ms | 12.0 ms | 47 |
| layout: random | v3 | 5.34 ms | 5.73 ms | 9.57 ms | 5.13 ms | 116 |
| layout: random | gpu | 663 µs | 716 µs | 1.53 ms | 643 µs | 965 |
| layout: radial vs breadthfirst-circle (unbalanced tree) | radial | 2.49 ms | 2.85 ms | 4.98 ms | 2.35 ms | 236 |
| layout: radial vs breadthfirst-circle (unbalanced tree) | breadthfirst circle | 7.76 ms | 8.16 ms | 16.7 ms | 7.53 ms | 79 |
| layout: flow vs breadthfirst (staged DAG) | flow | 165 ms | 179 ms | 207 ms | 162 ms | 12 |
| layout: flow vs breadthfirst (staged DAG) | breadthfirst | 10.3 ms | 10.7 ms | 18.5 ms | 9.73 ms | 60 |
| layout: force (CPU executor, 20 iterations) | gpu | 115 ms | 123 ms | 135 ms | 105 ms | 12 |
| layout: force constrained vs plain (CPU, 20 iterations) | constrained | 110 ms | 112 ms | 119 ms | 103 ms | 12 |
| layout: force constrained vs plain (CPU, 20 iterations) | plain | 109 ms | 111 ms | 119 ms | 102 ms | 12 |
| layout: force seed — spectral vs scatter (20 iterations) | spectral (landmark MDS, the default) | 110 ms | 113 ms | 123 ms | 103 ms | 12 |
| layout: force seed — spectral vs scatter (20 iterations) | scatter | 57.0 ms | 56.9 ms | 57.3 ms | 56.1 ms | 9 |
| layout: plumbing (layoutPositions vs setPositions) | finisher | 457 µs | 493 µs | 994 µs | 443 µs | 1407 |
| layout: plumbing (layoutPositions vs setPositions) | bulk | 32.0 µs | 41.1 µs | 251 µs | 29.9 µs | 16081 |
| layout: contract fixed cost (empty impl vs bulk placement) | wrapper only | 544 ns | 973 ns | 3.88 µs | 527 ns | 166 |
| layout: contract fixed cost (empty impl vs bulk placement) | wrapper + bulk write | 39.8 µs | 40.7 µs | 41.8 µs | 38.3 µs | 12 |
| layout: scope (eles.layout, 10% of nodes) | v3 | 971 µs | 1.05 ms | 2.72 ms | 946 µs | 586 |
| layout: scope (eles.layout, 10% of nodes) | gpu | 130 µs | 143 µs | 266 µs | 125 µs | 4767 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| style: sheet swap (compile + applyAll) | v3 | 13.3 ms | 13.4 ms | 15.5 ms | 12.5 ms | 47 |
| style: sheet swap (compile + applyAll) | gpu | 2.28 ms | 2.31 ms | 2.69 ms | 2.22 ms | 289 |
| style: compile vs compile + apply | compile only (in batch) | 24.6 µs | 28.2 µs | 35.3 µs | 23.8 µs | 12 |
| style: compile vs compile + apply | compile + apply | 2.25 ms | 2.28 ms | 2.62 ms | 2.18 ms | 292 |
| style: first apply on add (256-node band) | v3 | 1.40 ms | 1.66 ms | 6.98 ms | 1.16 ms | 412 |
| style: first apply on add (256-node band) | gpu | 739 µs | 873 µs | 2.67 ms | 690 µs | 791 |
| style: applyAll, flat vs compound (100 parents — the 14.6 partition) | flat | 2.27 ms | 2.34 ms | 3.02 ms | 2.20 ms | 296 |
| style: applyAll, flat vs compound (100 parents — the 14.6 partition) | compound | 2.74 ms | 2.83 ms | 4.77 ms | 2.64 ms | 243 |
| style: applyAll — constant vs state-case (the 57.1d partition) | constant sheet | 2.26 ms | 2.29 ms | 2.70 ms | 2.21 ms | 303 |
| style: applyAll — constant vs state-case (the 57.1d partition) | state-case sheet | 2.27 ms | 2.30 ms | 2.89 ms | 2.17 ms | 300 |
| style: applyAll — state-case vs data-case (what the partition avoids) | state-case sheet | 2.29 ms | 2.32 ms | 2.71 ms | 2.19 ms | 298 |
| style: applyAll — state-case vs data-case (what the partition avoids) | data-case sheet | 9.93 ms | 10.0 ms | 10.8 ms | 9.68 ms | 63 |
| style: select+unselect 256-band — constant vs state-case sheet | constant sheet (skips restyle) | 6.71 µs | 6.73 µs | 6.86 µs | 6.64 µs | 21 |
| style: select+unselect 256-band — constant vs state-case sheet | paint-only state sheet (round-61 diff path) | 32.6 µs | 33.9 µs | 55.9 µs | 31.2 µs | 19871 |
| style: select+unselect 256-band — constant vs state-case sheet | state-case sheet (all channels; full write) | 382 µs | 397 µs | 679 µs | 378 µs | 1744 |
| style: read one prop (color) | v3 | 94.0 ns | 107 ns | 618 ns | 85.0 ns | 1986392 |
| style: read one prop (color) | gpu | 53.4 ns | 58.3 ns | 97.6 ns | 51.3 ns | 2923 |
| style: read one prop (width) | v3 | 113 ns | 121 ns | 433 ns | 96.0 ns | 1934561 |
| style: read one prop (width) | gpu | 53.3 ns | 58.3 ns | 309 ns | 51.0 ns | 2920 |
| style: numericStyle | v3 | 139 ns | 133 ns | 357 ns | 86.0 ns | 1838743 |
| style: numericStyle | gpu | 51.5 ns | 53.9 ns | 116 ns | 48.0 ns | 3170 |
| style: renderedStyle (one prop) | v3 | 918 ns | 981 ns | 2.00 µs | 866 ns | 540568 |
| style: renderedStyle (one prop) | gpu | 68.8 ns | 72.9 ns | 180 ns | 67.1 ns | 2346 |
| style: whole-object style() | v3 | 84.8 µs | 90.5 µs | 180 µs | 82.8 µs | 7684 |
| style: whole-object style() | gpu | 14.4 µs | 16.2 µs | 52.3 µs | 13.6 µs | 41636 |
| style: bypass set (ele.style name,value) | v3 | 10.6 µs | 10.5 µs | 10.9 µs | 9.84 µs | 11 |
| style: bypass set (ele.style name,value) | gpu | 2.57 µs | 2.86 µs | 4.12 µs | 2.44 µs | 54 |
| style: bypass set + removeStyle round-trip | v3 | 20.9 µs | 22.5 µs | 22.5 µs | 20.1 µs | 12 |
| style: bypass set + removeStyle round-trip | gpu | 3.64 µs | 3.76 µs | 4.59 µs | 3.32 µs | 40 |
| style: select+unselect 256-band under the default sheet — bypass punch-out | no bypasses (diff path; the O(0) gate row) | 33.1 µs | 33.7 µs | 46.2 µs | 31.7 µs | 19660 |
| style: select+unselect 256-band under the default sheet — bypass punch-out | 128 of 256 bypassed (punched out to merged writes) | 226 µs | 236 µs | 389 µs | 219 µs | 2956 |
| style: sheet swap (applyAll) — 0 vs 128 bypasses | no bypasses | 2.46 ms | 2.50 ms | 2.96 ms | 2.35 ms | 276 |
| style: sheet swap (applyAll) — 0 vs 128 bypasses | 128 bypassed | 8.59 ms | 8.89 ms | 11.5 ms | 8.36 ms | 73 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| style( 'background-color' ) (was #4 in the switch) | v3 | 59.6 ns | 60.8 ns | 73.9 ns | 57.2 ns | 2821 |
| style( 'background-color' ) (was #4 in the switch) | gpu | 52.7 ns | 54.5 ns | 84.4 ns | 50.4 ns | 3127 |
| style( 'border-width' ) (was #6 in the switch) | v3 | 60.4 ns | 61.3 ns | 75.0 ns | 58.1 ns | 2798 |
| style( 'border-width' ) (was #6 in the switch) | gpu | 54.3 ns | 55.5 ns | 68.9 ns | 52.0 ns | 3072 |
| style( 'text-wrap' ) (was #73 in the switch) | v3 | 61.3 ns | 62.6 ns | 80.6 ns | 59.1 ns | 2731 |
| style( 'text-wrap' ) (was #73 in the switch) | gpu | 35.6 ns | 36.3 ns | 46.6 ns | 34.0 ns | 4732 |
| style( 'text-max-width' ) (was #74 in the switch) | v3 | 59.0 ns | 60.2 ns | 74.1 ns | 57.0 ns | 2855 |
| style( 'text-max-width' ) (was #74 in the switch) | gpu | 34.0 ns | 34.6 ns | 45.0 ns | 32.5 ns | 4954 |
| style( 'taxi-radius' ) (was #142 in the switch) | v3 | 60.7 ns | 61.9 ns | 78.0 ns | 58.9 ns | 2777 |
| style( 'taxi-radius' ) (was #142 in the switch) | gpu | 48.5 ns | 51.6 ns | 77.7 ns | 46.5 ns | 3305 |
| style( 'target-distance-from-node' ) (was #150 in the switch) | v3 | 65.0 ns | 68.3 ns | 112 ns | 62.5 ns | 2514 |
| style( 'target-distance-from-node' ) (was #150 in the switch) | gpu | 48.3 ns | 49.4 ns | 67.2 ns | 46.8 ns | 3468 |
| whole-object style() (gpu-only: v3 returns a different shape) | gpu node | 13.4 µs | 14.3 µs | 30.2 µs | 12.8 µs | 47075 |
| whole-object style() (gpu-only: v3 returns a different shape) | gpu edge | 14.5 µs | 15.5 µs | 36.7 µs | 13.9 µs | 43432 |
| colour-valued vs numeric reads (the string build) | gpu background-color (colour) | 73.0 ns | 75.0 ns | 109 ns | 70.5 ns | 2279 |
| colour-valued vs numeric reads (the string build) | gpu border-color (colour) | 71.3 ns | 72.8 ns | 105 ns | 69.2 ns | 2351 |
| colour-valued vs numeric reads (the string build) | gpu border-width (number) | 66.7 ns | 68.7 ns | 137 ns | 64.2 ns | 2487 |
| colour-valued vs numeric reads (the string build) | gpu width (number) | 58.6 ns | 59.8 ns | 76.2 ns | 56.2 ns | 2858 |
| the getters that ride readProp | gpu numericStyle( width ) | 61.0 ns | 62.3 ns | 85.1 ns | 59.1 ns | 2746 |
| the getters that ride readProp | gpu effectiveOpacity() | 21.5 ns | 21.8 ns | 31.2 ns | 20.4 ns | 7857 |
| the getters that ride readProp | gpu renderedStyle( width ) | 77.2 ns | 77.9 ns | 87.5 ns | 74.9 ns | 2196 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| load: init from the definition form (construct + dispose) | v3 | 133 ms | 144 ms | 173 ms | 127 ms | 12 |
| load: init from the definition form (construct + dispose) | gpu | 5.02 ms | 6.54 ms | 20.3 ms | 4.26 ms | 98 |
| load: v4 ingest forms (construct + dispose) | definition form | 4.36 ms | 6.55 ms | 16.4 ms | 4.12 ms | 103 |
| load: v4 ingest forms (construct + dispose) | columnar form | 3.30 ms | 4.72 ms | 13.1 ms | 3.19 ms | 142 |
| load: v4 ingest forms (construct + dispose) | wire buffer | 2.86 ms | 4.14 ms | 12.9 ms | 2.80 ms | 162 |
| load: v4 ingest forms (construct + dispose) | def clone alone (control) | 617 µs | 800 µs | 2.40 ms | 204 µs | 825 |
| load: conversion | toColumnarElements | 696 µs | 745 µs | 1.25 ms | 676 µs | 929 |
| load: conversion | serializeElements (from columnar) | 181 µs | 367 µs | 967 µs | 173 µs | 1896 |
| load: conversion | serializeElements (from defs) | 870 µs | 894 µs | 1.32 ms | 845 µs | 777 |
| load: conversion | deserializeElements | 4.59 µs | 4.42 µs | 5.79 µs | 3.30 µs | 30 |
| load: export from a live graph | cy.serialize() (wire) | 499 µs | 571 µs | 1.97 ms | 486 µs | 1203 |
| load: export from a live graph | cy.json() (v4) | 727 µs | 1.08 ms | 6.77 ms | 686 µs | 622 |
| load: cy.json() | v3 | 2.02 ms | 2.34 ms | 6.25 ms | 1.96 ms | 291 |
| load: cy.json() | gpu | 762 µs | 903 µs | 2.60 ms | 714 µs | 770 |
| load: add a 256-node band (add + remove) | v3 | 3.69 ms | 4.40 ms | 10.9 ms | 3.22 ms | 150 |
| load: add a 256-node band (add + remove) | gpu | 2.32 ms | 2.62 ms | 7.89 ms | 1.62 ms | 258 |
| load: add a 256-node band, v4 forms | definition form | 2.32 ms | 2.34 ms | 5.29 ms | 1.53 ms | 291 |
| load: add a 256-node band, v4 forms | columnar form | 1.92 ms | 2.01 ms | 4.26 ms | 1.29 ms | 337 |
| load: add a 256-node band, v4 forms | wire buffer | 1.92 ms | 1.97 ms | 3.86 ms | 1.29 ms | 348 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| pick: hit (the walk; one inside-test) | zoom 1 | 20.7 µs | 21.5 µs | 42.5 µs | 20.0 µs | 31984 |
| pick: hit (the walk; one inside-test) | zoom 2 | 20.8 µs | 21.2 µs | 21.6 µs | 20.4 µs | 12 |
| pick: miss walk — exact vs 24 px touch halo (57.9) | exact | 46.2 µs | 46.5 µs | 47.1 µs | 45.7 µs | 12 |
| pick: miss walk — exact vs 24 px touch halo (57.9) | padPx 24 | 44.7 µs | 45.9 µs | 83.4 µs | 42.2 µs | 15158 |
| pick: shape inside-test, 2000 coincident misses | ellipse | 87.5 µs | 90.4 µs | 136 µs | 83.6 µs | 7726 |
| pick: shape inside-test, 2000 coincident misses | star | 234 µs | 242 µs | 293 µs | 224 µs | 2877 |
| pick: shape inside-test, 2000 coincident misses | round-hexagon | 792 µs | 800 µs | 921 µs | 770 µs | 875 |
| pick: shape inside-test, 2000 coincident misses | barrel | 688 µs | 708 µs | 885 µs | 663 µs | 985 |
| pick: shape inside-test, 2000 coincident misses | cut-rectangle | 99.6 µs | 101 µs | 142 µs | 96.0 µs | 6908 |
| pick: shape inside-test, 2000 coincident misses | polygon | 209 µs | 214 µs | 272 µs | 202 µs | 3278 |
| pick: round-hexagon inside-test by zoom (not affine-invariant) | zoom 1 | 803 µs | 812 µs | 990 µs | 774 µs | 862 |
| pick: round-hexagon inside-test by zoom (not affine-invariant) | zoom 2 | 791 µs | 799 µs | 932 µs | 768 µs | 876 |
| pick: background miss (full highWater walk) | gpu | 44.9 µs | 45.3 µs | 46.1 µs | 44.4 µs | 12 |
| pick: label box in the scan (text-events) | text-events: no | 45.0 µs | 45.3 µs | 46.5 µs | 44.3 µs | 12 |
| pick: label box in the scan (text-events) | text-events: yes | 123 µs | 128 µs | 193 µs | 118 µs | 5447 |
| box: elementsInBox by covered fraction | 10% | 149 µs | 154 µs | 247 µs | 145 µs | 4538 |
| box: elementsInBox by covered fraction | 50% | 197 µs | 203 µs | 374 µs | 188 µs | 3421 |
| box: elementsInBox by covered fraction | 100% | 331 µs | 340 µs | 783 µs | 312 µs | 2052 |
| box: label containment (boxSelectionIncludesLabels) | off | 229 µs | 237 µs | 374 µs | 222 µs | 2939 |
| box: label containment (boxSelectionIncludesLabels) | on | 262 µs | 275 µs | 630 µs | 251 µs | 2540 |
| box: overlap vs contain (straight edges) | contain | 234 µs | 241 µs | 370 µs | 231 µs | 2898 |
| box: overlap vs contain (straight edges) | overlap | 463 µs | 470 µs | 801 µs | 412 µs | 1484 |
| box: overlap vs contain (curved edges — the segment walk) | contain | 1.25 ms | 1.27 ms | 1.65 ms | 1.21 ms | 550 |
| box: overlap vs contain (curved edges — the segment walk) | overlap | 1.21 ms | 1.24 ms | 1.93 ms | 1.16 ms | 562 |
| bounds: whole-graph boundingBox() | v3 | 7.72 ms | 7.79 ms | 8.90 ms | 7.28 ms | 84 |
| bounds: whole-graph boundingBox() | gpu | 1.21 ms | 1.23 ms | 1.52 ms | 1.17 ms | 549 |
| bounds: boundingBox, labels in vs out (v4) | includeLabels: true (default) | 1.20 ms | 1.24 ms | 1.86 ms | 1.17 ms | 562 |
| bounds: boundingBox, labels in vs out (v4) | includeLabels: false | 656 µs | 670 µs | 985 µs | 632 µs | 1043 |
| bounds: cy.fit() (whole-graph scan) | v3 | 7.57 ms | 7.89 ms | 11.8 ms | 7.25 ms | 85 |
| bounds: cy.fit() (whole-graph scan) | gpu | 232 µs | 244 µs | 450 µs | 225 µs | 2868 |
| bounds: getFitViewport() (compute without committing) | v3 | 7.62 ms | 7.82 ms | 9.77 ms | 7.31 ms | 85 |
| bounds: getFitViewport() (compute without committing) | gpu | 232 µs | 242 µs | 359 µs | 225 µs | 2888 |
| bounds: boundingBoxAt (v4 only) | gpu | 1.47 ms | 1.55 ms | 3.01 ms | 1.41 ms | 438 |
| bounds: one node boundingBox() | v3 | 1.64 µs | 1.65 µs | 2.02 µs | 1.58 µs | 97 |
| bounds: one node boundingBox() | gpu | 1.00 µs | 1.02 µs | 1.33 µs | 969 ns | 160 |
| bounds: labelBoundingBox (v4 only) | gpu | 415 ns | 448 ns | 780 ns | 412 ns | 374 |
| bounds: compound + taxi exact scan (rounds 54/92, v4 only) | warm (curve bbs memoized) | 19.2 µs | 20.0 µs | 46.0 µs | 18.4 µs | 34403 |
| bounds: compound + taxi exact scan (rounds 54/92, v4 only) | cold (geometry write per call) | 204 µs | 214 µs | 334 µs | 200 µs | 3266 |
| bounds: straight-only scan (ndex-shaped, round 92, v4 only) | warm | 34.1 µs | 34.4 µs | 35.1 µs | 33.5 µs | 12 |
| bounds: straight-only scan (ndex-shaped, round 92, v4 only) | cold (geometry write per call) | 34.6 µs | 35.2 µs | 35.9 µs | 33.9 µs | 12 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| data: bulk write, numeric column | v3 | 1.79 ms | 1.87 ms | 3.14 ms | 1.69 ms | 358 |
| data: bulk write, numeric column | gpu | 85.9 µs | 90.2 µs | 154 µs | 82.7 µs | 7749 |
| data: bulk write, dictionary string column (4 values) | v3 | 1.71 ms | 1.74 ms | 2.10 ms | 1.63 ms | 388 |
| data: bulk write, dictionary string column (4 values) | gpu | 103 µs | 109 µs | 313 µs | 95.6 µs | 6435 |
| data: bulk write, one new dictionary entry per pass | v3 | 1.70 ms | 1.73 ms | 2.09 ms | 1.66 ms | 398 |
| data: bulk write, one new dictionary entry per pass | gpu | 99.9 µs | 104 µs | 158 µs | 96.4 µs | 6704 |
| data: bulk write, object column (plain-array fallback) | v3 | 1.71 ms | 1.80 ms | 3.07 ms | 1.64 ms | 384 |
| data: bulk write, object column (plain-array fallback) | gpu | 83.8 µs | 86.7 µs | 136 µs | 79.8 µs | 8066 |
| data: removeData (whole collection) | v3 | 2.53 ms | 2.62 ms | 4.23 ms | 2.45 ms | 262 |
| data: removeData (whole collection) | gpu | 326 µs | 343 µs | 704 µs | 319 µs | 2011 |
| data: read one numeric key | v3 | 38.3 ns | 39.9 ns | 117 ns | 36.6 ns | 4299 |
| data: read one numeric key | gpu | 30.3 ns | 31.8 ns | 81.2 ns | 29.1 ns | 5247 |
| data: read one string key (dictionary decode) | v3 | 41.4 ns | 43.9 ns | 91.4 ns | 39.3 ns | 3910 |
| data: read one string key (dictionary decode) | gpu | 31.0 ns | 32.0 ns | 68.9 ns | 26.7 ns | 5355 |
| data: read the whole object | v3 | 47.7 ns | 49.1 ns | 75.5 ns | 45.4 ns | 3501 |
| data: read the whole object | gpu | 21.1 ns | 22.2 ns | 40.5 ns | 20.1 ns | 7668 |
| query: data equality ([bucket = 3] vs { data: { bucket: 3 } }) | v3 | 682 µs | 695 µs | 1.14 ms | 667 µs | 1004 |
| query: data equality ([bucket = 3] vs { data: { bucket: 3 } }) | gpu | 48.2 µs | 52.3 µs | 124 µs | 43.3 µs | 13200 |
| query: data comparison ([weight > 3] vs { gt }) | v3 | 764 µs | 783 µs | 1.25 ms | 732 µs | 890 |
| query: data comparison ([weight > 3] vs { gt }) | gpu | 69.2 µs | 71.6 µs | 161 µs | 56.9 µs | 9673 |
| query: two keys AND-ed | v3 | 796 µs | 812 µs | 1.09 ms | 783 µs | 859 |
| query: two keys AND-ed | gpu | 66.4 µs | 70.2 µs | 139 µs | 65.3 µs | 9892 |
| query: membership ([bucket in ...] vs { in }) | v3 | 1.01 ms | 1.02 ms | 1.35 ms | 967 µs | 683 |
| query: membership ([bucket in ...] vs { in }) | gpu | 65.0 µs | 69.8 µs | 134 µs | 62.3 µs | 9744 |
| query: predicate function (both sides) | v3 | 657 µs | 672 µs | 929 µs | 640 µs | 1036 |
| query: predicate function (both sides) | gpu | 83.5 µs | 86.5 µs | 139 µs | 79.5 µs | 8066 |
| query: structural, parents (:parent vs { parent: true }) | v3 | 530 µs | 538 µs | 662 µs | 509 µs | 1299 |
| query: structural, parents (:parent vs { parent: true }) | gpu | 15.2 µs | 16.2 µs | 19.0 µs | 15.1 µs | 12 |
| query: structural, childless (:childless vs { parent: false }) | v3 | 795 µs | 815 µs | 1.11 ms | 773 µs | 857 |
| query: structural, childless (:childless vs { parent: false }) | gpu | 59.6 µs | 73.5 µs | 184 µs | 55.4 µs | 9266 |
| query: structural, orphans (:orphan vs { child: false }) | v3 | 499 µs | 507 µs | 599 µs | 484 µs | 1335 |
| query: structural, orphans (:orphan vs { child: false }) | gpu | 15.4 µs | 16.1 µs | 16.2 µs | 15.3 µs | 12 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| emit: position write, no listeners | v3 | 1.29 µs | 1.31 µs | 1.78 µs | 1.23 µs | 115 |
| emit: position write, no listeners | gpu | 49.0 ns | 51.8 ns | 81.1 ns | 46.5 ns | 3302 |
| emit: 1 core listener | v3 | 1.45 µs | 1.45 µs | 1.59 µs | 1.39 µs | 107 |
| emit: 1 core listener | gpu | 164 ns | 168 ns | 254 ns | 157 ns | 936 |
| emit: 1 element (ref-qualified) listener | v3 | 1.41 µs | 1.48 µs | 2.21 µs | 1.34 µs | 106 |
| emit: 1 element (ref-qualified) listener | gpu | 178 ns | 184 ns | 222 ns | 172 ns | 867 |
| emit: delegated (v3 selector vs v4 predicate) | v3 | 1.52 µs | 1.53 µs | 1.63 µs | 1.48 µs | 101 |
| emit: delegated (v3 selector vs v4 predicate) | gpu | 187 ns | 190 ns | 257 ns | 179 ns | 839 |
| emit: 10 core listeners | v3 | 1.97 µs | 2.03 µs | 2.34 µs | 1.87 µs | 77 |
| emit: 10 core listeners | gpu | 296 ns | 302 ns | 353 ns | 295 ns | 508 |
| emit: on() + off() round-trip | v3 | 459 ns | 567 ns | 1.40 µs | 428 ns | 293 |
| emit: on() + off() round-trip | gpu | 214 ns | 257 ns | 909 ns | 184 ns | 641 |
| emit: flat vs phased (compound bubbling, 14.5) | orphan (flat emit) | 295 ns | 344 ns | 2.74 µs | 276 ns | 1012114 |
| emit: flat vs phased (compound bubbling, 14.5) | child of 2 ancestors (phased) | 845 ns | 896 ns | 1.34 µs | 810 ns | 177 |
| emit: flat vs phased, no listeners | orphan (flat) | 80.6 ns | 90.4 ns | 682 ns | 78.3 ns | 1870 |
| emit: flat vs phased, no listeners | child (phased) | 526 ns | 578 ns | 1.91 µs | 505 ns | 288 |
| anim: start + stop, one element | v3 | 826 ns | 1.22 µs | 3.39 µs | 776 ns | 421268 |
| anim: start + stop, one element | gpu | 630 ns | 1.05 µs | 6.85 µs | 582 ns | 464771 |
| anim: start against a running animation (round-21 eviction) | disjoint channels (composes) | 1.29 µs | 1.91 µs | 3.82 µs | 1.07 µs | 80 |
| anim: start against a running animation (round-21 eviction) | overlapping channels (evicts) | 818 ns | 1.42 µs | 3.63 µs | 792 ns | 107 |
| anim: start + stop, 512-node collection | v3 | 294 µs | 455 µs | 3.01 ms | 284 µs | 1465 |
| anim: start + stop, 512-node collection | gpu | 99.9 µs | 113 µs | 185 µs | 97.4 µs | 5487 |
| anim: delay() (no channels touched) | v3 | 646 ns | 962 ns | 3.26 µs | 628 ns | 168 |
| anim: delay() (no channels touched) | gpu | 410 ns | 704 ns | 2.67 µs | 399 ns | 231 |
| anim: controls (v4 only) | pause + resume | 463 ns | 745 ns | 2.63 µs | 451 ns | 205 |
| anim: controls (v4 only) | reverse | 893 ns | 1.52 µs | 3.45 µs | 881 ns | 100 |
| anim: viewport animate + stop | v3 | 558 ns | 837 ns | 3.10 µs | 543 ns | 190 |
| anim: viewport animate + stop | gpu | 194 ns | 224 ns | 825 ns | 192 ns | 740 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| id index: set x 2000 (build) | gpu | 263 µs | 277 µs | 443 µs | 252 µs | 2536 |
| id index: single-key operations | get (probe) | 66.1 ns | 65.7 ns | 114 ns | 52.9 ns | 2597 |
| id index: single-key operations | has | 50.9 ns | 51.9 ns | 69.6 ns | 49.4 ns | 3291 |
| id index: single-key operations | idAt (memoized hit) | 8.96 ns | 9.19 ns | 17.4 ns | 8.59 ns | 18527 |
| id index: single-key operations | hashAt | 6.98 ns | 7.17 ns | 13.9 ns | 6.77 ns | 23639 |
| id index: remove + re-set (churn, drives the round-11 reclaim) | gpu | 231 ns | 237 ns | 297 ns | 227 ns | 712 |
| adjacency: rebuild (4000 edges, two counting passes) | gpu | 39.2 µs | 45.7 µs | 209 µs | 36.8 µs | 15170 |
| adjacency: reads | outDegree (O(1)) | 6.16 ns | 6.27 ns | 9.48 ns | 5.95 ns | 27061 |
| adjacency: reads | outEdges | 44.9 ns | 45.8 ns | 58.1 ns | 43.9 ns | 3732 |
| adjacency: reads | connectedEdges | 117 ns | 180 ns | 2.12 µs | 114 ns | 931 |
| adjacency: addEdge + removeEdge (the overlay path) | gpu | 143 ns | 146 ns | 209 ns | 136 ns | 1159 |
| blob: write x 2000 (build) | gpu | 104 µs | 126 µs | 628 µs | 98.6 µs | 5539 |
| blob: single-record operations | rewrite in place (same length) | 29.5 ns | 30.1 ns | 40.7 ns | 28.7 ns | 5679 |
| blob: single-record operations | offsetOf | 4.24 ns | 4.37 ns | 8.73 ns | 4.09 ns | 38513 |
| blob: single-record operations | free + rewrite | 151 ns | 171 ns | 510 ns | 146 ns | 998 |
| dirty: mark (per-write span coalescing) | contiguous marks | 12.7 ns | 13.2 ns | 25.6 ns | 12.1 ns | 12836 |
| dirty: mark (per-write span coalescing) | scattered marks | 17.7 ns | 18.2 ns | 28.1 ns | 17.1 ns | 9370 |
| dirty: take (a frame's drain) | gpu | 587 ns | 696 ns | 1.30 µs | 580 ns | 237 |
| images: registry bookkeeping | acquire (existing url) | 202 ns | 210 ns | 399 ns | 200 ns | 812 |
| images: registry bookkeeping | acquire (new url) + release | 531 ns | 605 ns | 2.82 µs | 521 ns | 272 |
| charts: sheet apply, chart vs no chart | no chart | 2.21 ms | 2.30 ms | 4.35 ms | 2.17 ms | 292 |
| charts: sheet apply, chart vs no chart | pie from data (blob record per node) | 2.65 ms | 2.69 ms | 3.21 ms | 2.53 ms | 255 |
| charts: data write refreshing chart-values | gpu | 1.48 ms | 1.54 ms | 2.18 ms | 1.47 ms | 451 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| viewport: zoom() get | v3 | 5.68 ns | 5.88 ns | 12.7 ns | 5.32 ns | 28692 |
| viewport: zoom() get | gpu | 1.21 ns | 1.23 ns | 1.91 ns | 1.18 ns | 128843 |
| viewport: zoom( n ) set | v3 | 606 ns | 612 ns | 701 ns | 579 ns | 271 |
| viewport: zoom( n ) set | gpu | 326 ns | 333 ns | 389 ns | 316 ns | 504 |
| viewport: pan() get | v3 | 6.94 ns | 7.33 ns | 14.8 ns | 6.69 ns | 23011 |
| viewport: pan() get | gpu | 4.92 ns | 5.08 ns | 10.0 ns | 4.76 ns | 33203 |
| viewport: pan( p ) set | v3 | 594 ns | 627 ns | 1.05 µs | 580 ns | 267 |
| viewport: pan( p ) set | gpu | 331 ns | 345 ns | 615 ns | 309 ns | 490 |
| viewport: panBy() | v3 | 590 ns | 604 ns | 801 ns | 581 ns | 279 |
| viewport: panBy() | gpu | 345 ns | 353 ns | 591 ns | 316 ns | 477 |
| viewport: extent() | v3 | 30.0 ns | 44.9 ns | 193 ns | 28.2 ns | 3757 |
| viewport: extent() | gpu | 19.3 ns | 26.1 ns | 115 ns | 18.2 ns | 6478 |
| viewport: renderedExtent() | v3 | 27.1 ns | 28.4 ns | 50.8 ns | 25.8 ns | 5956 |
| viewport: renderedExtent() | gpu | 16.4 ns | 23.4 ns | 100 ns | 15.1 ns | 7199 |
| viewport: width() + height() + size() (3 calls) | v3 | 21.4 ns | 23.0 ns | 46.4 ns | 20.5 ns | 7393 |
| viewport: width() + height() + size() (3 calls) | gpu | 5.55 ns | 5.80 ns | 11.5 ns | 5.31 ns | 29048 |
| viewport: minZoom/maxZoom get (2 calls) | v3 | 14.8 ns | 15.3 ns | 25.2 ns | 13.9 ns | 11126 |
| viewport: minZoom/maxZoom get (2 calls) | gpu | 0.999 ns | 1.04 ns | 1.02 ns | 0.977 ns | 152116 |
| viewport: center( eles ) | v3 | 119 µs | 123 µs | 186 µs | 112 µs | 5648 |
| viewport: center( eles ) | gpu | 6.20 µs | 6.23 µs | 6.47 µs | 6.09 µs | 23 |
| viewport: reset() | v3 | 939 ns | 1.03 µs | 1.67 µs | 910 ns | 162 |
| viewport: reset() | gpu | 8.81 ns | 9.23 ns | 18.6 ns | 8.39 ns | 18285 |
| viewport: viewport({ zoom, pan }) | v3 | 933 ns | 1.03 µs | 1.69 µs | 911 ns | 162 |
| viewport: viewport({ zoom, pan }) | gpu | 16.2 ns | 17.1 ns | 41.0 ns | 15.4 ns | 9953 |
| viewport: getCenterPan( eles ) | gpu | 6.10 µs | 6.13 µs | 6.26 µs | 6.07 µs | 24 |
| core: instanceString + headless + styleEnabled (3 calls) | v3 | 32.1 ns | 32.8 ns | 45.7 ns | 31.4 ns | 5195 |
| core: instanceString + headless + styleEnabled (3 calls) | gpu | 25.7 ns | 26.6 ns | 39.6 ns | 24.8 ns | 6410 |
| core: hasElementWithId + hasCompoundNodes (2 calls) | v3 | 37.6 ns | 38.9 ns | 54.7 ns | 36.6 ns | 4410 |
| core: hasElementWithId + hasCompoundNodes (2 calls) | gpu | 31.8 ns | 33.1 ns | 49.7 ns | 30.4 ns | 5158 |
| core: options() | v3 | 91.1 ns | 93.6 ns | 128 ns | 89.1 ns | 1826 |
| core: options() | gpu | 1.07 ns | 1.24 ns | 6.21 ns | 1.03 ns | 128909 |
| core: elements() memo hit (was mutableElements, round 90) | v3 | 2.41 ns | 2.50 ns | 2.99 ns | 2.35 ns | 66268 |
| core: elements() memo hit (was mutableElements, round 90) | gpu | 2.35 ns | 2.40 ns | 2.85 ns | 2.25 ns | 69209 |
| core: gating getters (5 calls) | v3 | 15.6 ns | 16.2 ns | 24.6 ns | 14.9 ns | 10552 |
| core: gating getters (5 calls) | gpu | 13.5 ns | 14.0 ns | 27.6 ns | 12.4 ns | 12165 |
| core: gating setters round-trip (autolock/autoungrabify/autounselectify) | v3 | 11.2 ns | 11.5 ns | 19.3 ns | 10.5 ns | 14766 |
| core: gating setters round-trip (autolock/autoungrabify/autounselectify) | gpu | 6.01 ns | 6.21 ns | 12.5 ns | 5.73 ns | 27333 |
| core: interaction tuning getters (5 calls) | gpu | 7.30 ns | 7.53 ns | 13.2 ns | 7.14 ns | 22548 |
| core: graph data() set + get (v3 restyles the graph) | v3 | 2.84 ms | 2.91 ms | 3.70 ms | 2.72 ms | 237 |
| core: graph data() set + get (v3 restyles the graph) | gpu | 328 ns | 336 ns | 390 ns | 320 ns | 505 |
| core: graph scratch() set + get (v3 restyles the graph) | v3 | 2.74 ms | 2.78 ms | 3.49 ms | 2.69 ms | 243 |
| core: graph scratch() set + get (v3 restyles the graph) | gpu | 169 ns | 171 ns | 229 ns | 166 ns | 997 |
| core: batch( fn ) (empty) | v3 | 524 ns | 625 ns | 1.51 µs | 501 ns | 270 |
| core: batch( fn ) (empty) | gpu | 83.7 ns | 86.6 ns | 113 ns | 81.1 ns | 1956 |
| core: startBatch + endBatch + batching | v3 | 526 ns | 625 ns | 1.67 µs | 513 ns | 265 |
| core: startBatch + endBatch + batching | gpu | 89.8 ns | 164 ns | 2.88 µs | 86.9 ns | 1010 |
| core: collection() | v3 | 451 ns | 525 ns | 1.49 µs | 442 ns | 320 |
| core: collection() | gpu | 62.4 ns | 66.9 ns | 175 ns | 60.8 ns | 2520 |
| core: compact() (no dead slots — the early-out) | gpu | 16.9 µs | 21.0 µs | 97.7 µs | 16.4 µs | 32603 |
| collection: element accessors (id/group/isNode/isEdge, 4 calls) | v3 | 60.5 ns | 64.6 ns | 193 ns | 56.0 ns | 2636 |
| collection: element accessors (id/group/isNode/isEdge, 4 calls) | gpu | 34.3 ns | 36.6 ns | 70.9 ns | 32.9 ns | 4653 |
| collection: length + empty + nonempty (3 calls) | v3 | 6.66 ns | 6.87 ns | 12.2 ns | 6.34 ns | 24644 |
| collection: length + empty + nonempty (3 calls) | gpu | 1.47 ns | 1.52 ns | 1.94 ns | 1.43 ns | 107403 |
| collection: eq/first/last (3 calls) | v3 | 15.2 ns | 15.7 ns | 25.2 ns | 14.9 ns | 10870 |
| collection: eq/first/last (3 calls) | gpu | 8.30 ns | 8.53 ns | 14.8 ns | 7.99 ns | 19967 |
| collection: slice() | v3 | 3.83 µs | 3.90 µs | 4.24 µs | 3.64 µs | 40 |
| collection: slice() | gpu | 1.70 µs | 1.70 µs | 1.79 µs | 1.63 µs | 96 |
| collection: toArray() | v3 | 8.66 µs | 8.76 µs | 8.75 µs | 8.54 µs | 16 |
| collection: toArray() | gpu | 734 ns | 749 ns | 872 ns | 720 ns | 218 |
| collection: sort( fn ) | v3 | 14.1 µs | 14.6 µs | 14.8 µs | 13.9 µs | 12 |
| collection: sort( fn ) | gpu | 9.02 µs | 9.04 µs | 9.16 µs | 8.92 µs | 15 |
| collection: reduce( fn ) | v3 | 157 ns | 158 ns | 177 ns | 115 ns | 1073 |
| collection: reduce( fn ) | gpu | 114 ns | 120 ns | 223 ns | 110 ns | 1436 |
| collection: min + max ( fn ) (2 calls) | v3 | 11.1 µs | 11.2 µs | 11.4 µs | 11.0 µs | 12 |
| collection: min + max ( fn ) (2 calls) | gpu | 5.49 µs | 5.51 µs | 5.63 µs | 5.42 µs | 26 |
| collection: some + every (2 calls) | v3 | 878 ns | 892 ns | 1.11 µs | 852 ns | 186 |
| collection: some + every (2 calls) | gpu | 554 ns | 561 ns | 598 ns | 553 ns | 302 |
| collection: same + anySame + contains (3 calls) | v3 | 7.20 µs | 7.22 µs | 7.37 µs | 7.09 µs | 20 |
| collection: same + anySame + contains (3 calls) | gpu | 101 ns | 103 ns | 124 ns | 97.4 ns | 1670 |
| collection: allAre (all match: the full walk) | v3 | 3.65 µs | 3.73 µs | 4.21 µs | 3.41 µs | 41 |
| collection: allAre (all match: the full walk) | gpu | 2.46 µs | 2.51 µs | 3.35 µs | 2.40 µs | 62 |
| collection: is (none match: the full walk) | v3 | 5.53 µs | 5.54 µs | 5.76 µs | 5.33 µs | 27 |
| collection: is (none match: the full walk) | gpu | 2.36 µs | 2.41 µs | 2.84 µs | 2.31 µs | 66 |
| collection: union | v3 | 93.8 µs | 103 µs | 139 µs | 91.9 µs | 6729 |
| collection: union | gpu | 16.4 µs | 16.6 µs | 16.7 µs | 15.9 µs | 12 |
| collection: intersection | v3 | 92.8 µs | 102 µs | 140 µs | 91.1 µs | 6790 |
| collection: intersection | gpu | 3.21 µs | 3.26 µs | 3.62 µs | 3.19 µs | 48 |
| collection: difference | v3 | 91.6 µs | 101 µs | 129 µs | 90.2 µs | 6871 |
| collection: difference | gpu | 3.18 µs | 3.25 µs | 3.55 µs | 3.12 µs | 48 |
| collection: symmetricDifference | v3 | 24.7 µs | 26.2 µs | 28.2 µs | 24.1 µs | 12 |
| collection: symmetricDifference | gpu | 6.50 µs | 6.53 µs | 6.64 µs | 6.41 µs | 22 |
| collection: absoluteComplement | v3 | 6.01 ms | 6.56 ms | 9.88 ms | 5.79 ms | 103 |
| collection: absoluteComplement | gpu | 408 µs | 419 µs | 696 µs | 404 µs | 1670 |
| collection: byGroup | v3 | 1.00 ms | 1.01 ms | 1.16 ms | 976 µs | 691 |
| collection: byGroup | gpu | 326 µs | 332 µs | 535 µs | 239 µs | 2107 |
| collection: diff | v3 | 35.5 µs | 35.7 µs | 37.5 µs | 33.4 µs | 12 |
| collection: diff | gpu | 11.5 µs | 11.6 µs | 12.3 µs | 11.2 µs | 11 |
| collection: indexOf | v3 | 31.6 ns | 32.7 ns | 52.6 ns | 30.5 ns | 5246 |
| collection: indexOf | gpu | 23.4 ns | 24.1 ns | 36.3 ns | 22.5 ns | 7100 |
| traversal: openNeighborhood + closedNeighborhood (2 calls) | v3 | 9.30 µs | 9.45 µs | 9.97 µs | 8.97 µs | 14 |
| traversal: openNeighborhood + closedNeighborhood (2 calls) | gpu | 3.21 µs | 3.41 µs | 4.06 µs | 3.05 µs | 45 |
| traversal: connectedNodes | v3 | 1.01 µs | 1.09 µs | 1.80 µs | 977 ns | 152 |
| traversal: connectedNodes | gpu | 300 ns | 311 ns | 525 ns | 293 ns | 546 |
| traversal: sources + targets (2 calls) | v3 | 1.72 µs | 1.92 µs | 2.84 µs | 1.67 µs | 85 |
| traversal: sources + targets (2 calls) | gpu | 508 ns | 715 ns | 2.44 µs | 492 ns | 235 |
| traversal: source() + target() (2 calls) | v3 | 71.9 ns | 72.9 ns | 89.4 ns | 59.9 ns | 2344 |
| traversal: source() + target() (2 calls) | gpu | 56.0 ns | 57.3 ns | 71.8 ns | 53.3 ns | 2985 |
| traversal: edgesWith | v3 | 67.6 µs | 69.0 µs | 107 µs | 66.1 µs | 10103 |
| traversal: edgesWith | gpu | 54.0 µs | 54.8 µs | 57.0 µs | 53.5 µs | 12 |
| traversal: edgesTo | v3 | 68.8 µs | 69.7 µs | 106 µs | 65.7 µs | 10002 |
| traversal: edgesTo | gpu | 53.8 µs | 54.1 µs | 55.9 µs | 52.7 µs | 12 |
| traversal: parallelEdges + codirectedEdges (2 calls) | v3 | 3.52 µs | 3.78 µs | 4.48 µs | 3.40 µs | 41 |
| traversal: parallelEdges + codirectedEdges (2 calls) | gpu | 1.05 µs | 1.27 µs | 2.08 µs | 1.04 µs | 128 |
| traversal: roots + leaves (2 calls) | v3 | 5.17 ms | 5.62 ms | 9.34 ms | 4.94 ms | 120 |
| traversal: roots + leaves (2 calls) | gpu | 386 µs | 393 µs | 520 µs | 379 µs | 1782 |
| traversal: allAreNeighbors | v3 | 194 µs | 207 µs | 279 µs | 189 µs | 3360 |
| traversal: allAreNeighbors | gpu | 37.2 µs | 37.6 µs | 38.8 µs | 36.8 µs | 12 |
| traversal: isLoop + isSimple (2 calls) | v3 | 128 ns | 130 ns | 172 ns | 125 ns | 1316 |
| traversal: isLoop + isSimple (2 calls) | gpu | 49.4 ns | 51.1 ns | 77.1 ns | 48.2 ns | 3352 |
| degree: indegree + outdegree (2 calls) | v3 | 3.43 µs | 3.75 µs | 4.71 µs | 3.31 µs | 42 |
| degree: indegree + outdegree (2 calls) | gpu | 46.0 ns | 47.7 ns | 81.8 ns | 45.5 ns | 3580 |
| degree: minDegree + maxDegree (2 calls) | v3 | 15.9 ms | 17.0 ms | 20.6 ms | 15.4 ms | 37 |
| degree: minDegree + maxDegree (2 calls) | gpu | 364 µs | 372 µs | 530 µs | 357 µs | 1882 |
| degree: minIndegree + maxOutdegree (2 calls) | v3 | 8.95 ms | 9.57 ms | 13.2 ms | 8.75 ms | 68 |
| degree: minIndegree + maxOutdegree (2 calls) | gpu | 355 µs | 361 µs | 465 µs | 344 µs | 1938 |
| dimensions: renderedPosition get | v3 | 69.4 ns | 72.8 ns | 130 ns | 67.5 ns | 2332 |
| dimensions: renderedPosition get | gpu | 30.3 ns | 35.3 ns | 107 ns | 29.2 ns | 4763 |
| dimensions: relativePosition get | v3 | 842 ns | 889 ns | 1.21 µs | 797 ns | 188 |
| dimensions: relativePosition get | gpu | 73.2 ns | 77.4 ns | 141 ns | 70.1 ns | 2189 |
| dimensions: width + height + outerWidth + outerHeight (4 calls) | v3 | 602 ns | 609 ns | 696 ns | 585 ns | 279 |
| dimensions: width + height + outerWidth + outerHeight (4 calls) | gpu | 241 ns | 244 ns | 359 ns | 233 ns | 696 |
| dimensions: rendered dims (4 calls) | v3 | 687 ns | 697 ns | 832 ns | 667 ns | 242 |
| dimensions: rendered dims (4 calls) | gpu | 249 ns | 255 ns | 365 ns | 248 ns | 671 |
| dimensions: renderedBoundingBox | v3 | 1.76 µs | 1.79 µs | 2.18 µs | 1.69 µs | 90 |
| dimensions: renderedBoundingBox | gpu | 918 ns | 934 ns | 1.24 µs | 882 ns | 178 |
| dimensions: midpoint + renderedMidpoint (2 calls) | gpu | 1.10 µs | 1.10 µs | 1.19 µs | 1.06 µs | 147 |
| dimensions: source/targetEndpoint (2 calls) | gpu | 363 ns | 369 ns | 435 ns | 355 ns | 460 |
| dimensions: rendered source/targetEndpoint (2 calls) | gpu | 384 ns | 389 ns | 452 ns | 369 ns | 437 |
| dimensions: shift + silentShift (round-trip) | v3 | 293 µs | 303 µs | 622 µs | 286 µs | 2310 |
| dimensions: shift + silentShift (round-trip) | gpu | 4.91 µs | 4.91 µs | 5.03 µs | 4.83 µs | 31 |
| dimensions: silentPosition | v3 | 873 ns | 877 ns | 953 ns | 843 ns | 191 |
| dimensions: silentPosition | gpu | 53.2 ns | 55.3 ns | 80.4 ns | 51.5 ns | 3068 |
| dimensions: positions( fn ) over 100 | v3 | 180 µs | 196 µs | 342 µs | 171 µs | 3554 |
| dimensions: positions( fn ) over 100 | gpu | 3.54 µs | 3.60 µs | 4.29 µs | 3.44 µs | 43 |
| dimensions: padding + paddedWidth + paddedHeight (3 calls) | v3 | 2.01 µs | 2.02 µs | 2.24 µs | 1.97 µs | 81 |
| dimensions: padding + paddedWidth + paddedHeight (3 calls) | gpu | 162 ns | 165 ns | 193 ns | 157 ns | 1041 |
| curves: isBundledBezier | gpu | 20.7 ns | 21.4 ns | 33.5 ns | 19.6 ns | 7927 |
| curves: controlPoints + renderedControlPoints (2 calls) | gpu | 525 ns | 540 ns | 739 ns | 513 ns | 304 |
| curves: segmentPoints (undefined for bezier) | gpu | 33.3 ns | 34.3 ns | 49.9 ns | 32.1 ns | 4978 |
| compound: parent + parents + ancestors (3 calls) | v3 | 2.92 µs | 3.20 µs | 4.00 µs | 2.85 µs | 49 |
| compound: parent + parents + ancestors (3 calls) | gpu | 802 ns | 1.12 µs | 2.37 µs | 770 ns | 147 |
| compound: children + descendants + siblings (3 calls) | v3 | 8.52 µs | 8.56 µs | 9.32 µs | 7.60 µs | 16 |
| compound: children + descendants + siblings (3 calls) | gpu | 1.78 µs | 2.25 µs | 3.57 µs | 1.70 µs | 70 |
| compound: orphans + nonorphans (2 calls) | v3 | 3.64 µs | 3.89 µs | 4.70 µs | 3.52 µs | 40 |
| compound: orphans + nonorphans (2 calls) | gpu | 517 ns | 744 ns | 3.00 µs | 506 ns | 220 |
| compound: commonAncestors | v3 | 9.40 µs | 9.62 µs | 9.98 µs | 9.25 µs | 14 |
| compound: commonAncestors | gpu | 77.7 ns | 80.8 ns | 151 ns | 73.6 ns | 2108 |
| compound: isParent/isChild/isChildless/isOrphan (4 calls) | v3 | 67.4 ns | 68.1 ns | 79.0 ns | 60.6 ns | 2522 |
| compound: isParent/isChild/isChildless/isOrphan (4 calls) | gpu | 45.4 ns | 46.3 ns | 57.0 ns | 44.2 ns | 3694 |
| flags: select + unselect + selected (band) | v3 | 193 µs | 201 µs | 397 µs | 186 µs | 3480 |
| flags: select + unselect + selected (band) | gpu | 11.8 µs | 11.8 µs | 11.9 µs | 11.5 µs | 11 |
| flags: selectify + unselectify + selectable | v3 | 190 µs | 196 µs | 283 µs | 184 µs | 3573 |
| flags: selectify + unselectify + selectable | gpu | 2.02 µs | 2.04 µs | 2.23 µs | 1.99 µs | 80 |
| flags: lock + unlock + locked | v3 | 189 µs | 196 µs | 314 µs | 182 µs | 3566 |
| flags: lock + unlock + locked | gpu | 2.04 µs | 2.05 µs | 2.24 µs | 1.97 µs | 80 |
| flags: grabify + ungrabify + grabbable | v3 | 190 µs | 198 µs | 386 µs | 183 µs | 3533 |
| flags: grabify + ungrabify + grabbable | gpu | 2.02 µs | 2.03 µs | 2.15 µs | 2.00 µs | 81 |
| flags: show + hide + visible | v3 | 2.57 ms | 2.67 ms | 3.91 ms | 2.49 ms | 257 |
| flags: show + hide + visible | gpu | 11.3 µs | 11.3 µs | 11.5 µs | 11.1 µs | 11 |
| flags: active/activate/unactivate (3 calls) | v3 | 191 µs | 197 µs | 282 µs | 184 µs | 3555 |
| flags: active/activate/unactivate (3 calls) | gpu | 12.0 µs | 12.0 µs | 12.1 µs | 12.0 µs | 10 |
| flags: panify + unpanify + pannable | v3 | 190 µs | 196 µs | 311 µs | 185 µs | 3563 |
| flags: panify + unpanify + pannable | gpu | 2.01 µs | 2.03 µs | 2.14 µs | 1.96 µs | 81 |
| flags: takesUpSpace + interactive + transparent (3 calls) | v3 | 194 ns | 199 ns | 266 ns | 187 ns | 856 |
| flags: takesUpSpace + interactive + transparent (3 calls) | gpu | 64.7 ns | 67.4 ns | 132 ns | 61.7 ns | 2536 |
| flags: effectiveOpacity | v3 | 49.0 ns | 50.4 ns | 64.8 ns | 47.0 ns | 3409 |
| flags: effectiveOpacity | gpu | 21.2 ns | 21.6 ns | 35.5 ns | 20.2 ns | 7961 |
| element data: scratch get + set | v3 | 1.29 µs | 1.29 µs | 1.40 µs | 1.24 µs | 129 |
| element data: scratch get + set | gpu | 172 ns | 177 ns | 258 ns | 171 ns | 964 |
| element data: json() one element | v3 | 299 ns | 385 ns | 3.45 µs | 291 ns | 425 |
| element data: json() one element | gpu | 149 ns | 190 ns | 539 ns | 145 ns | 849 |
| element data: jsons() over 100 | v3 | 39.6 µs | 40.5 µs | 43.1 µs | 38.7 µs | 12 |
| element data: jsons() over 100 | gpu | 19.8 µs | 21.0 µs | 24.0 µs | 15.8 µs | 12 |
| element data: label() | gpu | 15.2 ns | 15.8 ns | 28.9 ns | 14.2 ns | 10862 |
| core: batch + per-id data() (was batchData, round 90) | v3 | 2.49 µs | 2.57 µs | 2.94 µs | 2.42 µs | 61 |
| core: batch + per-id data() (was batchData, round 90) | gpu | 263 ns | 351 ns | 2.11 µs | 259 ns | 471 |
| core: animated() | v3 | 7.58 ns | 7.81 ns | 14.0 ns | 7.22 ns | 21661 |
| core: animated() | gpu | 1.56 ns | 1.60 ns | 1.99 ns | 1.50 ns | 103571 |
| core: zoomRange get | gpu | 2.16 ns | 2.30 ns | 6.28 ns | 2.05 ns | 72156 |
| core: resize() / invalidateSize() | v3 | 314 ns | 317 ns | 385 ns | 301 ns | 533 |
| core: resize() / invalidateSize() | gpu | 127 ns | 130 ns | 161 ns | 123 ns | 1309 |
| core: on('render') + off('render') (was onRender/offRender, round 90) | v3 | 462 ns | 522 ns | 1.09 µs | 454 ns | 322 |
| core: on('render') + off('render') (was onRender/offRender, round 90) | gpu | 195 ns | 202 ns | 337 ns | 188 ns | 818 |
| core: removeScratch() | v3 | 2.75 ms | 2.79 ms | 3.30 ms | 2.69 ms | 246 |
| core: removeScratch() | gpu | 278 ns | 282 ns | 330 ns | 268 ns | 603 |
| core: selectionType get | v3 | 4.51 ns | 4.73 ns | 8.58 ns | 4.26 ns | 35909 |
| core: selectionType get | gpu | 2.26 ns | 2.40 ns | 6.21 ns | 2.10 ns | 69527 |
| core: isReady() | v3 | 3.26 ns | 3.34 ns | 6.51 ns | 3.18 ns | 50430 |
| core: isReady() | gpu | 1.48 ns | 1.53 ns | 2.01 ns | 1.45 ns | 107570 |
| core: window() | v3 | 4.10 ns | 4.24 ns | 7.79 ns | 4.01 ns | 39847 |
| core: window() | gpu | 1.48 ns | 1.53 ns | 1.91 ns | 1.45 ns | 107941 |
| core: container() | v3 | 3.93 ns | 4.04 ns | 8.25 ns | 3.75 ns | 41929 |
| core: container() | gpu | 1.48 ns | 1.53 ns | 1.90 ns | 1.45 ns | 107666 |
| core: destroyed() | v3 | 3.32 ns | 3.44 ns | 6.44 ns | 3.18 ns | 48890 |
| core: destroyed() | gpu | 1.48 ns | 1.53 ns | 2.31 ns | 1.45 ns | 106940 |
| core: removeAllListeners() | v3 | 13.8 ns | 14.3 ns | 25.0 ns | 13.3 ns | 11901 |
| core: removeAllListeners() | gpu | 1.59 ns | 1.65 ns | 2.67 ns | 1.55 ns | 99426 |
| collection: cy() | v3 | 7.58 ns | 8.13 ns | 15.2 ns | 7.17 ns | 20890 |
| collection: cy() | gpu | 2.16 ns | 2.37 ns | 6.09 ns | 2.06 ns | 70095 |
| collection: indexOfId() | v3 | 66.1 ns | 67.8 ns | 88.4 ns | 64.7 ns | 2524 |
| collection: indexOfId() | gpu | 37.8 ns | 38.4 ns | 52.0 ns | 36.9 ns | 4462 |
| collection: removed() + inside() (2 calls) | v3 | 17.6 ns | 17.9 ns | 24.7 ns | 17.3 ns | 9523 |
| collection: removed() + inside() (2 calls) | gpu | 15.1 ns | 15.4 ns | 24.5 ns | 14.6 ns | 11139 |
| collection: silentPositions( fn ) over 100 | v3 | 112 µs | 116 µs | 198 µs | 108 µs | 6034 |
| collection: silentPositions( fn ) over 100 | gpu | 3.67 µs | 3.65 µs | 3.79 µs | 3.47 µs | 43 |
| collection: animated() | v3 | 12.2 ns | 12.4 ns | 21.4 ns | 11.7 ns | 13848 |
| collection: animated() | gpu | 4.19 ns | 4.33 ns | 8.24 ns | 4.00 ns | 38951 |
| collection: delayAnimation() | v3 | 458 ns | 583 ns | 1.96 µs | 449 ns | 287 |
| collection: delayAnimation() | gpu | 165 ns | 170 ns | 242 ns | 159 ns | 990 |
| collection: removeScratch() | v3 | 1.79 µs | 1.80 µs | 2.01 µs | 1.72 µs | 91 |
| collection: removeScratch() | gpu | 202 ns | 206 ns | 241 ns | 197 ns | 831 |
| collection: component() | v3 | 78.8 ms | 80.9 ms | 87.2 ms | 74.8 ms | 12 |
| collection: component() | gpu | 1.84 ms | 2.04 ms | 5.31 ms | 1.79 ms | 338 |
| collection: layoutDimensions() | v3 | 616 ns | 632 ns | 817 ns | 601 ns | 267 |
| collection: layoutDimensions() | gpu | 187 ns | 194 ns | 313 ns | 185 ns | 877 |
| degree: maxIndegree + minOutdegree (2 calls) | v3 | 8.89 ms | 9.59 ms | 13.3 ms | 8.70 ms | 69 |
| degree: maxIndegree + minOutdegree (2 calls) | gpu | 355 µs | 362 µs | 464 µs | 342 µs | 1937 |
| flags: grabbed + hidden + inactive (3 calls) | v3 | 84.5 ns | 85.8 ns | 104 ns | 78.8 ns | 1994 |
| flags: grabbed + hidden + inactive (3 calls) | gpu | 38.4 ns | 39.6 ns | 61.3 ns | 36.2 ns | 4327 |
| curves: renderedSegmentPoints | gpu | 36.1 ns | 37.4 ns | 64.0 ns | 34.3 ns | 4578 |
| layout contract: edgeSlots + endpoints + degreeOf | gpu | 34.5 µs | 36.3 µs | 64.4 µs | 29.5 µs | 18950 |
| formats: isColumnarElements + isSerializedElements + isPackedIds | gpu | 4.52 ns | 4.73 ns | 10.5 ns | 4.51 ns | 35620 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| cpu pick: background miss (full highWater walk) | peak | 207 µs | 212 µs | 314 µs | 201 µs | 3246 |
| cpu pick: background miss (full highWater walk) | compacted | 48.7 µs | 49.3 µs | 50.4 µs | 48.4 µs | 12 |
| cpu pick: node hit | peak | 218 µs | 225 µs | 406 µs | 212 µs | 3115 |
| cpu pick: node hit | compacted | 48.9 µs | 49.3 µs | 49.8 µs | 48.5 µs | 12 |
| isCurrent: current ref (forwards present vs absent) | no forwards (peak) | 5.95 ns | 6.13 ns | 10.4 ns | 5.69 ns | 27553 |
| isCurrent: current ref (forwards present vs absent) | forwards present (compacted) | 5.90 ns | 6.06 ns | 10.6 ns | 5.63 ns | 27978 |
| isCurrent: stale-ref repair (chase + rewrite, alloc included) | current (baseline alloc) | 8.89 ns | 9.51 ns | 21.7 ns | 8.36 ns | 17761 |
| isCurrent: stale-ref repair (chase + rewrite, alloc included) | stale → repair | 49.1 ns | 50.5 ns | 68.7 ns | 47.8 ns | 3388 |
| control: nodes({ selected }) scan (order-list, expected parity) | peak | 25.2 µs | 26.7 µs | 33.1 µs | 21.2 µs | 12 |
| control: nodes({ selected }) scan (order-list, expected parity) | compacted | 21.6 µs | 22.6 µs | 24.6 µs | 21.3 µs | 12 |
| control: whole-graph boundingBox (expected parity) | peak | 112 µs | 117 µs | 186 µs | 109 µs | 5958 |
| control: whole-graph boundingBox (expected parity) | compacted | 112 µs | 115 µs | 177 µs | 109 µs | 6089 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| parent drag (shift subtree + bb settle) | v3 | 252 µs | 276 µs | 618 µs | 239 µs | 2524 |
| parent drag (shift subtree + bb settle) | gpu | 1.38 µs | 1.44 µs | 2.17 µs | 1.31 µs | 110 |
| child drag (move + parent re-derive) | v3 | 80.1 µs | 85.3 µs | 124 µs | 75.5 µs | 7963 |
| child drag (move + parent re-derive) | gpu | 1.62 µs | 1.65 µs | 1.99 µs | 1.57 µs | 98 |
| reparent round-trip | v3 | 83.0 µs | 88.2 µs | 128 µs | 79.8 µs | 7705 |
| reparent round-trip | gpu | 1.08 µs | 1.08 µs | 1.18 µs | 1.04 µs | 148 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| curve premium: build (style apply + derivation) | curved | 12.0 ms | 12.0 ms | 12.0 ms | 12.0 ms | 1 |
| curve premium: build (style apply + derivation) | straight | 6.64 ms | 6.64 ms | 6.64 ms | 6.64 ms | 1 |
| curve premium: node.position x 1000 (drag) | curved | 377 µs | 377 µs | 377 µs | 377 µs | 1 |
| curve premium: node.position x 1000 (drag) | straight | 326 µs | 326 µs | 326 µs | 326 µs | 1 |
| curve premium: nodes().positions() (bulk move) | curved | 309 µs | 309 µs | 309 µs | 309 µs | 1 |
| curve premium: nodes().positions() (bulk move) | straight | 296 µs | 296 µs | 296 µs | 296 µs | 1 |
| curve premium: first read after a bulk move (cold) | curved | 5.59 ms | 5.59 ms | 5.59 ms | 5.59 ms | 1 |
| curve premium: first read after a bulk move (cold) | straight | 2.71 ms | 2.71 ms | 2.71 ms | 2.71 ms | 1 |
| curve premium: same read again (warm) | curved | 1.43 ms | 1.43 ms | 1.43 ms | 1.43 ms | 1 |
| curve premium: same read again (warm) | straight | 1.42 ms | 1.42 ms | 1.42 ms | 1.42 ms | 1 |
| curve premium: edge.midpoint x 4000 | curved | 2.37 ms | 2.37 ms | 2.37 ms | 2.37 ms | 1 |
| curve premium: edge.midpoint x 4000 | straight | 4.21 ms | 4.21 ms | 4.21 ms | 4.21 ms | 1 |
| curve premium: edge.controlPoints x 4000 | curved | 2.39 ms | 2.39 ms | 2.39 ms | 2.39 ms | 1 |
| curve premium: edge.controlPoints x 4000 | straight | 1.43 ms | 1.43 ms | 1.43 ms | 1.43 ms | 1 |
| curve premium: cy.elements().boundingBox() x 20 | curved | 17.7 ms | 17.7 ms | 17.7 ms | 17.7 ms | 1 |
| curve premium: cy.elements().boundingBox() x 20 | straight | 21.0 ms | 21.0 ms | 21.0 ms | 21.0 ms | 1 |
| curve premium: cy.fit() x 20 (store scan) | curved | 3.69 ms | 3.69 ms | 3.69 ms | 3.69 ms | 1 |
| curve premium: cy.fit() x 20 (store scan) | straight | 3.38 ms | 3.38 ms | 3.38 ms | 3.38 ms | 1 |
| curve premium: elementsInBox x 20 (half the graph) | curved | 24.3 ms | 24.3 ms | 24.3 ms | 24.3 ms | 1 |
| curve premium: elementsInBox x 20 (half the graph) | straight | 6.03 ms | 6.03 ms | 6.03 ms | 6.03 ms | 1 |
| curve premium: edge.hide/show x 1000 (bundle re-fan) | curved | 3.72 ms | 3.72 ms | 3.72 ms | 3.72 ms | 1 |
| curve premium: edge.hide/show x 1000 (bundle re-fan) | straight | 2.29 ms | 2.29 ms | 2.29 ms | 2.29 ms | 1 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| arrow premium: build (style apply + arrow fold) | arrowed | 6.68 ms | 6.68 ms | 6.68 ms | 6.68 ms | 1 |
| arrow premium: build (style apply + arrow fold) | none | 6.34 ms | 6.34 ms | 6.34 ms | 6.34 ms | 1 |
| arrow premium: cy.style() re-apply x 4 | arrowed | 7.95 ms | 7.95 ms | 7.95 ms | 7.95 ms | 1 |
| arrow premium: cy.style() re-apply x 4 | none | 7.99 ms | 7.99 ms | 7.99 ms | 7.99 ms | 1 |
| arrow premium: node.position x 200000 (drag) | arrowed | 21.7 ms | 21.7 ms | 21.7 ms | 21.7 ms | 1 |
| arrow premium: node.position x 200000 (drag) | none | 21.8 ms | 21.8 ms | 21.8 ms | 21.8 ms | 1 |
| arrow premium: edge.sourceEndpoint x 200000 | arrowed | 62.1 ms | 62.1 ms | 62.1 ms | 62.1 ms | 1 |
| arrow premium: edge.sourceEndpoint x 200000 | none | 59.1 ms | 59.1 ms | 59.1 ms | 59.1 ms | 1 |
| arrow premium: edge.targetEndpoint x 200000 | arrowed | 59.9 ms | 59.9 ms | 59.9 ms | 59.9 ms | 1 |
| arrow premium: edge.targetEndpoint x 200000 | none | 59.7 ms | 59.7 ms | 59.7 ms | 59.7 ms | 1 |
| arrow premium: edge.midpoint x 200000 | arrowed | 141 ms | 141 ms | 141 ms | 141 ms | 1 |
| arrow premium: edge.midpoint x 200000 | none | 137 ms | 137 ms | 137 ms | 137 ms | 1 |
| arrow premium: edge.style('target-arrow-shape') x 200000 | arrowed | 33.3 ms | 33.3 ms | 33.3 ms | 33.3 ms | 1 |
| arrow premium: edge.style('target-arrow-shape') x 200000 | none | 27.3 ms | 27.3 ms | 27.3 ms | 27.3 ms | 1 |
| arrow premium: cy.elements().boundingBox() x 20 | arrowed | 18.4 ms | 18.4 ms | 18.4 ms | 18.4 ms | 1 |
| arrow premium: cy.elements().boundingBox() x 20 | none | 17.7 ms | 17.7 ms | 17.7 ms | 17.7 ms | 1 |
| arrow premium: elementsInBox x 20 (half the graph) | arrowed | 5.45 ms | 5.45 ms | 5.45 ms | 5.45 ms | 1 |
| arrow premium: elementsInBox x 20 (half the graph) | none | 5.38 ms | 5.38 ms | 5.38 ms | 5.38 ms | 1 |
| arrow premium: control: sourceEndpoint, bezier vs straight | arrowed | 74.1 ms | 74.1 ms | 74.1 ms | 74.1 ms | 1 |
| arrow premium: control: sourceEndpoint, bezier vs straight | none | 58.7 ms | 58.7 ms | 58.7 ms | 58.7 ms | 1 |
| arrow premium: edge column bytes | B/edge | 156 ms | 156 ms | 156 ms | 156 ms | 1 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| labels: breakLines x 20000 | gpu | 85.8 ms | 85.8 ms | 85.8 ms | 85.8 ms | 1 |
| labels: estimateBlock x 20000 | gpu | 89.0 ms | 89.0 ms | 89.0 ms | 89.0 ms | 1 |
| labels: addNode x 20000 | gpu | 28.4 ms | 28.4 ms | 28.4 ms | 28.4 ms | 1 |
| labels: setLabel (build) x 20000 | gpu | 97.1 ms | 97.1 ms | 97.1 ms | 97.1 ms | 1 |
| labels: setLabel (rewrite) x 20000 | gpu | 101 ms | 101 ms | 101 ms | 101 ms | 1 |
| labels: boundingBox with 20000 label terms | gpu | 3.05 ms | 3.05 ms | 3.05 ms | 3.05 ms | 1 |
| labels: computeSdf tier 1 (30x42) x 96 glyphs | gpu | 14.3 ms | 14.3 ms | 14.3 ms | 14.3 ms | 1 |
| labels: computeSdf tier 2 (59x85) x 96 glyphs | gpu | 38.6 ms | 38.6 ms | 38.6 ms | 38.6 ms | 1 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| transition: auto-extent shift, whole-channel re-derive (2000 slots) | transitions off | 1.16 ms | 1.25 ms | 2.77 ms | 1.10 ms | 558 |
| transition: auto-extent shift, whole-channel re-derive (2000 slots) | transitions on | 3.52 ms | 3.72 ms | 5.46 ms | 3.30 ms | 182 |
| transition: bulk tween tick (2000 slots, one manager tick) | tick | 128 µs | 132 µs | 222 µs | 123 µs | 5300 |
| transition: explicit-domain write (O(changed) — one element) | transitions off | 14.4 µs | 14.9 µs | 16.2 µs | 13.9 µs | 12 |
| transition: explicit-domain write (O(changed) — one element) | transitions on | 18.2 µs | 18.5 µs | 19.4 µs | 17.9 µs | 12 |
| transition: sheet swap, whole-graph apply (2000 slots diff + tween) | transitions off | 2.05 ms | 2.08 ms | 2.45 ms | 2.00 ms | 334 |
| transition: sheet swap, whole-graph apply (2000 slots diff + tween) | transitions on | 4.75 ms | 4.41 ms | 6.57 ms | 3.46 ms | 154 |
| group | bench | p50 | avg | p99 | min | samples |
|---|---|---|---|---|---|---|
| size tick: unlabelled (2000 slots) | tick | 567 µs | 601 µs | 1.18 ms | 549 µs | 1144 |
| size tick: labelled, center/center (re-anchor early-out) (2000 slots) | tick | 588 µs | 619 µs | 1.05 ms | 570 µs | 1112 |
| size tick: labelled, hanging (sidecar rewrite per tick) (2000 slots) | tick | 1.24 ms | 1.31 ms | 2.21 ms | 1.10 ms | 516 |
| edge width tick (4000 slots) | bare | 276 µs | 284 µs | 397 µs | 267 µs | 2442 |
| edge width tick (4000 slots) | with rides (casing + match-line arrows) | 712 µs | 721 µs | 960 µs | 680 µs | 964 |
| padding tick + auto-bounds flush (250 parents × 8 children) | tick + flush | 177 µs | 183 µs | 358 µs | 170 µs | 3800 |
| font-size tick (2000 labels) | wrap none (dims scale-patch) | 369 µs | 385 µs | 891 µs | 320 µs | 1796 |
| font-size tick (2000 labels) | wrapped (re-break per tick) | 5.54 ms | 5.58 ms | 6.08 ms | 5.16 ms | 119 |
| baseline: paint (opacity) tick (2000 slots) | tick | 146 µs | 151 µs | 248 µs | 141 µs | 4612 |