use crate::plan::barriers::BarrierSelector;
use crate::util::constants::*;
pub struct PlanConstraints {
pub collects_garbage: bool,
pub moves_objects: bool,
pub max_non_los_default_alloc_bytes: usize,
pub max_non_los_copy_bytes: usize,
pub needs_log_bit: bool,
pub may_trace_duplicate_edges: bool,
pub barrier: BarrierSelector,
pub needs_linear_scan: bool,
pub needs_concurrent_workers: bool,
pub needs_forward_after_liveness: bool,
pub needs_prepare_mutator: bool,
pub generational: bool,
}
impl PlanConstraints {
pub const fn default() -> Self {
PlanConstraints {
collects_garbage: true,
moves_objects: false,
max_non_los_default_alloc_bytes: MAX_INT,
max_non_los_copy_bytes: MAX_INT,
needs_linear_scan: crate::util::constants::SUPPORT_CARD_SCANNING
|| crate::util::constants::LAZY_SWEEP,
needs_concurrent_workers: false,
may_trace_duplicate_edges: cfg!(feature = "marksweep_as_nonmoving"),
needs_forward_after_liveness: false,
needs_log_bit: false,
barrier: BarrierSelector::NoBarrier,
needs_prepare_mutator: cfg!(feature = "marksweep_as_nonmoving"),
generational: false,
}
}
}
pub(crate) const DEFAULT_PLAN_CONSTRAINTS: PlanConstraints = PlanConstraints::default();
pub const MAX_NON_LOS_ALLOC_BYTES_COPYING_PLAN: usize = 2 << LOG_BYTES_IN_PAGE;