Struct webgpu::poll_thread::Poller
source · pub(crate) struct Poller {
work_count: Arc<AtomicUsize>,
is_done: Arc<AtomicBool>,
handle: Option<JoinHandle<()>>,
lock: Arc<Mutex<()>>,
}
Expand description
Polls devices while there is something to poll.
This objects corresponds to a thread that parks itself when there is no work,
waiting on it, and then calls poll_all_devices
repeatedly to block.
The thread dies when this object is dropped, and all work in submission is done.
§Example
let token = self.poller.token(); // create a new token
let callback = SubmittedWorkDoneClosure::from_rust(Box::from(move || {
drop(token); // drop token as closure has been fired
// ...
}));
let result = gfx_select!(queue_id => global.queue_on_submitted_work_done(queue_id, callback));
self.poller.wake(); // wake poller thread to actually poll
Fields§
§work_count: Arc<AtomicUsize>
The number of closures that still needs to be fired. When this is 0, the thread can park itself.
is_done: Arc<AtomicBool>
True if thread should die after all work in submission is done
handle: Option<JoinHandle<()>>
Handle to the WGPU poller thread (to be used for unparking the thread)
lock: Arc<Mutex<()>>
Lock for device maintain calls (in poll_all_devices and queue_submit)
This is workaround for wgpu deadlocks: https://github.com/gfx-rs/wgpu/issues/5572
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Poller
impl !RefUnwindSafe for Poller
impl Send for Poller
impl Sync for Poller
impl Unpin for Poller
impl !UnwindSafe for Poller
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> 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>
Converts
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>
Converts
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