From 0f120ca3eee991566cda704be13b0b1e41dc8d66 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 18 Jan 2025 01:21:46 +0100 Subject: more profiler things --- client/src/renderer.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'client/src/renderer.rs') diff --git a/client/src/renderer.rs b/client/src/renderer.rs index b4c2c05..2777526 100644 --- a/client/src/renderer.rs +++ b/client/src/renderer.rs @@ -15,14 +15,15 @@ along with this program. If not, see . */ use crate::{ - camera::Camera, download::Downloader, scene_prepare::ScenePreparer, - scene_render::ScenePipeline, state::InputState, ui::UiRenderer, + camera::Camera, download::Downloader, interfaces::profiler::TimingProfiler, + scene_prepare::ScenePreparer, scene_render::ScenePipeline, state::InputState, ui::UiRenderer, }; use anyhow::{Result, anyhow}; use log::{info, warn}; use pollster::FutureExt; use std::{ - sync::Arc, + mem::swap, + sync::{Arc, Mutex}, thread::{sleep, spawn}, time::Duration, }; @@ -45,6 +46,8 @@ pub struct Renderer<'a> { pub scene_prepare: Arc, surface_needs_reconfigure: bool, depth: TextureView, + pub timing: TimingProfiler, + pub timing_submit: Arc>, } impl<'a> Renderer<'a> { pub fn new(window: &'a Window, downloader: Arc) -> Result { @@ -138,6 +141,8 @@ impl<'a> Renderer<'a> { surface_configuration, ui_renderer, surface_needs_reconfigure: false, + timing: Default::default(), + timing_submit: Default::default(), }) } @@ -172,6 +177,7 @@ impl<'a> Renderer<'a> { camera: &Camera, input_state: &mut InputState, ) -> Result<()> { + self.timing.begin("prepare"); if self.surface_needs_reconfigure { self.surface .configure(&self.device, &self.surface_configuration); @@ -192,6 +198,7 @@ impl<'a> Renderer<'a> { let projection = camera.to_matrix(); + self.timing.checkpoint("draw scene"); self.scene_pipeline.draw( &mut commands, &target_view, @@ -201,6 +208,7 @@ impl<'a> Renderer<'a> { projection, ); + self.timing.checkpoint("draw ui"); self.ui_renderer.draw( &mut commands, &target_view, @@ -210,11 +218,18 @@ impl<'a> Renderer<'a> { &self.surface_configuration, ); + self.timing.checkpoint("submit"); let i = self.queue.submit(Some(commands.finish())); + self.timing.checkpoint("poll"); self.device.poll(MaintainBase::WaitForSubmissionIndex(i)); + self.timing.checkpoint("present"); target.present(); + self.timing.checkpoint(""); + + let mut ts = self.timing_submit.lock().unwrap(); + swap(&mut *ts, &mut self.timing); Ok(()) } } -- cgit v1.2.3-70-g09d2