From 00859c25f576b399871de74f0b9399d074deea35 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 28 Jun 2023 01:27:09 +0200 Subject: Retain text measurements as long as original entries --- wgpu/src/text.rs | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'wgpu/src/text.rs') diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index b11b91c1..1b94edf6 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -385,14 +385,10 @@ impl Cache { ) -> (KeyHash, &mut Entry) { let hash = key.hash(self.hasher.build_hasher()); - if let Some(measured_hash) = self.measurements.get(&hash) { - let _ = self.recently_used.insert(hash); - let _ = self.recently_used.insert(*measured_hash); + if let Some(hash) = self.measurements.get(&hash) { + let _ = self.recently_used.insert(*hash); - return ( - *measured_hash, - self.entries.get_mut(measured_hash).unwrap(), - ); + return (*hash, self.entries.get_mut(hash).unwrap()); } if let hash_map::Entry::Vacant(entry) = self.entries.entry(hash) { @@ -415,14 +411,21 @@ impl Cache { ); let bounds = measure(&buffer); - let _ = entry.insert(Entry { buffer, bounds }); - if key.bounds != bounds { - let _ = self.measurements.insert( - Key { bounds, ..key }.hash(self.hasher.build_hasher()), - hash, - ); + for bounds in [ + bounds, + Size { + width: key.bounds.width, + ..bounds + }, + ] { + if key.bounds != bounds { + let _ = self.measurements.insert( + Key { bounds, ..key }.hash(self.hasher.build_hasher()), + hash, + ); + } } } @@ -434,10 +437,8 @@ impl Cache { fn trim(&mut self) { self.entries .retain(|key, _| self.recently_used.contains(key)); - self.measurements.retain(|key, value| { - self.recently_used.contains(key) - || self.recently_used.contains(value) - }); + self.measurements + .retain(|_, value| self.recently_used.contains(value)); self.recently_used.clear(); } -- cgit