Skip to main content

ExecutorSizing

Struct ExecutorSizing 

Source
pub struct ExecutorSizing {
    pub cbs: usize,
    pub sc: usize,
    pub arena: usize,
    pub nodes: usize,
    pub params: usize,
}
Expand description

Per-entry executor sizing — the entity counts an Executor is built to hold. Public + non-generic (the “C/C++ is a thin wrapper” principle): the entry / macro / FFI supplies these as plain usizes rather than as type/const generics C can’t name. Used to size + carve the backing.

cbs is capped at 64 by the executor’s u64 ready-set bitmask (asserted in carve-time / open_in).

Fields§

§cbs: usize

Callback-table slots (entries, the per-entry SC bindings, and the per-callback-group sched table). ≤ 64.

§sc: usize

Scheduling-context slots (sched_contexts, the sporadic state tables and alive supervision’s per-SC records).

§arena: usize

Bump-allocator arena size in bytes.

§nodes: usize

phase-409 — Node slots. One worst-case extra session, extra-session id, node-sched binding, dispatch slot, component slot and callback-group filter entry per Node, so ONE count covers all seven tables (that is the upper bound each of them already assumed under MAX_NODES).

§params: usize

phase-382 W3’ — parameter-store slots carved from the backing.

The default is nros_params::IMPLIED_STORE_SLOTS: the store’s full MAX_PARAMETERS when the build KNOWS the image builds one (the contract declares a parameter, the bringup declares param_services, or the launch seeds a <param>), and ZERO otherwise. Zero is not a degraded mode: an executor that carved no store and is asked for one allocates it from the heap exactly as before, with issue 1706’s named refusal if the heap cannot hold it.

Conditional rather than fixed, and that is a decision measured in phase-382’s W3’ notes: a fixed MAX_PARAMETERS region adds the whole store (280,832 B on armv7m at the default 32 slots) to every image’s backing — Rust EXECUTOR_BACKING, every C/C++ rclc_executor_t, every tier slot — which is issue 1702’s rejected .bss static, everywhere.

Implementations§

Source§

impl ExecutorSizing

Source

pub const DEFAULT: Self

The build-time default (MAX_CBS/MAX_SC/ARENA_SIZE/MAX_NODES consts) — the backward-compatible size the alloc convenience constructors leak.

Source

pub const fn u64_len(&self) -> usize

u64 words a backing must hold for this sizing (see executor_storage_u64_len).

Source

pub const fn assert_covers_model(&self, source: &'static str)

phase-412 #4 — refuse, at COMPILE time, a sizing whose arena is below what this image’s declared entities are modelled to need.

For a caller that supplies its own const sizing for the image’s ONE executor (open_in over a static sized with u64_len), so its arena is held to the same model the build-time default is:

ⓘ
const SIZING: nros::ExecutorSizing = nros::ExecutorSizing { .. };
const _: () = SIZING.assert_covers_model("SIZING.arena");

Opt-in, deliberately: an executor that holds a SUBSET of the image (one tier of a tiered boot) legitimately carries less than the whole model, and only its author knows which kind it is. See arena_oracle for the arms and why each is or is not checked here.

Trait Implementations§

Source§

impl Clone for ExecutorSizing

Source§

fn clone(&self) -> ExecutorSizing

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ExecutorSizing

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.