perf counter macros

This commit is contained in:
2021-10-31 16:12:32 +01:00
parent 33bea8fbc8
commit bee1b66b55
10 changed files with 136 additions and 34 deletions

View File

@@ -1,8 +1,9 @@
use std::{sync::Arc, time::Instant};
use std::sync::Arc;
use std::time::SystemTime;
use cgmath::{Matrix4, SquareMatrix};
use dds::get_block_size;
use rust_engine_proc::perf;
use vulkano::device::physical::PhysicalDevice;
use vulkano::pipeline::viewport::Viewport;
use vulkano::render_pass::{FramebufferAbstract, RenderPass};
@@ -29,6 +30,7 @@ use pipelines::vs;
use winit::window::{Window, WindowBuilder};
use crate::config::RenderConfig;
use crate::perf::PerformanceCounter;
use crate::vulkan::gameobject::GameObject;
use self::mesh::CPUVertexList;
@@ -44,8 +46,6 @@ const VALIDATION_LAYERS: &[&str] = &[
"VK_LAYER_KHRONOS_validation",
];
pub const PERF_COUNTER_SIZE: usize = 1000;
#[derive(Default, Debug, Clone)]
pub struct Vertex {
pub position: [f32; 3],
@@ -114,11 +114,6 @@ pub struct GameData {
pub meshes: Vec<Mesh<Vertex>>,
pub meshes_text: Vec<Mesh<TextVertex>>,
pub textures: Vec<Texture>,
pub update_perf_counters: [u128; PERF_COUNTER_SIZE],
pub render_perf_counters: [u128; PERF_COUNTER_SIZE],
pub other_perf_counters: [u128; PERF_COUNTER_SIZE],
pub other_perf_instant: Instant,
pub performance_counter_index: usize,
}
pub struct VulkanRenderer {
@@ -149,11 +144,6 @@ impl VulkanRenderer {
meshes: vec![],
meshes_text: vec![],
textures: vec![],
update_perf_counters: [0; PERF_COUNTER_SIZE],
render_perf_counters: [0; PERF_COUNTER_SIZE],
other_perf_counters: [0; PERF_COUNTER_SIZE],
performance_counter_index: 0,
other_perf_instant: Instant::now(),
};
// Create basic vulkan instance with layers and info
@@ -342,9 +332,8 @@ impl VulkanRenderer {
Arc::new(builder.build().unwrap())
}
#[perf("renderer", crate::perf::PerformanceCounter)]
pub fn render_loop(self: &mut Self, new_ubo: &vs::ty::ObjectUniformData, game_objects: &Vec<GameObject>) {
let precise_start = Instant::now();
// cleanup previous frame
self.previous_frame_end.as_mut().unwrap().cleanup_finished();
@@ -438,8 +427,6 @@ impl VulkanRenderer {
self.previous_frame_end = Some(Box::new(sync::now(self.device.clone())) as Box<_>);
}
};
self.game_data.render_perf_counters[self.game_data.performance_counter_index] = precise_start.elapsed().as_micros();
}
pub fn upload_mesh(self: &mut Self, mesh: CPUMesh, original_path: Option<String>) -> usize {
@@ -676,6 +663,8 @@ impl VulkanRenderer {
}
pub fn start_event_loop(mut renderer: VulkanRenderer, mut game: Box<dyn Game>, event_loop: EventLoop<()>) {
PerformanceCounter::init_perf();
event_loop.run(move |event, _, control_flow| {
game.on_window_event(&event);
@@ -691,12 +680,12 @@ pub fn start_event_loop(mut renderer: VulkanRenderer, mut game: Box<dyn Game>, e
renderer.recreate_swapchain = true;
},
Event::RedrawRequested(..) => {
PerformanceCounter::perf_next_frame("renderer");
renderer.render_loop(game.get_ubo(), &game.get_game_objects());
renderer.game_data.other_perf_counters[renderer.game_data.performance_counter_index] = renderer.game_data.other_perf_instant.elapsed().as_micros();
renderer.game_data.other_perf_instant = Instant::now();
renderer.game_data.performance_counter_index = (renderer.game_data.performance_counter_index + 1) % PERF_COUNTER_SIZE;
},
Event::MainEventsCleared => {
PerformanceCounter::perf_next_frame("update");
PerformanceCounter::perf_next_frame("input_events");
game.update(&mut renderer);
renderer.surface.window().request_redraw();
},