pub struct FrameStats {Show 18 fields
pub total_objects: u32,
pub visible_objects: u32,
pub culled_objects: u32,
pub draw_calls: u32,
pub instanced_batches: u32,
pub triangles_submitted: u64,
pub shadow_draw_calls: u32,
pub cpu_prepare_ms: f32,
pub gpu_frame_ms: Option<f32>,
pub total_frame_ms: f32,
pub render_scale: f32,
pub missed_budget: bool,
pub upload_bytes: u64,
pub gpu_culling_active: bool,
pub gpu_visible_instances: Option<u32>,
pub shadows_skipped: bool,
pub volume_quality_reduced: bool,
pub effects_throttled: bool,
}Expand description
Per-frame rendering statistics returned by crate::ViewportRenderer::prepare.
Fields§
§total_objects: u32Total objects considered for rendering.
visible_objects: u32Objects that passed visibility and frustum tests.
culled_objects: u32Objects culled by frustum or visibility.
draw_calls: u32Number of draw calls issued in the main pass.
instanced_batches: u32Number of instanced batches (0 when using per-object path).
triangles_submitted: u64Total triangles submitted to the GPU.
shadow_draw_calls: u32Number of draw calls in the shadow pass.
cpu_prepare_ms: f32CPU time spent in prepare(), in milliseconds.
gpu_frame_ms: Option<f32>GPU scene-pass time in milliseconds, if timestamp queries are available.
Measured with TIMESTAMP_QUERY around the main scene render pass.
None on backends that do not support TIMESTAMP_QUERY (e.g. WebGL).
Note: this value reflects the previous frame’s GPU cost due to async readback. The value lags by one frame and should not be used by the adaptation controller across mode transitions.
total_frame_ms: f32Wall-clock duration since the previous prepare() call, in milliseconds.
Approximates the full frame interval. Zero on the first frame.
render_scale: f32Current internal render scale (1.0 = native resolution).
Reflects the value tracked by the adaptation controller. Values below 1.0
cause the scene to render into a scaled intermediate texture that is
bilinearly upscaled to the surface (requires allow_dynamic_resolution).
missed_budget: boolTrue if the last frame exceeded the target frame budget.
Requires target_fps to be set in the PerformancePolicy. Always
false when no target is configured.
upload_bytes: u64Bytes of geometry data uploaded to the GPU since the previous
prepare() call.
Counts full buffer reallocations triggered by
crate::ViewportGpuResources::replace_mesh_data and initial uploads
via upload_mesh_data / upload_mesh. Uniform buffer writes are not
counted.
gpu_culling_active: boolTrue when GPU-driven culling is active this frame.
False when the device does not support INDIRECT_FIRST_INSTANCE or
culling has been disabled via disable_gpu_driven_culling().
gpu_visible_instances: Option<u32>Number of instances that passed GPU culling and were submitted for drawing.
Populated only when gpu_culling_active is true. None on the first frame
or when GPU culling is off. Lags by one frame due to async readback.
shadows_skipped: boolTrue when the shadow depth pass was skipped this frame.
Set when allow_shadow_reduction is true and the previous frame missed
the target budget. Always false in RuntimeMode::Capture.
volume_quality_reduced: boolTrue when volume raymarch step size was doubled this frame.
Set when allow_volume_quality_reduction is true and the previous frame
missed the target budget. Always false in RuntimeMode::Capture.
effects_throttled: boolTrue when SSAO, contact shadows, and bloom were skipped this frame.
Set when allow_effect_throttling is true and the previous frame missed
the target budget. Always false in RuntimeMode::Capture.
Trait Implementations§
Source§impl Clone for FrameStats
impl Clone for FrameStats
Source§fn clone(&self) -> FrameStats
fn clone(&self) -> FrameStats
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FrameStats
impl Debug for FrameStats
Source§impl Default for FrameStats
impl Default for FrameStats
Source§fn default() -> FrameStats
fn default() -> FrameStats
impl Copy for FrameStats
Auto Trait Implementations§
impl Freeze for FrameStats
impl RefUnwindSafe for FrameStats
impl Send for FrameStats
impl Sync for FrameStats
impl Unpin for FrameStats
impl UnsafeUnpin for FrameStats
impl UnwindSafe for FrameStats
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> 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<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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.