Skip to content

Commit

Permalink
Retain text measurements as long as original entries
Browse files Browse the repository at this point in the history
  • Loading branch information
hecrj committed Jun 27, 2023
1 parent 975eebf commit 00859c2
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 33 deletions.
34 changes: 18 additions & 16 deletions tiny_skia/src/text.rs
Original file line number Diff line number Diff line change
Expand Up @@ -388,14 +388,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) {
Expand All @@ -421,11 +417,19 @@ impl Cache {

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,
);
}
}
}

Expand All @@ -438,10 +442,8 @@ impl Cache {
if self.trim_count > Self::TRIM_INTERVAL {
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();

Expand Down
35 changes: 18 additions & 17 deletions wgpu/src/text.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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,
);
}
}
}

Expand All @@ -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();
}
Expand Down

0 comments on commit 00859c2

Please sign in to comment.