forked from 1b-agent/opencadstudio-upstream
perf(grips): cap total selection grips at 4096
GRIPOBJLIMIT gates object count, but one dense polyline emits ~2 grips/vertex past it (~200K grips through the per-frame project + draw path, ms-scale, no cache). Enforce a vertex budget once in refresh_selected_grips: stable vertex-first priority, entity order restored, handles truncated in lockstep. Below the cap selections are byte-identical. Tests: - refresh_selected_grips_caps_total_grip_count: cap + handles lockstep - refresh_selected_grips_prefers_vertex_grips_over_midpoints: vertices survive - grip_budget_boundary_lengths: empty/cap/cap+1 edge cases Bench (cargo bench grip, 200K-grip fixture): per-frame 6.8ms -> 0.13ms (45-52x); select-time build 2.36ms full. A/B reference deleted.
This commit is contained in:
1 parent
dcc05f310d
commit
2d49204c50
5 files changed
+327
-2
No files matched your search
@@ -44,6 +44,13 @@ mod visibility;
|
||||
|
||||
pub use style_ops::StyleKind;
|
||||
|
||||
/// Re-exported `pub` (not `pub(crate)`) so the `cargo bench` harness
|
||||
/// (`benches/`, an external crate) can measure the real grip-budget helper as
|
||||
/// `ui_grip_budget`. The `properties` / `settings` modules themselves stay
|
||||
/// private / `pub(crate)`; only these two names are reachable externally.
|
||||
pub use properties::apply_grip_budget;
|
||||
pub use settings::MAX_SELECTED_GRIPS;
|
||||
|
||||
use document::DocumentTab;
|
||||
|
||||
use crate::modules::ModuleEvent;
|
||||
|
||||
Reference in new issue
Block a user