Widen compact dispatch cluster probe
This commit is contained in:
parent
bf97363fca
commit
8115b6b67a
2 changed files with 60 additions and 15 deletions
|
|
@ -311,6 +311,11 @@ struct RuntimeCompactEventDispatchClusterReport {
|
||||||
maps_with_event_runtime_collection: usize,
|
maps_with_event_runtime_collection: usize,
|
||||||
maps_with_dispatch_strip_records: usize,
|
maps_with_dispatch_strip_records: usize,
|
||||||
dispatch_strip_record_count: usize,
|
dispatch_strip_record_count: usize,
|
||||||
|
dispatch_strip_records_with_trigger_kind: usize,
|
||||||
|
dispatch_strip_records_missing_trigger_kind: usize,
|
||||||
|
dispatch_strip_payload_families: BTreeMap<String, usize>,
|
||||||
|
dispatch_descriptor_occurrences:
|
||||||
|
BTreeMap<String, Vec<RuntimeCompactEventDispatchClusterOccurrence>>,
|
||||||
unknown_descriptor_ids: Vec<u32>,
|
unknown_descriptor_ids: Vec<u32>,
|
||||||
unknown_descriptor_special_condition_label_matches: Vec<String>,
|
unknown_descriptor_special_condition_label_matches: Vec<String>,
|
||||||
unknown_descriptor_occurrences:
|
unknown_descriptor_occurrences:
|
||||||
|
|
@ -323,6 +328,7 @@ struct RuntimeCompactEventDispatchClusterOccurrence {
|
||||||
record_index: usize,
|
record_index: usize,
|
||||||
live_entry_id: u32,
|
live_entry_id: u32,
|
||||||
payload_family: String,
|
payload_family: String,
|
||||||
|
trigger_kind: Option<u8>,
|
||||||
signature_family: Option<String>,
|
signature_family: Option<String>,
|
||||||
condition_tuples: Vec<RuntimeCompactEventDispatchClusterConditionTuple>,
|
condition_tuples: Vec<RuntimeCompactEventDispatchClusterConditionTuple>,
|
||||||
rows: Vec<RuntimeCompactEventDispatchClusterRow>,
|
rows: Vec<RuntimeCompactEventDispatchClusterRow>,
|
||||||
|
|
@ -1715,6 +1721,11 @@ fn run_runtime_inspect_compact_event_dispatch_cluster(
|
||||||
let mut maps_with_event_runtime_collection = 0usize;
|
let mut maps_with_event_runtime_collection = 0usize;
|
||||||
let mut maps_with_dispatch_strip_records = 0usize;
|
let mut maps_with_dispatch_strip_records = 0usize;
|
||||||
let mut dispatch_strip_record_count = 0usize;
|
let mut dispatch_strip_record_count = 0usize;
|
||||||
|
let mut dispatch_strip_records_with_trigger_kind = 0usize;
|
||||||
|
let mut dispatch_strip_records_missing_trigger_kind = 0usize;
|
||||||
|
let mut dispatch_strip_payload_families = BTreeMap::<String, usize>::new();
|
||||||
|
let mut dispatch_descriptor_occurrences =
|
||||||
|
BTreeMap::<String, Vec<RuntimeCompactEventDispatchClusterOccurrence>>::new();
|
||||||
let mut unknown_descriptor_occurrences =
|
let mut unknown_descriptor_occurrences =
|
||||||
BTreeMap::<u32, Vec<RuntimeCompactEventDispatchClusterOccurrence>>::new();
|
BTreeMap::<u32, Vec<RuntimeCompactEventDispatchClusterOccurrence>>::new();
|
||||||
|
|
||||||
|
|
@ -1730,10 +1741,7 @@ fn run_runtime_inspect_compact_event_dispatch_cluster(
|
||||||
let matching_rows = record
|
let matching_rows = record
|
||||||
.grouped_effect_rows
|
.grouped_effect_rows
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|row| {
|
.filter(|row| compact_event_dispatch_strip_opcode(row.opcode))
|
||||||
compact_event_dispatch_strip_opcode(row.opcode)
|
|
||||||
&& row.descriptor_label.is_none()
|
|
||||||
})
|
|
||||||
.fold(
|
.fold(
|
||||||
BTreeMap::<u32, Vec<RuntimeCompactEventDispatchClusterRow>>::new(),
|
BTreeMap::<u32, Vec<RuntimeCompactEventDispatchClusterRow>>::new(),
|
||||||
|mut grouped, row| {
|
|mut grouped, row| {
|
||||||
|
|
@ -1754,6 +1762,14 @@ fn run_runtime_inspect_compact_event_dispatch_cluster(
|
||||||
}
|
}
|
||||||
|
|
||||||
map_dispatch_strip_record_count += 1;
|
map_dispatch_strip_record_count += 1;
|
||||||
|
if record.trigger_kind.is_some() {
|
||||||
|
dispatch_strip_records_with_trigger_kind += 1;
|
||||||
|
} else {
|
||||||
|
dispatch_strip_records_missing_trigger_kind += 1;
|
||||||
|
}
|
||||||
|
*dispatch_strip_payload_families
|
||||||
|
.entry(record.payload_family.clone())
|
||||||
|
.or_insert(0) += 1;
|
||||||
let condition_tuples = record
|
let condition_tuples = record
|
||||||
.standalone_condition_rows
|
.standalone_condition_rows
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -1766,18 +1782,26 @@ fn run_runtime_inspect_compact_event_dispatch_cluster(
|
||||||
let signature_family = compact_event_signature_family_from_notes(&record.notes);
|
let signature_family = compact_event_signature_family_from_notes(&record.notes);
|
||||||
|
|
||||||
for (descriptor_id, rows) in matching_rows {
|
for (descriptor_id, rows) in matching_rows {
|
||||||
unknown_descriptor_occurrences
|
let occurrence = RuntimeCompactEventDispatchClusterOccurrence {
|
||||||
.entry(descriptor_id)
|
|
||||||
.or_default()
|
|
||||||
.push(RuntimeCompactEventDispatchClusterOccurrence {
|
|
||||||
path: path.display().to_string(),
|
path: path.display().to_string(),
|
||||||
record_index: record.record_index,
|
record_index: record.record_index,
|
||||||
live_entry_id: record.live_entry_id,
|
live_entry_id: record.live_entry_id,
|
||||||
payload_family: record.payload_family.clone(),
|
payload_family: record.payload_family.clone(),
|
||||||
|
trigger_kind: record.trigger_kind,
|
||||||
signature_family: signature_family.clone(),
|
signature_family: signature_family.clone(),
|
||||||
condition_tuples: condition_tuples.clone(),
|
condition_tuples: condition_tuples.clone(),
|
||||||
rows,
|
rows: rows.clone(),
|
||||||
});
|
};
|
||||||
|
dispatch_descriptor_occurrences
|
||||||
|
.entry(compact_event_dispatch_descriptor_key(descriptor_id, &rows))
|
||||||
|
.or_default()
|
||||||
|
.push(occurrence.clone());
|
||||||
|
if rows.iter().all(|row| row.descriptor_label.is_none()) {
|
||||||
|
unknown_descriptor_occurrences
|
||||||
|
.entry(descriptor_id)
|
||||||
|
.or_default()
|
||||||
|
.push(occurrence);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1806,6 +1830,10 @@ fn run_runtime_inspect_compact_event_dispatch_cluster(
|
||||||
maps_with_event_runtime_collection,
|
maps_with_event_runtime_collection,
|
||||||
maps_with_dispatch_strip_records,
|
maps_with_dispatch_strip_records,
|
||||||
dispatch_strip_record_count,
|
dispatch_strip_record_count,
|
||||||
|
dispatch_strip_records_with_trigger_kind,
|
||||||
|
dispatch_strip_records_missing_trigger_kind,
|
||||||
|
dispatch_strip_payload_families,
|
||||||
|
dispatch_descriptor_occurrences,
|
||||||
unknown_descriptor_ids,
|
unknown_descriptor_ids,
|
||||||
unknown_descriptor_special_condition_label_matches,
|
unknown_descriptor_special_condition_label_matches,
|
||||||
unknown_descriptor_occurrences,
|
unknown_descriptor_occurrences,
|
||||||
|
|
@ -4169,6 +4197,16 @@ fn collect_compact_event_dispatch_cluster_input_paths(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn compact_event_dispatch_descriptor_key(
|
||||||
|
descriptor_id: u32,
|
||||||
|
rows: &[RuntimeCompactEventDispatchClusterRow],
|
||||||
|
) -> String {
|
||||||
|
rows.first()
|
||||||
|
.and_then(|row| row.descriptor_label.as_deref())
|
||||||
|
.map(|label| format!("{descriptor_id} {label}"))
|
||||||
|
.unwrap_or_else(|| descriptor_id.to_string())
|
||||||
|
}
|
||||||
|
|
||||||
fn parse_hex_offset(text: &str) -> Option<usize> {
|
fn parse_hex_offset(text: &str) -> Option<usize> {
|
||||||
text.strip_prefix("0x")
|
text.strip_prefix("0x")
|
||||||
.and_then(|digits| usize::from_str_radix(digits, 16).ok())
|
.and_then(|digits| usize::from_str_radix(digits, 16).ok())
|
||||||
|
|
|
||||||
|
|
@ -266,6 +266,13 @@ Working rule:
|
||||||
already reach the grounded `0x00431b20` dispatch strip. That means the direct full-record
|
already reach the grounded `0x00431b20` dispatch strip. That means the direct full-record
|
||||||
`0x4e21/0x4e22` parser path is not currently bridging `[event+0x7ef]` for the ordinary
|
`0x4e21/0x4e22` parser path is not currently bridging `[event+0x7ef]` for the ordinary
|
||||||
mutation-capable rows in those sampled maps.
|
mutation-capable rows in those sampled maps.
|
||||||
|
- the widened compact-cluster probe now makes that same gap first-class too:
|
||||||
|
`runtime inspect-compact-event-dispatch-cluster <map-or-dir>` now reports all dispatch-strip
|
||||||
|
descriptor occurrences, their `trigger_kind`, and payload family instead of only unknown
|
||||||
|
descriptor ids. On `Texas Tea.gmp`, the widened report now shows `548 Add Building Port01`,
|
||||||
|
`8 Economic Status`, and `43 Company Variable 1` all arriving on
|
||||||
|
`real_packed_nondirect_compact_v1` rows with `trigger_kind = null`, so the next pass can work
|
||||||
|
from a checked probe rather than ad hoc `inspect-smp` scrapes.
|
||||||
- cross-map probing now gives a better static-analysis lead too:
|
- cross-map probing now gives a better static-analysis lead too:
|
||||||
`British Isles.gmp` shows no current `0x00431b20` dispatch-strip rows, `Germany.gmp` stays on
|
`British Isles.gmp` shows no current `0x00431b20` dispatch-strip rows, `Germany.gmp` stays on
|
||||||
`Game Variable 1` plus `Company Variable 3..4`, while `Texas Tea.gmp` adds `Economic Status`
|
`Game Variable 1` plus `Company Variable 3..4`, while `Texas Tea.gmp` adds `Economic Status`
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue