perf(assets): cache visual graph anchors
This commit is contained in:
@@ -1205,19 +1205,29 @@ pub fn extend_graph_report_with_visual_dependencies_with_progress<R: ResourceRep
|
||||
let mut wear_requests = 0usize;
|
||||
let mut material_requests = 0usize;
|
||||
let mut texture_requests = 0usize;
|
||||
// Capture all base-graph anchors before this traversal appends visual
|
||||
// resources and edges. Looking them up again from the growing graph would
|
||||
// make each later prototype scan an ever larger collection.
|
||||
let prototype_mesh_anchors: Vec<_> = (0..prototypes.len())
|
||||
.map(|prototype_index| {
|
||||
let prototype_node_id = prototype_node_id(graph, prototype_index)?;
|
||||
let mesh_node_id = prototype_mesh_node_id(graph, prototype_node_id)?;
|
||||
Some((mesh_node_id, mesh_edge_id(graph, prototype_node_id)))
|
||||
})
|
||||
.collect();
|
||||
|
||||
for (prototype_index, prototype) in prototypes.iter().enumerate() {
|
||||
let PrototypeGeometry::Mesh(mesh) = &prototype.geometry else {
|
||||
continue;
|
||||
};
|
||||
report.wear_request_count += 1;
|
||||
let Some(prototype_node_id) = prototype_node_id(graph, prototype_index) else {
|
||||
let Some((mesh_node_id, mesh_parent_edge)) = prototype_mesh_anchors
|
||||
.get(prototype_index)
|
||||
.copied()
|
||||
.flatten()
|
||||
else {
|
||||
continue;
|
||||
};
|
||||
let Some(mesh_node_id) = prototype_mesh_node_id(graph, prototype_node_id) else {
|
||||
continue;
|
||||
};
|
||||
let mesh_parent_edge = mesh_edge_id(graph, prototype_node_id);
|
||||
let root_index = root_index_for_prototype(graph, prototype_index);
|
||||
|
||||
wear_requests = wear_requests.saturating_add(1);
|
||||
|
||||
@@ -1110,6 +1110,14 @@ before the first TEXM progress marker. The differing checkpoints rule out the
|
||||
previous overly narrow claim that TEXM is the sole remaining target. Profiling
|
||||
must compare WEAR, MAT0, TEXM, graph allocation and archive I/O quantitatively.
|
||||
|
||||
Visual expansion now snapshots each prototype's base-graph `Prototype→MSH`
|
||||
anchor before it appends any WEAR/MAT0/TEXM nodes and edges. The subsequent
|
||||
traversal reads this immutable vector rather than repeatedly linearly searching
|
||||
the growing graph; graph content, node/edge IDs and provenance remain
|
||||
unchanged. The same controlled 180-second Part 2 probe still ended at
|
||||
`GraphVisualMaterials`, so this is a complexity/correctness improvement rather
|
||||
than measured evidence of a startup checkpoint advance.
|
||||
|
||||
Mission loading now raises the decoded-payload cache entry budget from 64 to
|
||||
256 while retaining its 64 MiB byte budget. This avoids premature entry-count
|
||||
eviction during resource-rich loads without making memory unbounded. The same
|
||||
|
||||
Reference in New Issue
Block a user