pub struct GpuProfiler { /* private fields */ }Implementations§
Source§impl GpuProfiler
impl GpuProfiler
Sourcepub fn new(context: Arc<GraphicsContext>, max_queries: u32) -> Self
pub fn new(context: Arc<GraphicsContext>, max_queries: u32) -> Self
Sourcepub fn begin_frame(&mut self)
pub fn begin_frame(&mut self)
Begin a new frame.
Call this at the start of each frame before recording any regions.
Sourcepub fn begin_region(
&mut self,
encoder: &mut CommandEncoder,
label: &str,
) -> Option<ProfileRegion>
pub fn begin_region( &mut self, encoder: &mut CommandEncoder, label: &str, ) -> Option<ProfileRegion>
Sourcepub fn end_region(
&mut self,
encoder: &mut CommandEncoder,
region: ProfileRegion,
)
pub fn end_region( &mut self, encoder: &mut CommandEncoder, region: ProfileRegion, )
End a profiling region.
§Arguments
encoder- Command encoder to write the timestampregion- The region handle frombegin_region
Sourcepub fn resolve(&self, encoder: &mut CommandEncoder)
pub fn resolve(&self, encoder: &mut CommandEncoder)
Resolve all queries from this frame.
Call this after all regions have been recorded, before submitting commands.
Sourcepub fn read_results(&mut self) -> &[(String, f64)]
pub fn read_results(&mut self) -> &[(String, f64)]
Read profiling results synchronously.
This blocks until the results are available from the GPU. For non-blocking reads, consider using double-buffering or reading results from the previous frame.
§Returns
A vector of (label, duration_ms) pairs for each completed region.
Sourcepub fn try_read_results(&mut self) -> &[(String, f64)]
pub fn try_read_results(&mut self) -> &[(String, f64)]
Try to read profiling results without blocking.
Returns None if the results are not yet available. This is useful when you want to display results from the previous frame.
§Returns
Some reference to the cached results if new data was read, or the existing cached results.
Sourcepub fn queries_used(&self) -> u32
pub fn queries_used(&self) -> u32
Get the number of queries used this frame.
Sourcepub fn max_queries(&self) -> u32
pub fn max_queries(&self) -> u32
Get the maximum queries per frame.
Sourcepub fn timestamp_period(&self) -> f32
pub fn timestamp_period(&self) -> f32
Get the timestamp period in nanoseconds per tick.
Trait Implementations§
Source§impl RenderCapability for GpuProfiler
High-level GPU profiler for measuring execution times.
impl RenderCapability for GpuProfiler
High-level GPU profiler for measuring execution times.
This profiler uses timestamp queries to measure GPU execution time for different regions of your rendering code.
§Requirements
- Device must support
TIMESTAMP_QUERYfeature - Must call
begin_frame()at the start of each frame - Must call
resolve()before submitting commands
§Example
let mut profiler = GpuProfiler::new(context.clone(), 256);
// Each frame:
profiler.begin_frame();
let region = profiler.begin_region(&mut encoder, "My Pass");
// ... do rendering ...
profiler.end_region(&mut encoder, region);
profiler.resolve(&mut encoder);
// Read results (may be from previous frame)
for (label, duration_ms) in profiler.read_results() {
println!("{}: {:.2}ms", label, duration_ms);
}Source§fn requirements() -> GpuRequirements
fn requirements() -> GpuRequirements
Auto Trait Implementations§
impl Freeze for GpuProfiler
impl !RefUnwindSafe for GpuProfiler
impl Send for GpuProfiler
impl Sync for GpuProfiler
impl Unpin for GpuProfiler
impl !UnwindSafe for GpuProfiler
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
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>. Box<dyn Any> can
then be further downcast into Box<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>. Rc<Any> 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> DowncastSync for T
impl<T> DowncastSync for T
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