Track add-building row-shape families

This commit is contained in:
Jan Petykiewicz 2026-04-19 10:26:03 -07:00
commit 461cf087e5
4 changed files with 160 additions and 0 deletions

View file

@ -3988,6 +3988,8 @@ pub struct SmpLoadedEventRuntimeCollectionSummary {
#[serde(default)]
pub add_building_dispatch_strip_records_missing_trigger_kind: usize,
#[serde(default)]
pub add_building_dispatch_strip_row_shape_families: Vec<String>,
#[serde(default)]
pub add_building_dispatch_strip_signature_families: Vec<String>,
#[serde(default)]
pub add_building_dispatch_strip_condition_tuple_families: Vec<String>,
@ -9995,6 +9997,22 @@ fn parse_event_runtime_collection_summary_with_tag_width(
.collect::<Vec<_>>();
add_building_dispatch_strip_descriptor_labels.sort_unstable();
add_building_dispatch_strip_descriptor_labels.dedup();
let mut add_building_dispatch_strip_row_shape_families = records
.iter()
.filter(|record| {
record.grouped_effect_rows.iter().any(|row| {
opcode_reaches_world_apply_compact_runtime_effect_dispatch_strip(row.opcode)
&& compact_event_dispatch_add_building_descriptor_id(row.descriptor_id)
})
})
.map(|record| {
compact_event_dispatch_row_shape_family_from_summary_rows(
&record.grouped_effect_rows,
)
})
.collect::<Vec<_>>();
add_building_dispatch_strip_row_shape_families.sort_unstable();
add_building_dispatch_strip_row_shape_families.dedup();
let mut add_building_dispatch_strip_signature_families = records
.iter()
.filter(|record| {
@ -10174,6 +10192,10 @@ fn parse_event_runtime_collection_summary_with_tag_width(
"decoded Add Building descriptor labels present in the 0x00431b20 dispatch strip = {:?}",
add_building_dispatch_strip_descriptor_labels
));
control_lane_notes.push(format!(
"Add Building row-shape families present in the 0x00431b20 dispatch strip = {:?}",
add_building_dispatch_strip_row_shape_families
));
control_lane_notes.push(format!(
"Add Building signature families present in the 0x00431b20 dispatch strip = {:?}",
add_building_dispatch_strip_signature_families
@ -10223,6 +10245,7 @@ fn parse_event_runtime_collection_summary_with_tag_width(
add_building_dispatch_strip_descriptor_labels,
add_building_dispatch_strip_records_with_trigger_kind,
add_building_dispatch_strip_records_missing_trigger_kind,
add_building_dispatch_strip_row_shape_families,
add_building_dispatch_strip_signature_families,
add_building_dispatch_strip_condition_tuple_families,
add_building_dispatch_strip_signature_condition_clusters,
@ -10265,6 +10288,24 @@ fn compact_event_dispatch_condition_tuple_family_from_summary_rows(
format!("[{}]", parts.join(","))
}
fn compact_event_dispatch_row_shape_family_from_summary_rows(
rows: &[SmpLoadedPackedEventGroupedEffectRowSummary],
) -> String {
if rows.is_empty() {
return "[]".to_string();
}
let parts = rows
.iter()
.map(|row| {
format!(
"{}:{}:{}",
row.group_index, row.opcode, row.raw_scalar_value
)
})
.collect::<Vec<_>>();
format!("[{}]", parts.join(","))
}
fn compact_event_dispatch_signature_condition_cluster_from_summary_rows(
signature_family: Option<&str>,
rows: &[SmpLoadedPackedEventConditionRowSummary],
@ -23169,6 +23210,10 @@ mod tests {
.expect("non-direct event runtime collection summary should parse");
assert_eq!(summary.add_building_dispatch_strip_record_indexes, vec![0]);
assert_eq!(
summary.add_building_dispatch_strip_row_shape_families,
vec!["[0:8:1]".to_string()]
);
assert_eq!(
summary.add_building_dispatch_strip_signature_families,
vec!["nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff".to_string()]
@ -23206,6 +23251,11 @@ mod tests {
"decoded Add Building descriptor labels present in the 0x00431b20 dispatch strip = [\"Add Building Port01\"]",
)
}));
assert!(summary.control_lane_notes.iter().any(|line| {
line.contains(
"Add Building row-shape families present in the 0x00431b20 dispatch strip = [\"[0:8:1]\"]",
)
}));
assert!(summary.control_lane_notes.iter().any(|line| {
line.contains(
"Add Building signature families present in the 0x00431b20 dispatch strip = [\"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff\"]",
@ -26005,6 +26055,7 @@ mod tests {
add_building_dispatch_strip_descriptor_labels: vec![],
add_building_dispatch_strip_records_with_trigger_kind: 0,
add_building_dispatch_strip_records_missing_trigger_kind: 0,
add_building_dispatch_strip_row_shape_families: vec![],
add_building_dispatch_strip_signature_families: vec![],
add_building_dispatch_strip_condition_tuple_families: vec![],
add_building_dispatch_strip_signature_condition_clusters: vec![],