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/scene_prepare.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'client/src/scene_prepare.rs') diff --git a/client/src/scene_prepare.rs b/client/src/scene_prepare.rs index cee55f7..5c5102d 100644 --- a/client/src/scene_prepare.rs +++ b/client/src/scene_prepare.rs @@ -17,6 +17,7 @@ use crate::download::Downloader; use anyhow::Result; use egui::{Grid, Widget}; +use humansize::DECIMAL; use image::ImageReader; use log::debug; use std::{ @@ -45,6 +46,7 @@ pub struct DemandMap { struct DemandMapState { values: HashMap, needed: HashSet, + size_metric: usize, } impl DemandMap { pub fn new() -> Self { @@ -52,6 +54,7 @@ impl DemandMap { inner: DemandMapState { needed: HashSet::new(), values: HashMap::new(), + size_metric: 0, } .into(), } @@ -59,10 +62,11 @@ impl DemandMap { pub fn needed(&self) -> Vec { self.inner.read().unwrap().needed.iter().cloned().collect() } - pub fn insert(&self, key: K, value: V) { + pub fn insert(&self, key: K, value: V, size: usize) { let mut s = self.inner.write().unwrap(); s.needed.remove(&key); s.values.insert(key, value); + s.size_metric += size; } pub fn try_get(&self, key: K) -> Option { let mut s = self.inner.write().unwrap(); @@ -127,7 +131,7 @@ impl ScenePreparer { } } if rprefab.0.len() == prefab.mesh.len() { - self.prefabs.insert(pres.clone(), Arc::new(rprefab)); + self.prefabs.insert(pres.clone(), Arc::new(rprefab), 0); debug!("prefab created ({pres})"); num_done += 1; } @@ -149,6 +153,7 @@ impl ScenePreparer { self.index_buffers.insert( pres.clone(), (Arc::new(buffer), (buf.len() / size_of::()) as u32), + buf.len(), ); debug!( "index buffer created (len={}, took {:?}) {pres}", @@ -173,6 +178,7 @@ impl ScenePreparer { self.vertex_buffers.insert( pres.clone(), (Arc::new(buffer), (buf.len() / size_of::()) as u32), + buf.len(), ); debug!( "vertex attribute buffer created (len={}, took {:?}) {pres}", @@ -198,7 +204,7 @@ impl ScenePreparer { dims.0, dims.1, ); - self.textures.insert(pres.clone(), tex_bg); + self.textures.insert(pres.clone(), tex_bg, image.len()); debug!( "texture created (res={}x{}, took {:?})", dims.0, @@ -218,7 +224,7 @@ impl ScenePreparer { 1, 1, ); - self.placeholder_textures.insert(variant, tex_bg); + self.placeholder_textures.insert(variant, tex_bg, 4); num_done += 1; } for pres in self.mesh_parts.needed() { @@ -294,6 +300,7 @@ impl ScenePreparer { tex_normal, double_sided: part.g_double_sided.is_some(), }), + 0, ); num_done += 1; } @@ -361,6 +368,7 @@ impl Widget for &DemandMap { let state = self.inner.read().unwrap(); ui.label(state.needed.len().to_string()); ui.label(state.values.len().to_string()); + ui.label(humansize::format_size(state.size_metric, DECIMAL)); ui.end_row(); ui.response() } @@ -369,7 +377,7 @@ impl Widget for &DemandMap { impl Widget for &ScenePreparer { fn ui(self, ui: &mut egui::Ui) -> egui::Response { Grid::new("sp") - .num_columns(3) + .num_columns(4) .show(ui, |ui| { ui.label("prefabs"); self.prefabs.ui(ui); -- cgit v1.2.3-70-g09d2