diff options
author | 2023-06-28 01:27:09 +0200 | |
---|---|---|
committer | 2023-06-28 01:27:09 +0200 | |
commit | 00859c25f576b399871de74f0b9399d074deea35 (patch) | |
tree | b530ef68f1424dc7a6ef52af0ecf5291750632fd /wgpu/src/text.rs | |
parent | 975eebfc6251539d154183f7d3cc69c41a96b156 (diff) | |
download | iced-00859c25f576b399871de74f0b9399d074deea35.tar.gz iced-00859c25f576b399871de74f0b9399d074deea35.tar.bz2 iced-00859c25f576b399871de74f0b9399d074deea35.zip |
Retain text measurements as long as original entries
Diffstat (limited to 'wgpu/src/text.rs')
-rw-r--r-- | wgpu/src/text.rs | 35 |
1 files changed, 18 insertions, 17 deletions
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(); } |