use super::super::super::Dotted;
use super::super::super::metathesis::Metatheses;
#[cfg(feature = "timing")]
use super::super::placement::Dot;
#[cfg(feature = "timing")]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub struct MovementBatchMoveProfile {
pub topology: MovementTopologyProfile,
#[deprecated(since = "0.1.0", note = "use `topology.total`")]
pub topology_placement: core::time::Duration,
pub record_composition: core::time::Duration,
}
#[cfg(feature = "timing")]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub struct MovementTopologyProfile {
pub total: core::time::Duration,
pub phases: MovementTopologyPhases,
pub work: MovementTopologyWork,
pub cycle_validation: MovementCycleValidationProfile,
}
#[cfg(feature = "timing")]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub struct MovementCycleValidationProfile {
pub total: core::time::Duration,
pub work: MovementCycleValidationWork,
}
#[cfg(feature = "timing")]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub struct MovementCycleValidationWork {
pub guards_skipped: usize,
pub self_guard_entries: usize,
pub live_guard_entries: usize,
pub stale_guard_entries: usize,
pub coordinate_queries: usize,
pub chain_nodes_visited: usize,
pub not_descendant_terminals: usize,
pub origin_terminals: usize,
pub unborn_terminals: usize,
pub anchor_cycle_terminals: usize,
pub invariant_refusals: usize,
pub refusals: usize,
}
#[cfg(feature = "timing")]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub struct MovementTopologyPhases {
pub play_search: core::time::Duration,
pub suffix_unwind: core::time::Duration,
pub suffix_edit: core::time::Duration,
pub suffix_replay: core::time::Duration,
}
#[cfg(feature = "timing")]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub struct MovementTopologyWork {
pub play_search_visits: usize,
pub suffix_start: usize,
pub raw_suffix_len: usize,
pub applied_plays_unwound: usize,
pub refused_plays_skipped_unwind: usize,
pub superseded_plays_removed: usize,
pub replay_len: usize,
pub locus_replacements: usize,
}
#[cfg(feature = "timing")]
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ProfiledMovement {
pub witness: Dot,
pub delta: Dotted<Metatheses>,
pub profile: MovementBatchMoveProfile,
}