mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-07 21:50:16 +00:00
A compound path was assembled from its members in every frame it was drawn, and Node::stroke_path grew its buffer by doubling, copying the path into ever larger buffers for a compound path of many anchors. The renderer's geometry cache was swept only once it held more than 1,024 entries, so while an object was dragged (a new node, and layer, in every frame) the old copies stayed alive with all their members. Now: - a compound path is drawn from the path the renderer keeps for it in its geometry cache, as a plain path already was, and is assembled only when the node changes; - Node::stroke_path sizes a compound path's buffer up front from its members' segment counts (the same elements, in the same order); - unused geometry entries are dropped after a few frames however few entries there are. Tests: - crates/render/src/tests/memory.rs: the second frame draws the kept path and the same pixels as the first and as a new renderer; after a five-frame move the renderer no longer holds the compound path drawn before it. The test fails without the renderer change. - crates/doc/src/node/tests.rs: a compound path's path is its members' paths in order (open, closed, empty and single-anchor members). Not timed; vectorcraft-cli perf was not rerun.