diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-18 01:21:46 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-18 01:21:46 +0100 |
commit | 0f120ca3eee991566cda704be13b0b1e41dc8d66 (patch) | |
tree | cfcf3006a73960f80bc8a9abaeb58c6e7ac1b26d /client/src/renderer.rs | |
parent | 6703f1c56605ca7dca8f7fe87b79badb764bd461 (diff) | |
download | weareserver-0f120ca3eee991566cda704be13b0b1e41dc8d66.tar weareserver-0f120ca3eee991566cda704be13b0b1e41dc8d66.tar.bz2 weareserver-0f120ca3eee991566cda704be13b0b1e41dc8d66.tar.zst |
more profiler things
Diffstat (limited to 'client/src/renderer.rs')
-rw-r--r-- | client/src/renderer.rs | 21 |
1 files changed, 18 insertions, 3 deletions
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 <https://www.gnu.org/licenses/>. */ 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<ScenePreparer>, surface_needs_reconfigure: bool, depth: TextureView, + pub timing: TimingProfiler, + pub timing_submit: Arc<Mutex<TimingProfiler>>, } impl<'a> Renderer<'a> { pub fn new(window: &'a Window, downloader: Arc<Downloader>) -> Result<Self> { @@ -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(()) } } |