From aae1f9d37b442dfbbb2e488afbcb304b4390e554 Mon Sep 17 00:00:00 2001 From: itsjunetime Date: Fri, 21 Feb 2025 20:56:25 -0700 Subject: [PATCH] Improve performance by better pre-allocating pixmap buffer --- Cargo.lock | 54 ++++++++++++++++++++++++------------------------ benches/utils.rs | 8 +++---- src/renderer.rs | 6 +++--- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 50d8266..3c0030d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,9 +52,9 @@ checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" [[package]] name = "arbitrary" @@ -349,9 +349,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.14" +version = "1.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" +checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" dependencies = [ "jobserver", "libc", @@ -1614,9 +1614,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.25" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "loop9" @@ -1724,9 +1724,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", "simd-adler32", @@ -1754,7 +1754,7 @@ dependencies = [ "mupdf-sys", "num_enum", "once_cell", - "zerocopy 0.8.19", + "zerocopy 0.8.20", ] [[package]] @@ -1766,7 +1766,7 @@ dependencies = [ "cc", "pkg-config", "regex", - "zerocopy 0.8.19", + "zerocopy 0.8.20", ] [[package]] @@ -2492,9 +2492,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ "bitflags 2.8.0", ] @@ -2647,18 +2647,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", @@ -2667,9 +2667,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ "itoa", "memchr", @@ -3332,9 +3332,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1f41ffb7cf259f1ecc2876861a17e7142e63ead296f671f81f6ae85903e0d6" +checksum = "93d59ca99a559661b96bf898d8fce28ed87935fd2bea9f05983c1464dd6c71b1" dependencies = [ "atomic", "getrandom 0.3.1", @@ -3801,9 +3801,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" +checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] @@ -3864,11 +3864,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8207f485579465f62ae51a983e42c906736a17efd2de48b021e64f1bbd8e98c7" +checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" dependencies = [ - "zerocopy-derive 0.8.19", + "zerocopy-derive 0.8.20", ] [[package]] @@ -3884,9 +3884,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dbe1304a711c6eb4cf1ed333aa0d9b344685e71f6f00c3b176072213bd3783e" +checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" dependencies = [ "proc-macro2", "quote", diff --git a/benches/utils.rs b/benches/utils.rs index 64f4b7a..b50e394 100644 --- a/benches/utils.rs +++ b/benches/utils.rs @@ -37,13 +37,13 @@ pub fn handle_converter_msg( pages[num] = Some(page); - let num_got = pages.iter().filter(|p| p.is_some()).count(); + let first_none = pages.iter().position(Option::is_none); // we have to tell it to jump to a certain page so that it will actually render it (since // it only renders fanning out from the page that we currently have selected) - to_converter_tx - .send(ConverterMsg::GoToPage(num_got)) - .unwrap(); + if let Some(first) = first_none { + to_converter_tx.send(ConverterMsg::GoToPage(first)).unwrap(); + } } pub struct RenderState { diff --git a/src/renderer.rs b/src/renderer.rs index df17f65..dc81b74 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -276,9 +276,9 @@ pub fn start_rendering( rendered.contained_term = Some(ctx.result_rects.is_empty()); rendered.successful = true; - let cap = (ctx.pixmap.width() - * ctx.pixmap.height() * u32::from(ctx.pixmap.n())) - as usize; + let w = ctx.pixmap.width(); + let h = ctx.pixmap.height(); + let cap = (w * h * u32::from(ctx.pixmap.n())) as usize + 16; let mut pixels = Vec::with_capacity(cap); if let Err(e) = ctx.pixmap.write_to(&mut pixels, mupdf::ImageFormat::PNM) { sender.send(Err(RenderError::Doc(e)))?;