feat(runtime): trace visual graph sizes
This commit is contained in:
@@ -1089,14 +1089,18 @@ mod tests {
|
|||||||
write_load_progress(
|
write_load_progress(
|
||||||
&path,
|
&path,
|
||||||
std::time::Duration::from_millis(34),
|
std::time::Duration::from_millis(34),
|
||||||
MissionLoadPhase::GraphVisualMaterialRequests(64),
|
MissionLoadPhase::GraphVisualMaterialRequests {
|
||||||
|
request_count: 64,
|
||||||
|
graph_node_count: 128,
|
||||||
|
graph_edge_count: 192,
|
||||||
|
},
|
||||||
)?;
|
)?;
|
||||||
let progress = std::fs::read_to_string(&path).map_err(|err| err.to_string())?;
|
let progress = std::fs::read_to_string(&path).map_err(|err| err.to_string())?;
|
||||||
std::fs::remove_file(&path).map_err(|err| err.to_string())?;
|
std::fs::remove_file(&path).map_err(|err| err.to_string())?;
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
progress,
|
progress,
|
||||||
"Starting\telapsed_ms=0\nGraphVisualMaterials\telapsed_ms=12\nGraphVisualMaterialRequests(64)\telapsed_ms=34\n"
|
"Starting\telapsed_ms=0\nGraphVisualMaterials\telapsed_ms=12\nGraphVisualMaterialRequests { request_count: 64, graph_node_count: 128, graph_edge_count: 192 }\telapsed_ms=34\n"
|
||||||
);
|
);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -490,6 +490,10 @@ pub struct VisualDependencyProgress {
|
|||||||
pub phase: VisualDependencyPhase,
|
pub phase: VisualDependencyPhase,
|
||||||
/// Number of requests reached in this class during the current expansion.
|
/// Number of requests reached in this class during the current expansion.
|
||||||
pub request_count: usize,
|
pub request_count: usize,
|
||||||
|
/// Resource graph nodes materialized before this request is resolved.
|
||||||
|
pub graph_node_count: usize,
|
||||||
|
/// Resource graph edges materialized before this request is resolved.
|
||||||
|
pub graph_edge_count: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Errors raised while preparing CPU-side assets.
|
/// Errors raised while preparing CPU-side assets.
|
||||||
@@ -1239,6 +1243,8 @@ pub fn extend_graph_report_with_visual_dependencies_with_progress<R: ResourceRep
|
|||||||
&mut on_progress,
|
&mut on_progress,
|
||||||
VisualDependencyPhase::Wear,
|
VisualDependencyPhase::Wear,
|
||||||
wear_requests,
|
wear_requests,
|
||||||
|
graph.nodes.len(),
|
||||||
|
graph.edges.len(),
|
||||||
);
|
);
|
||||||
match resolve_wear_table_cached(repository, mesh, &mut wear_validation) {
|
match resolve_wear_table_cached(repository, mesh, &mut wear_validation) {
|
||||||
Ok(table) => {
|
Ok(table) => {
|
||||||
@@ -1281,6 +1287,8 @@ pub fn extend_graph_report_with_visual_dependencies_with_progress<R: ResourceRep
|
|||||||
on_progress(VisualDependencyProgress {
|
on_progress(VisualDependencyProgress {
|
||||||
phase: VisualDependencyPhase::Material,
|
phase: VisualDependencyPhase::Material,
|
||||||
request_count: material_requests,
|
request_count: material_requests,
|
||||||
|
graph_node_count: graph.nodes.len(),
|
||||||
|
graph_edge_count: graph.edges.len(),
|
||||||
});
|
});
|
||||||
for (material_index, _entry) in table.entries.iter().enumerate() {
|
for (material_index, _entry) in table.entries.iter().enumerate() {
|
||||||
material_requests = material_requests.saturating_add(1);
|
material_requests = material_requests.saturating_add(1);
|
||||||
@@ -1288,6 +1296,8 @@ pub fn extend_graph_report_with_visual_dependencies_with_progress<R: ResourceRep
|
|||||||
&mut on_progress,
|
&mut on_progress,
|
||||||
VisualDependencyPhase::Material,
|
VisualDependencyPhase::Material,
|
||||||
material_requests,
|
material_requests,
|
||||||
|
graph.nodes.len(),
|
||||||
|
graph.edges.len(),
|
||||||
);
|
);
|
||||||
let Ok(material_index) = u16::try_from(material_index) else {
|
let Ok(material_index) = u16::try_from(material_index) else {
|
||||||
push_visual_failure(
|
push_visual_failure(
|
||||||
@@ -1339,6 +1349,8 @@ pub fn extend_graph_report_with_visual_dependencies_with_progress<R: ResourceRep
|
|||||||
&mut on_progress,
|
&mut on_progress,
|
||||||
VisualDependencyPhase::Texture,
|
VisualDependencyPhase::Texture,
|
||||||
texture_requests,
|
texture_requests,
|
||||||
|
graph.nodes.len(),
|
||||||
|
graph.edges.len(),
|
||||||
);
|
);
|
||||||
report.texture_request_count += 1;
|
report.texture_request_count += 1;
|
||||||
match resolve_texm_validation_cached(
|
match resolve_texm_validation_cached(
|
||||||
@@ -1405,6 +1417,8 @@ pub fn extend_graph_report_with_visual_dependencies_with_progress<R: ResourceRep
|
|||||||
&mut on_progress,
|
&mut on_progress,
|
||||||
VisualDependencyPhase::Texture,
|
VisualDependencyPhase::Texture,
|
||||||
texture_requests,
|
texture_requests,
|
||||||
|
graph.nodes.len(),
|
||||||
|
graph.edges.len(),
|
||||||
);
|
);
|
||||||
report.lightmap_request_count += 1;
|
report.lightmap_request_count += 1;
|
||||||
match resolve_texm_validation_cached(
|
match resolve_texm_validation_cached(
|
||||||
@@ -1472,11 +1486,15 @@ fn report_visual_dependency_progress(
|
|||||||
on_progress: &mut impl FnMut(VisualDependencyProgress),
|
on_progress: &mut impl FnMut(VisualDependencyProgress),
|
||||||
phase: VisualDependencyPhase,
|
phase: VisualDependencyPhase,
|
||||||
request_count: usize,
|
request_count: usize,
|
||||||
|
graph_node_count: usize,
|
||||||
|
graph_edge_count: usize,
|
||||||
) {
|
) {
|
||||||
if request_count == 1 || request_count.is_multiple_of(VISUAL_DEPENDENCY_PROGRESS_INTERVAL) {
|
if request_count == 1 || request_count.is_multiple_of(VISUAL_DEPENDENCY_PROGRESS_INTERVAL) {
|
||||||
on_progress(VisualDependencyProgress {
|
on_progress(VisualDependencyProgress {
|
||||||
phase,
|
phase,
|
||||||
request_count,
|
request_count,
|
||||||
|
graph_node_count,
|
||||||
|
graph_edge_count,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2320,6 +2338,8 @@ mod tests {
|
|||||||
&mut |event| progress.push(event),
|
&mut |event| progress.push(event),
|
||||||
VisualDependencyPhase::Texture,
|
VisualDependencyPhase::Texture,
|
||||||
request_count,
|
request_count,
|
||||||
|
37,
|
||||||
|
41,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2329,14 +2349,20 @@ mod tests {
|
|||||||
VisualDependencyProgress {
|
VisualDependencyProgress {
|
||||||
phase: VisualDependencyPhase::Texture,
|
phase: VisualDependencyPhase::Texture,
|
||||||
request_count: 1,
|
request_count: 1,
|
||||||
|
graph_node_count: 37,
|
||||||
|
graph_edge_count: 41,
|
||||||
},
|
},
|
||||||
VisualDependencyProgress {
|
VisualDependencyProgress {
|
||||||
phase: VisualDependencyPhase::Texture,
|
phase: VisualDependencyPhase::Texture,
|
||||||
request_count: 64,
|
request_count: 64,
|
||||||
|
graph_node_count: 37,
|
||||||
|
graph_edge_count: 41,
|
||||||
},
|
},
|
||||||
VisualDependencyProgress {
|
VisualDependencyProgress {
|
||||||
phase: VisualDependencyPhase::Texture,
|
phase: VisualDependencyPhase::Texture,
|
||||||
request_count: 128,
|
request_count: 128,
|
||||||
|
graph_node_count: 37,
|
||||||
|
graph_edge_count: 41,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -126,11 +126,25 @@ pub enum MissionLoadPhase {
|
|||||||
/// Resolve MAT0 documents while expanding visual dependencies.
|
/// Resolve MAT0 documents while expanding visual dependencies.
|
||||||
GraphVisualMaterials,
|
GraphVisualMaterials,
|
||||||
/// Progress marker emitted after each 64 MAT0 validation requests.
|
/// Progress marker emitted after each 64 MAT0 validation requests.
|
||||||
GraphVisualMaterialRequests(usize),
|
GraphVisualMaterialRequests {
|
||||||
|
/// Number of MAT0 validation requests started.
|
||||||
|
request_count: usize,
|
||||||
|
/// Graph nodes materialized before the request.
|
||||||
|
graph_node_count: usize,
|
||||||
|
/// Graph edges materialized before the request.
|
||||||
|
graph_edge_count: usize,
|
||||||
|
},
|
||||||
/// Validate TEXM documents while expanding visual dependencies.
|
/// Validate TEXM documents while expanding visual dependencies.
|
||||||
GraphVisualTextures,
|
GraphVisualTextures,
|
||||||
/// Progress marker emitted after each 64 TEXM validation requests.
|
/// Progress marker emitted after each 64 TEXM validation requests.
|
||||||
GraphVisualTextureRequests(usize),
|
GraphVisualTextureRequests {
|
||||||
|
/// Number of TEXM validation requests started.
|
||||||
|
request_count: usize,
|
||||||
|
/// Graph nodes materialized before the request.
|
||||||
|
graph_node_count: usize,
|
||||||
|
/// Graph edges materialized before the request.
|
||||||
|
graph_edge_count: usize,
|
||||||
|
},
|
||||||
/// Prepare all reachable visual/resource dependencies.
|
/// Prepare all reachable visual/resource dependencies.
|
||||||
Assets,
|
Assets,
|
||||||
/// Decode and validate MSH model meshes.
|
/// Decode and validate MSH model meshes.
|
||||||
@@ -728,12 +742,20 @@ fn load_mission_with_options_and_progress(
|
|||||||
if progress.request_count > 1 {
|
if progress.request_count > 1 {
|
||||||
let request_phase = match progress.phase {
|
let request_phase = match progress.phase {
|
||||||
VisualDependencyPhase::Wear => None,
|
VisualDependencyPhase::Wear => None,
|
||||||
VisualDependencyPhase::Material => Some(
|
VisualDependencyPhase::Material => {
|
||||||
MissionLoadPhase::GraphVisualMaterialRequests(progress.request_count),
|
Some(MissionLoadPhase::GraphVisualMaterialRequests {
|
||||||
),
|
request_count: progress.request_count,
|
||||||
VisualDependencyPhase::Texture => Some(
|
graph_node_count: progress.graph_node_count,
|
||||||
MissionLoadPhase::GraphVisualTextureRequests(progress.request_count),
|
graph_edge_count: progress.graph_edge_count,
|
||||||
),
|
})
|
||||||
|
}
|
||||||
|
VisualDependencyPhase::Texture => {
|
||||||
|
Some(MissionLoadPhase::GraphVisualTextureRequests {
|
||||||
|
request_count: progress.request_count,
|
||||||
|
graph_node_count: progress.graph_node_count,
|
||||||
|
graph_edge_count: progress.graph_edge_count,
|
||||||
|
})
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if let Some(request_phase) = request_phase {
|
if let Some(request_phase) = request_phase {
|
||||||
record_load_phase(&mut trace, &mut on_phase, request_phase);
|
record_load_phase(&mut trace, &mut on_phase, request_phase);
|
||||||
|
|||||||
@@ -1126,6 +1126,13 @@ termination. It does not preserve the simultaneous TEXM count, so it neither
|
|||||||
identifies a slow individual material nor attributes time to MAT0 parsing; the
|
identifies a slow individual material nor attributes time to MAT0 parsing; the
|
||||||
next profiler revision needs one cumulative snapshot of all classes.
|
next profiler revision needs one cumulative snapshot of all classes.
|
||||||
|
|
||||||
|
Visual MAT0/TEXM request markers now also carry the graph node and edge counts
|
||||||
|
materialized immediately before that request resolves. A rebuilt bounded Part 2
|
||||||
|
probe recorded MAT0 request 3 at 52 nodes / 51 edges and request 4 at 55 nodes
|
||||||
|
/ 54 edges. These are observational snapshots for graph-growth profiling only:
|
||||||
|
they do not change traversal order, node or edge identities, provenance,
|
||||||
|
validation, cache semantics, or rendering.
|
||||||
|
|
||||||
`fparkan-game --load-progress` now initializes its file with `Starting` and
|
`fparkan-game --load-progress` now initializes its file with `Starting` and
|
||||||
appends each later mission-load event instead of replacing the prior line. A
|
appends each later mission-load event instead of replacing the prior line. A
|
||||||
bounded probe can therefore retain both MAT0 and TEXM request milestones even
|
bounded probe can therefore retain both MAT0 and TEXM request milestones even
|
||||||
|
|||||||
Reference in New Issue
Block a user