diff --git a/crates/render/src/images.rs b/crates/render/src/images.rs index f9f82ac31..8ae0691c7 100644 --- a/crates/render/src/images.rs +++ b/crates/render/src/images.rs @@ -250,9 +250,9 @@ pub(crate) fn warm(wants: Vec) -> usize { *held.entry((k.0, k.1)).or_default() += size_of(&e.pm); } } - let in_view = held.values().sum::(); // Smaller levels alone don't make an asset cached. held.retain(|k, _| c.map.contains_key(&(k.0, k.1, 0))); + let in_view = held.values().sum::(); for k in index.keys() { if c.bad.contains_key(k) { held.entry(*k).or_default(); @@ -278,7 +278,9 @@ pub(crate) fn warm(wants: Vec) -> usize { continue; } pixels = total; - jobs.push((decoding, wanted)); + // The estimate covers the decoded image and its converted pixels; leave headroom for + // temporary buffers inside individual format decoders. + jobs.push((decoding.saturating_mul(3) / 2, wanted)); } if jobs.len() < 2 { return 0;