summaryrefslogtreecommitdiff
path: root/client/src/renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/renderer.rs')
-rw-r--r--client/src/renderer.rs21
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(())
}
}