Make image Cache eviction strategy less aggressive in iced_wgpu
Instead of trimming unconditionally at the end of a frame, we now trim the cache only when there is a cache miss. This way, images that are not visible but still a part of the layout will stay cached. Eviction will only happen when the images are not a part of the UI for two consectuive frames.
This commit is contained in:
parent
fdcec03197
commit
493c36ac71
6 changed files with 41 additions and 5 deletions
|
|
@ -37,6 +37,7 @@ pub struct Cache {
|
|||
rasterized: FxHashMap<(u64, u32, u32, ColorFilter), atlas::Entry>,
|
||||
svg_hits: FxHashSet<u64>,
|
||||
rasterized_hits: FxHashSet<(u64, u32, u32, ColorFilter)>,
|
||||
should_trim: bool,
|
||||
}
|
||||
|
||||
type ColorFilter = Option<[u8; 4]>;
|
||||
|
|
@ -76,6 +77,8 @@ impl Cache {
|
|||
}
|
||||
}
|
||||
|
||||
self.should_trim = true;
|
||||
|
||||
let _ = self.svgs.insert(handle.id(), svg);
|
||||
self.svgs.get(&handle.id()).unwrap()
|
||||
}
|
||||
|
|
@ -176,6 +179,10 @@ impl Cache {
|
|||
|
||||
/// Load svg and upload raster data
|
||||
pub fn trim(&mut self, atlas: &mut Atlas) {
|
||||
if !self.should_trim {
|
||||
return;
|
||||
}
|
||||
|
||||
let svg_hits = &self.svg_hits;
|
||||
let rasterized_hits = &self.rasterized_hits;
|
||||
|
||||
|
|
@ -191,6 +198,7 @@ impl Cache {
|
|||
});
|
||||
self.svg_hits.clear();
|
||||
self.rasterized_hits.clear();
|
||||
self.should_trim = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue