pub enum TimingRequest {
None,
Resolved,
Deferred,
}Expand description
What an observer asks be done with each launch’s measurement.
Declared once, by timing: the launch path has to
know where a measurement will go before it takes one.
It must not change while an observation is installed. A launch bracketed under one answer and delivered under another loses a measurement that has already been paid for. An observer that measures only part of a run keeps that region in its own state, rather than changing its answer here.
Variants§
None
Don’t time launches. The default, because timing is not free.
Resolved
Time each launch and read its measurement back, delivering the length
to timed.
Reading blocks the issuing thread until the kernel has run, so kernels run one at a time and their sum is not the pass’s device time. Right for each kernel’s own cost, wrong for measuring a pipeline.
Deferred
Time each launch and hand its measurement over unread, to
profiled.
Nothing waits, so the kernels around it keep running back to back and the observer reads them once the pass is over. Right for measuring where a pass spends its time.
Only while the profiling logger is off. A measurement is read once,
and past ExecutionOnly the logger
needs it too, so the launch path reads it there and delivers a length to
timed instead — which runs the kernels one at
a time. An observer whose figures only mean something on a pipelined pass
should say so when timings arrive that way.
Trait Implementations§
Source§impl Clone for TimingRequest
impl Clone for TimingRequest
impl Copy for TimingRequest
Source§impl Debug for TimingRequest
impl Debug for TimingRequest
Source§impl Default for TimingRequest
impl Default for TimingRequest
impl Eq for TimingRequest
Source§impl PartialEq for TimingRequest
impl PartialEq for TimingRequest
impl StructuralPartialEq for TimingRequest
Auto Trait Implementations§
impl Freeze for TimingRequest
impl RefUnwindSafe for TimingRequest
impl Send for TimingRequest
impl Sync for TimingRequest
impl Unpin for TimingRequest
impl UnsafeUnpin for TimingRequest
impl UnwindSafe for TimingRequest
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<K, Q> Equivalent<Q> for K
impl<K, Q> Equivalent<Q> for K
Source§fn equivalent(&self, key: &Q) -> bool
fn equivalent(&self, key: &Q) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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