forked from 1b-agent/opencadstudio-upstream
fix(viewcube): cache UCS picker names behind an epoch
The two per-frame ViewCube blocks rebuilt the named-UCS name list (N String clones plus a Vec) every frame; now Scene::cached_ucs_names memoises it behind ucs_epoch and the picker takes the Arc, so frames cost a refcount bump. Bumped on UCS SAVE, UCS DELETE, RENAME UCS, record-API ucss patch, file-open, and undo Full-swap. Tests: cached_ucs_names_returns_same_arc_until_bump pins the hit path; cached_ucs_names_invalidated_by_bump pins rebuild with new content. Full suite: 1976 passed / 0 failed / 25 ignored.
This commit is contained in:
1 parent
bd37a2f969
commit
8c2cfa2c8f
9 files changed
+85
-20
No files matched your search
@@ -247,6 +247,7 @@ impl OpenCADStudio {
|
||||
.document
|
||||
.ucss
|
||||
.add_or_replace(ucs.clone());
|
||||
self.tabs[i].scene.bump_ucs_epoch();
|
||||
self.tabs[i].active_ucs = Some(ucs);
|
||||
active_changed = true;
|
||||
self.tabs[i].dirty = true;
|
||||
@@ -261,6 +262,7 @@ impl OpenCADStudio {
|
||||
} else if let Some(removed) =
|
||||
self.tabs[i].scene.document.ucss.remove(&name)
|
||||
{
|
||||
self.tabs[i].scene.bump_ucs_epoch();
|
||||
let removed_handle = removed.handle;
|
||||
for entity in self.tabs[i].scene.document.entities_mut() {
|
||||
if let codec::EntityType::Viewport(viewport) = entity {
|
||||
|
||||
@@ -2997,6 +2997,7 @@ impl OpenCADStudio {
|
||||
self.tabs[i].scene.bump_geometry_no_blocks();
|
||||
}
|
||||
if type_str == "UCS" {
|
||||
self.tabs[i].scene.bump_ucs_epoch();
|
||||
if let Some(active) = self.tabs[i].active_ucs.as_mut() {
|
||||
if active.name.eq_ignore_ascii_case(&old_name) {
|
||||
active.name = new_name.clone();
|
||||
|
||||
Reference in new issue
Block a user