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
impl WeightMeter
sourcepub fn with_limit(limit: Weight) -> Self
pub fn with_limit(limit: Weight) -> Self
Creates Self
from a limit for the maximal consumable weight.
sourcepub fn consumed_ratio(&self) -> Perbill
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));
sourcepub fn defensive_saturating_accrue(&mut self, w: Weight)
👎Deprecated: Use consume
instead. Will be removed after December 2023.
pub fn defensive_saturating_accrue(&mut self, w: Weight)
consume
instead. Will be removed after December 2023.Consume some weight and defensively fail if it is over the limit. Saturate in any case.
sourcepub fn consume(&mut self, w: Weight)
pub fn consume(&mut self, w: Weight)
Consume some weight and defensively fail if it is over the limit. Saturate in any case.
sourcepub fn try_consume(&mut self, w: Weight) -> Result<(), ()>
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
.
sourcepub fn can_consume(&self, w: Weight) -> bool
pub fn can_consume(&self, w: Weight) -> bool
Check if the given weight can be consumed.
sourcepub fn reclaim_proof_size(&mut self, s: u64)
pub fn reclaim_proof_size(&mut self, s: u64)
Reclaim the given weight.
Trait Implementations§
source§impl Clone for WeightMeter
impl Clone for WeightMeter
source§fn clone(&self) -> WeightMeter
fn clone(&self) -> WeightMeter
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl Freeze for WeightMeter
impl RefUnwindSafe for WeightMeter
impl Send for WeightMeter
impl Sync for WeightMeter
impl Unpin for WeightMeter
impl UnwindSafe for WeightMeter
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
Consume self to return an equivalent value of
T
. Read moresource§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
Consume self to return an equivalent value of
T
.