summaryrefslogtreecommitdiff
path: root/client/src/scene_prepare.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-18 01:21:46 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-18 01:21:46 +0100
commit0f120ca3eee991566cda704be13b0b1e41dc8d66 (patch)
treecfcf3006a73960f80bc8a9abaeb58c6e7ac1b26d /client/src/scene_prepare.rs
parent6703f1c56605ca7dca8f7fe87b79badb764bd461 (diff)
downloadweareserver-0f120ca3eee991566cda704be13b0b1e41dc8d66.tar
weareserver-0f120ca3eee991566cda704be13b0b1e41dc8d66.tar.bz2
weareserver-0f120ca3eee991566cda704be13b0b1e41dc8d66.tar.zst
more profiler things
Diffstat (limited to 'client/src/scene_prepare.rs')
-rw-r--r--client/src/scene_prepare.rs18
1 files changed, 13 insertions, 5 deletions
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<K, V> {
struct DemandMapState<K, V> {
values: HashMap<K, V>,
needed: HashSet<K>,
+ size_metric: usize,
}
impl<K: Hash + Eq + Clone, V: Clone> DemandMap<K, V> {
pub fn new() -> Self {
@@ -52,6 +54,7 @@ impl<K: Hash + Eq + Clone, V: Clone> DemandMap<K, V> {
inner: DemandMapState {
needed: HashSet::new(),
values: HashMap::new(),
+ size_metric: 0,
}
.into(),
}
@@ -59,10 +62,11 @@ impl<K: Hash + Eq + Clone, V: Clone> DemandMap<K, V> {
pub fn needed(&self) -> Vec<K> {
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<V> {
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::<u32>()) 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::<f32>()) 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<K, V> Widget for &DemandMap<K, V> {
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<K, V> Widget for &DemandMap<K, V> {
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);