Struct sp_weights::WeightMeter

source ·
pub struct WeightMeter { /* private fields */ }
Expand description

Meters consumed weight and a hard limit for the maximal consumable weight.

Can be used to check if enough weight for an operation is available before committing to it.

Example

use sp_weights::{Weight, WeightMeter};

// The weight is limited to (10, 0).
let mut meter = WeightMeter::with_limit(Weight::from_parts(10, 0));
// There is enough weight remaining for an operation with (6, 0) weight.
assert!(meter.try_consume(Weight::from_parts(6, 0)).is_ok());
assert_eq!(meter.remaining(), Weight::from_parts(4, 0));
// There is not enough weight remaining for an operation with (5, 0) weight.
assert!(!meter.try_consume(Weight::from_parts(5, 0)).is_ok());
// The total limit is obviously unchanged:
assert_eq!(meter.limit(), Weight::from_parts(10, 0));

Implementations§

source§

impl WeightMeter

source

pub fn with_limit(limit: Weight) -> Self

Creates Self from a limit for the maximal consumable weight.

source

pub fn new() -> Self

Creates Self with the maximal possible limit for the consumable weight.

source

pub fn consumed(&self) -> Weight

The already consumed weight.

source

pub fn limit(&self) -> Weight

The limit can ever be accrued.

source

pub fn remaining(&self) -> Weight

The remaining weight that can still be consumed.

source

pub fn consumed_ratio(&self) -> Perbill

The ratio of consumed weight to the limit.

Calculates one ratio per component and returns the largest.

Example
use sp_weights::{Weight, WeightMeter};
use sp_arithmetic::Perbill;

let mut meter = WeightMeter::with_limit(Weight::from_parts(10, 20));
// Nothing consumed so far:
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(0));
meter.consume(Weight::from_parts(5, 5));
// The ref-time is the larger ratio:
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(50));
meter.consume(Weight::from_parts(1, 10));
// Now the larger ratio is proof-size:
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(75));
// Eventually it reaches 100%:
meter.consume(Weight::from_parts(4, 0));
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(100));
// Saturating the second component won't change anything anymore:
meter.consume(Weight::from_parts(0, 5));
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(100));
source

pub fn defensive_saturating_accrue(&mut self, w: Weight)

👎Deprecated: Use consume instead. Will be removed after December 2023.

Consume some weight and defensively fail if it is over the limit. Saturate in any case.

source

pub fn consume(&mut self, w: Weight)

Consume some weight and defensively fail if it is over the limit. Saturate in any case.

source

pub fn check_accrue(&mut self, w: Weight) -> bool

👎Deprecated: Use try_consume instead. Will be removed after December 2023.

Consume the given weight after checking that it can be consumed and return true. Otherwise do nothing and return false.

source

pub fn try_consume(&mut self, w: Weight) -> Result<(), ()>

Consume the given weight after checking that it can be consumed.

Returns Ok if the weight can be consumed or otherwise an Err.

source

pub fn can_accrue(&self, w: Weight) -> bool

👎Deprecated: Use can_consume instead. Will be removed after December 2023.

Check if the given weight can be consumed.

source

pub fn can_consume(&self, w: Weight) -> bool

Check if the given weight can be consumed.

Trait Implementations§

source§

impl Clone for WeightMeter

source§

fn clone(&self) -> WeightMeter

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for WeightMeter

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> DynClone for T
where T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

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, Outer> IsWrappedBy<Outer> for T
where Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

source§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

source§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> SaturatedConversion for T

source§

fn saturated_from<T>(t: T) -> Self
where Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
source§

fn saturated_into<T>(self) -> T
where Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
source§

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

§

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>,

§

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>,

§

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.
source§

impl<S, T> UncheckedInto<T> for S
where T: UncheckedFrom<S>,

source§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
source§

impl<T, S> UniqueSaturatedInto<T> for S
where T: Bounded, S: TryInto<T>,

source§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of 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
source§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for T
where T: Debug,

§

impl<T> MaybeRefUnwindSafe for T
where T: RefUnwindSafe,