Commit 7db5295
committed
perf: draw only visible boxes, and stop measuring style per frame
The overlay loop existed to save frame time and was spending it:
- getComputedStyle per frame for a static class literal on the same
element, forcing a style recalculation right after TransformPane
dirties style by writing the pane transform. Read once per element.
- clientWidth/clientHeight per frame, forcing layout for a canvas that
is absolute inset-0 size-full and only changes with the window.
- A redraw every frame regardless of whether anything moved. Nothing
drawn can change without the camera or node geometry changing, so an
idle frame now does nothing.
- getBoxes() materialised every node so drawNodeBoxes could discard the
off-screen ones - O(all) to draw O(visible), and at 3000 nodes about
180k short-lived objects a second inside the pan loop. It now takes
the visible rect and queries the index spatially.
Also narrows the index's entries() to a PositionedEntry type so the call
site no longer asserts bounds are non-null, which mattered because
query() deliberately appends the unpositioned ids - making 'include them
in entries() too' a plausible change that would have compiled and then
thrown inside the draw loop.
And clamps fitToViewInstant above the threshold. It has 24 call sites,
each of which could otherwise land in simplified mode where no
[data-node-id] exists: locators time out and count()===0 assertions pass
for the wrong reason, with nothing in the symptom pointing back to LOD.1 parent 6c6b908 commit 7db5295
4 files changed
Lines changed: 94 additions & 18 deletions
File tree
- browser_tests/fixtures/utils
- src
- components/graph
- renderer
- core/spatial
- extensions/vueNodes/components
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
98 | 117 | | |
99 | 118 | | |
100 | 119 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
168 | 168 | | |
169 | 169 | | |
170 | 170 | | |
| 171 | + | |
171 | 172 | | |
172 | 173 | | |
173 | 174 | | |
| |||
319 | 320 | | |
320 | 321 | | |
321 | 322 | | |
322 | | - | |
| 323 | + | |
323 | 324 | | |
324 | 325 | | |
325 | | - | |
326 | | - | |
| 326 | + | |
| 327 | + | |
327 | 328 | | |
328 | 329 | | |
329 | 330 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
26 | 29 | | |
27 | 30 | | |
28 | 31 | | |
| |||
45 | 48 | | |
46 | 49 | | |
47 | 50 | | |
48 | | - | |
| 51 | + | |
| 52 | + | |
49 | 53 | | |
50 | 54 | | |
51 | | - | |
| 55 | + | |
52 | 56 | | |
53 | 57 | | |
54 | 58 | | |
| |||
71 | 75 | | |
72 | 76 | | |
73 | 77 | | |
| 78 | + | |
74 | 79 | | |
75 | 80 | | |
76 | 81 | | |
| |||
123 | 128 | | |
124 | 129 | | |
125 | 130 | | |
126 | | - | |
| 131 | + | |
127 | 132 | | |
128 | 133 | | |
129 | 134 | | |
130 | 135 | | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
131 | 150 | | |
132 | 151 | | |
133 | 152 | | |
| |||
Lines changed: 49 additions & 12 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
| 2 | + | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
11 | | - | |
12 | | - | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
13 | 17 | | |
14 | 18 | | |
15 | 19 | | |
16 | 20 | | |
17 | 21 | | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
18 | 48 | | |
19 | 49 | | |
20 | 50 | | |
| |||
26 | 56 | | |
27 | 57 | | |
28 | 58 | | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
29 | 63 | | |
30 | 64 | | |
31 | 65 | | |
32 | 66 | | |
33 | 67 | | |
34 | | - | |
35 | | - | |
| 68 | + | |
| 69 | + | |
36 | 70 | | |
37 | 71 | | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
38 | 76 | | |
39 | 77 | | |
40 | 78 | | |
| |||
48 | 86 | | |
49 | 87 | | |
50 | 88 | | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
57 | 94 | | |
58 | 95 | | |
59 | 96 | | |
| |||
0 commit comments