pub struct CallRun;

Implementations§

source§

impl CallRun

source

pub const INSN_TYPE: WasmInsnType = WasmInsnType::Call

Trait Implementations§

source§

impl CostRunner for CallRun

source§

const COST_TYPE: CostType = CostType::WasmInsnExec

The type of cost we’re measuring.
§

type SampleType = WasmInsnSample

Data type of the sample running with.
§

type RecycledType = (Option<RawVal>, <CallRun as CostRunner>::SampleType)

Data type to be recycled, this may include (but not limited to) the returned value and unused samples. The main reason for recycling are 1. avoid unwanted memory deallocation being counted as part of the run cost 2. prevent the optimizer from performing optimization around unused value, making the bench deviate from the real case.
source§

fn run_iter( host: &Host, _iter: u64, sample: Self::SampleType ) -> Self::RecycledType

Run a iteration of the CostRunner, called by run for 0..RUN_ITERATIONS. Execution under run_iter is what’s actually being measured by the bench machineary. Need to ensure as much as possible run_iter only calls essential host routines that go into the measurement. Any input setup needs to be done beforehand and passed in via sample.
source§

fn run_baseline_iter( host: &Host, _iter: u64, base_sample: Self::SampleType ) -> Self::RecycledType

source§

const RUN_ITERATIONS: u64 = 100u64

Number of iterations to run, used to divide the resulting measured values. Defaults to 100 to average out the measurement noises for fast-running cases. If you find your measurements are finishing too slow, reduce this number.
source§

fn run_baseline( host: &Host, samples: Vec<Self::SampleType>, recycled: &mut Vec<Self::RecycledType> )

Make sure recycled has been initialized with sufficient capacity needed to store all the recycled value such that no allocation is triggered that will polute the measurements.
source§

fn run( host: &Host, samples: Vec<Self::SampleType>, recycled: &mut Vec<Self::RecycledType> )

Run the CostRunner. This method is called under CPU-and-memory tracking machinery, so anything that happens during it will be considered part of the cost for running the HostMeasurement at the returned input. Will call run_iter with iter set to each number in 0..RUN_ITERATIONS. Make sure recycled has been initialized with sufficient capacity to store all the recycled value such that no allocation is triggered that will polute the measurements.
source§

fn get_total_input(host: &Host) -> u64

Get the total input from this run. Default to asking the host. May be overridden if host is not actually involved in the actual run. However, if overridden, there is a risk of the computed input being diverged from the actual input from the host’s perspective. So use it carefully. This should be after the run, outside of the CPU-and-memory tracking machineary.

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<T, C> Compare<&T> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare(&self, a: &&T, b: &&T) -> Result<Ordering, <C as Compare<&T>>::Error>

source§

impl<T, U, E, C> Compare<(T, U)> for Cwhere C: Compare<T, Error = E, Error = E> + Compare<U>,

§

type Error = E

source§

fn compare( &self, a: &(T, U), b: &(T, U) ) -> Result<Ordering, <C as Compare<(T, U)>>::Error>

source§

impl<T, U, V, E, C> Compare<(T, U, V)> for Cwhere C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,

§

type Error = E

source§

fn compare( &self, a: &(T, U, V), b: &(T, U, V) ) -> Result<Ordering, <C as Compare<(T, U, V)>>::Error>

source§

impl<T, C> Compare<Box<T, Global>> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Box<T, Global>, b: &Box<T, Global> ) -> Result<Ordering, <C as Compare<Box<T, Global>>>::Error>

source§

impl<T, C> Compare<Option<T>> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Option<T>, b: &Option<T> ) -> Result<Ordering, <C as Compare<Option<T>>>::Error>

source§

impl<T, C> Compare<Rc<T>> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Rc<T>, b: &Rc<T> ) -> Result<Ordering, <C as Compare<Rc<T>>>::Error>

source§

impl<T, C> Compare<Vec<T, Global>> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Vec<T, Global>, b: &Vec<T, Global> ) -> Result<Ordering, <C as Compare<Vec<T, Global>>>::Error>

§

impl<T> Downcast for Twhere T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

const: unstable · 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> Same<T> for T

§

type Output = T

Should always be Self
source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

impl<E, T, U> TryIntoVal<E, T> for Uwhere E: Env, T: TryFromVal<E, U>,

§

type Error = <T as TryFromVal<E, U>>::Error

source§

fn try_into_val(&self, env: &E) -> Result<T, <U as TryIntoVal<E, T>>::Error>

§

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

§

fn vzip(self) -> V