Creating or freeing a frame or region re-derives only what it touches (#915)
Any write that changed the layout graph's roster (a frame or region created, freed, re-owned or re-pointed) made the next resolve derive the whole graph: about 1.35 ms for one `CreateTexture` or `CreateFrame` on the stock UI, against 0.05 ms for a no-op. A write now names the nodes it touched, and the resolve re-derives just those in the cached graph: a joining node is added with its edges, a leaving one is removed and its dependents seeded, a staying one has its edges and inputs re-synced. The full derivation stays the fallback. A region's owner and an art change are now layout inputs that name their region. Verify now also compares the graph itself. A randomized test checks rects and graph against a scratch solve after every batch of creates, frees, re-owns and re-anchors. `CreateTexture` now costs 0.14 ms, `CreateFrame` 0.15 ms, a backdrop rebuild 0.22 ms. Fixes #903 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
55729baff9
commit
fa5568dcdc
@@ -318,8 +318,11 @@ fn build(model: &mut Model, fh: FrameHandle, blocks: &[Block]) {
|
||||
}
|
||||
}
|
||||
|
||||
// Each new block joins the graph; the old ones' frees named theirs.
|
||||
for &rh in &made {
|
||||
model.touch_layout_region(rh);
|
||||
}
|
||||
model.simple_html.entry(fh).or_default().blocks = made;
|
||||
model.touch_layout();
|
||||
}
|
||||
|
||||
/// A block's anchor (`SetPoint` `0x767c70`): block 0 to the frame, block N to the previous text
|
||||
|
||||
Reference in New Issue
Block a user