fix(text): don't reload cache every redraw

I have >1000 fonts installed. COSMIC has always been somewhat laggy for me, but I had assumed it was just like that for everyone, or was the fault of my T480s. Eventually, when trying to diagnose some hitching, I ended up discovering that cosmic-launcher was consuming on average ~5% total CPU over time, which led me to discover that it was fetching all the fonts from disk and software rendering the fonts, every redraw, causing the high cpu usage *and* the stutters (as a result of hammering disk I/O). Oops.

The fix is simple: just persist the cache across redraws.
This commit is contained in:
Gavin John 2026-05-29 10:47:32 -07:00 committed by Michael Murphy
parent 9c748f1656
commit 590e093086
2 changed files with 12 additions and 4 deletions

View file

@ -308,6 +308,7 @@ pub struct State {
prepare_layer: usize,
cache: BufferCache,
storage: Storage,
swash_cache: cryoglyph::SwashCache,
}
impl State {
@ -352,6 +353,7 @@ impl State {
renderer,
&mut atlas,
&mut self.cache,
&mut self.swash_cache,
text,
layer_bounds * layer_transformation,
layer_transformation * *transformation,
@ -448,6 +450,7 @@ fn prepare(
renderer: &mut cryoglyph::TextRenderer,
atlas: &mut cryoglyph::TextAtlas,
buffer_cache: &mut BufferCache,
swash_cache: &mut cryoglyph::SwashCache,
sections: &[Text],
layer_bounds: Rectangle,
layer_transformation: Transformation,
@ -643,6 +646,6 @@ fn prepare(
atlas,
viewport,
text_areas,
&mut cryoglyph::SwashCache::new(),
swash_cache,
)
}