diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-26 22:22:53 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-26 22:22:53 +0100 |
commit | 724e6e4d97f608282e891742565b1036f3e970d5 (patch) | |
tree | d75c43703c55ff35a8dd7f01960812f5b147d683 /client/src/render/scene/demand_map.rs | |
parent | f0b213d51ee7b44362b5618bf5bd1eacf50d2bb8 (diff) | |
download | weareserver-724e6e4d97f608282e891742565b1036f3e970d5.tar weareserver-724e6e4d97f608282e891742565b1036f3e970d5.tar.bz2 weareserver-724e6e4d97f608282e891742565b1036f3e970d5.tar.zst |
graphics config
Diffstat (limited to 'client/src/render/scene/demand_map.rs')
-rw-r--r-- | client/src/render/scene/demand_map.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/client/src/render/scene/demand_map.rs b/client/src/render/scene/demand_map.rs index 16fa181..c27eaac 100644 --- a/client/src/render/scene/demand_map.rs +++ b/client/src/render/scene/demand_map.rs @@ -25,7 +25,7 @@ pub struct DemandMap<K, V> { inner: RwLock<DemandMapState<K, V>>, } struct DemandMapState<K, V> { - values: HashMap<K, V>, + values: HashMap<K, (V, usize)>, needed: HashSet<K>, size_metric: usize, } @@ -46,18 +46,30 @@ impl<K: Hash + Eq + Clone, V: Clone> DemandMap<K, 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); + if let Some((_, old_size)) = s.values.insert(key, (value, size)) { + s.size_metric -= old_size; + } s.size_metric += size; } pub fn try_get(&self, key: K) -> Option<V> { let mut s = self.inner.write().unwrap(); - if let Some(k) = s.values.get(&key) { + if let Some((k, _)) = s.values.get(&key) { Some(k.to_owned()) } else { s.needed.insert(key); None } } + pub fn regenerate_all(&self) { + let mut s = self.inner.write().unwrap(); + let keys = s.values.keys().cloned().collect::<Vec<_>>(); + s.needed.extend(keys); + } + pub fn clear(&self) { + let mut s = self.inner.write().unwrap(); + s.values.clear(); + s.size_metric = 0; + } } impl<K, V> Widget for &DemandMap<K, V> { |