pub struct FrameTimer {
pub histogram: FrameHistogram,
pub mode: FrameTimerMode,
/* private fields */
}Expand description
GPU frame timer with CPU fallback.
Record the start of a frame with FrameTimer::begin_frame and the end
with FrameTimer::end_frame. After each frame the duration is pushed to
the internal FrameHistogram. Call
FrameTimer::recommend_present_mode to get an adaptive present-mode
suggestion.
When TIMESTAMP_QUERY is available, a QuerySet with two entries is used
for sub-millisecond GPU-side measurements. Otherwise, CPU Instant is
used as a coarser fallback.
Fields§
§histogram: FrameHistogramThe rolling frame-time histogram.
mode: FrameTimerModeHow this timer measures time.
Implementations§
Source§impl FrameTimer
impl FrameTimer
Sourcepub fn new(device: &Device, queue: &Queue, target_fps: u32) -> Self
pub fn new(device: &Device, queue: &Queue, target_fps: u32) -> Self
Create a new frame timer.
If device.features() contains TIMESTAMP_QUERY, GPU-side timing is
used. Otherwise, the timer falls back to CPU Instant.
target_fps is used to compute target_frame for the present-mode
heuristic. Pass 60 for a standard 60 Hz target.
Sourcepub fn begin_frame(&mut self, encoder: &mut CommandEncoder)
pub fn begin_frame(&mut self, encoder: &mut CommandEncoder)
Record the start of a frame.
In GPU mode, encoder should be the first encoder for the frame.
In CPU fallback mode, encoder is ignored.
Sourcepub fn end_frame(&mut self, encoder: &mut CommandEncoder)
pub fn end_frame(&mut self, encoder: &mut CommandEncoder)
Record the end of a frame.
In GPU mode, encoder should be the last encoder for the frame (after
all render passes). Call resolve after submitting the encoder to
copy the timestamps to the readback buffer.
Sourcepub fn resolve_timestamps(&mut self, encoder: &mut CommandEncoder)
pub fn resolve_timestamps(&mut self, encoder: &mut CommandEncoder)
Resolve GPU timestamps to the readback buffer.
Call this in a separate encoder submitted immediately after the frame encoder. The resolve copy is a GPU operation that must follow the write_timestamp commands in the previous encoder.
No-op in CPU fallback mode or if no GPU query is pending.
Sourcepub fn collect_gpu_timestamps(&mut self, device: &Device)
pub fn collect_gpu_timestamps(&mut self, device: &Device)
Read back the GPU timestamps (if available) and update the histogram.
Must be called after the resolve encoder has been submitted and the
GPU has completed (e.g. after device.poll(Wait)).
No-op in CPU fallback mode or if no GPU query is pending.
Sourcepub fn recommend_present_mode(&self) -> PresentModeRecommendation
pub fn recommend_present_mode(&self) -> PresentModeRecommendation
Recommend a wgpu::PresentMode based on the recent frame-time histogram.
Requires at least 4 samples to make a recommendation; returns Fifo
until then.
Auto Trait Implementations§
impl !RefUnwindSafe for FrameTimer
impl !UnwindSafe for FrameTimer
impl Freeze for FrameTimer
impl Send for FrameTimer
impl Sync for FrameTimer
impl Unpin for FrameTimer
impl UnsafeUnpin for FrameTimer
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> 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