Skip to main content

PowerManager

Struct PowerManager 

Source
pub struct PowerManager { /* private fields */ }
Expand description

Power manager

Implementations§

Source§

impl PowerManager

Source

pub fn new() -> Self

Create new power manager

Source

pub fn set_orchestration_state(&mut self, state: AmbientOrchestrationState)

Set the current orchestration state so power estimates track the real state machine in orchestrator.rs (ModelLifecycle).

Source

pub fn set_active_model_count(&mut self, count: usize)

Set the number of models currently active on the managed device.

Source

pub fn can_execute(&self, _device: &AmbientDevice) -> bool

Check if device can execute task

Source

pub fn update_power_consumption( &mut self, device: &mut AmbientDevice, execution_time: Duration, )

Update power consumption after executing a task on a device.

Uses the power optimizer to record the power state transition and the power policy to determine the power budget.

Source

pub fn power_policy(&self) -> &PowerPolicy

Get the current power policy.

Source

pub fn set_power_policy(&mut self, policy: PowerPolicy)

Set the power policy.

Source

pub fn power_optimizer_mut(&mut self) -> &mut PowerOptimizer

Get a mutable reference to the power optimizer for direct optimization.

Source

pub fn battery_monitor_mut(&mut self) -> &mut BatteryMonitor

Get a mutable reference to the battery monitor for updates.

Source

pub fn thermal_monitor_mut(&mut self) -> &mut ThermalMonitor

Get a mutable reference to the thermal monitor for updates.

Source

pub fn get_battery_level(&self, _device_id: &str) -> f64

Get battery level

Source

pub fn get_thermal_state(&self, device_id: &str) -> ThermalState

Get thermal state derived from the current estimated power draw.

Power-to-thermal mapping (mobile SoC heuristic):

  • < 3WNormal (cool)
  • 3–7WWarm
  • > 7WCritical
Source

pub fn get_power_consumption(&self, device_id: &str) -> f64

Get power consumption in watts.

On platforms exposing a power API (e.g. RAPL on Intel, the Energy Meter on Android) this would query the hardware. On every other target we estimate consumption from the current orchestration state and the number of active models, which is what battery-aware ML scheduling and thermal management rely on:

StateBase power
Idle~0.5 W
Active inference~5.0 W + (active_models × 2.0 W)
Scrubbing~3.0 W
Streaming~4.0 W
Source

pub fn estimate_battery_life_remaining( &self, current_battery_pct: f64, battery_capacity_wh: f64, ) -> f64

Estimate battery life remaining in hours.

hours = (battery_capacity_wh * current_battery_pct / 100.0) / power_consumption

Returns 0.0 if the estimated power consumption is zero (avoids division by zero) or if the battery percentage is non-positive.

Source

pub fn should_throttle_inference(&self) -> bool

Decide whether inference should be throttled.

Returns true when the thermal state is Critical or when the estimated battery life (using the battery monitor’s current charge against a 15 Wh mobile battery as a reasonable default) drops below 1 hour.

Source

pub fn get_power_metrics(&self) -> PowerMetrics

Aggregate the current power/thermal/battery snapshot.

estimated_battery_hours is Some when a non-zero battery capacity is known; here we use the battery monitor’s current level against a 15 Wh mobile battery default. Returns None when the device has no battery (e.g. mains-powered embedded host).

Auto Trait Implementations§

Blanket Implementations§

§

impl<S, A> Aggregate<Result<S, Error>> for A
where A: Aggregate<S>,

§

fn from_shares<T>(iter: T) -> Result<A, Error>
where T: IntoIterator<Item = Result<S, Error>>,

Aggregate shares in an MPC protocol.
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
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,