pub struct Window<'a, D: GraphDriver> { /* private fields */ }Expand description
A capture window on one stream: arming the pools before it opens, opening it, and instantiating what it recorded.
The three steps are ordered and the stream refuses them out of order (see
StreamCapture); this type is where each
one’s shared half lives.
Implementations§
Source§impl<'a, D: GraphDriver> Window<'a, D>
impl<'a, D: GraphDriver> Window<'a, D>
Sourcepub fn prepare(&mut self, stream_id: StreamId) -> Result<(), ServerError>
pub fn prepare(&mut self, stream_id: StreamId) -> Result<(), ServerError>
Arm the pools for a window about to open, before the warmup run.
Every allocation from here until the window closes is routed into the persistent pool, and which slices are already in use is snapshotted. The pool is warm by the time the window opens, so the run reuses those slices with no device allocation — which mid-capture is illegal. Instantiating pins everything the window added on the graph.
Both pools are armed: the device pool for tensor and kernel-info buffers, and the pinned host pool that stages each kernel’s info bytes to the device, where a fresh allocation mid-capture faults the same way.
§Errors
The stream’s refusal, when it is not in a state a window can open from.
Sourcepub fn begin(&mut self) -> Result<(), ServerError>
pub fn begin(&mut self) -> Result<(), ServerError>
Open the window: from here the driver records every launch issued on this stream until the window closes.
§Errors
The driver’s refusal to begin recording, with the stream left as it was found — retention disarmed, allocation mode restored, capture state back to none — so the whole prepare-then-open sequence can be retried.
Sourcepub fn instantiate(
&mut self,
stream_id: StreamId,
id: GraphId,
) -> Result<Graph<D>, Refused>
pub fn instantiate( &mut self, stream_id: StreamId, id: GraphId, ) -> Result<Graph<D>, Refused>
Close the window and instantiate what it recorded into a graph
registered under id.
The window leaves capture mode first, so none of the paths below can wedge the stream in it — they re-enable the deferred fenced flushes and restore the allocation mode on the way out. A window the caller does not own is closed and torn down all the same, since nobody else is coming back to close it; only its owner gets a graph out of it.
§Errors
Refused, which every failure here becomes — the driver’s refusal to
close or instantiate, a recording an unreadable input left incomplete,
an allocation inside the window, or no window at all. It carries the
memory the caller now has to claim, empty when there was nothing to
close.
Auto Trait Implementations§
impl<'a, D> !UnwindSafe for Window<'a, D>
impl<'a, D> Freeze for Window<'a, D>
impl<'a, D> RefUnwindSafe for Window<'a, D>
impl<'a, D> Send for Window<'a, D>
impl<'a, D> Sync for Window<'a, D>
impl<'a, D> Unpin for Window<'a, D>
impl<'a, D> UnsafeUnpin for Window<'a, D>
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> 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
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