diff --git a/CHANGELOG.md b/CHANGELOG.md index f10ae1f..6c052e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Move `ratatui-image/vb64` support under `nightly` feature, enabled by default - Fixed a bug where jumping to a page out of range could result in weird `esc` key behavior - Added CI ([#31](https://github.com/itsjunetime/tdf/pull/31), thank you [@Kriejstal](https://github.com/Kreijstal)) +- Changed global allocator to [`mimalloc`](https://github.com/purpleprotocol/mimalloc_rust) for slightly improved performance # v0.1.0 diff --git a/Cargo.lock b/Cargo.lock index 93ce78f..2ab1193 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -168,7 +168,7 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tower 0.5.1", "tower-layer", "tower-service", @@ -189,7 +189,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", ] @@ -945,9 +945,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", @@ -1141,7 +1141,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.1", + "hashbrown 0.15.2", ] [[package]] @@ -1244,9 +1244,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" @@ -1294,9 +1294,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.164" +version = "0.2.166" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" [[package]] name = "libfuzzer-sys" @@ -1308,6 +1308,16 @@ dependencies = [ "cc", ] +[[package]] +name = "libmimalloc-sys" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "libredox" version = "0.1.3" @@ -1356,7 +1366,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.1", + "hashbrown 0.15.2", ] [[package]] @@ -1390,6 +1400,15 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "mimalloc" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" +dependencies = [ + "libmimalloc-sys", +] + [[package]] name = "mime" version = "0.3.17" @@ -1718,9 +1737,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -2218,9 +2237,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", @@ -2235,9 +2254,9 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" [[package]] name = "system-deps" @@ -2285,6 +2304,7 @@ dependencies = [ "glib", "image", "itertools 0.13.0", + "mimalloc", "notify", "poppler-rs", "ratatui", @@ -2517,9 +2537,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2528,9 +2548,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", @@ -2539,9 +2559,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -2570,9 +2590,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-segmentation" diff --git a/Cargo.toml b/Cargo.toml index 71e3679..90224e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,7 @@ glib = "0.20.0" itertools = "*" flume = { version = "0.11.0", default-features = false, features = ["async"] } xflags = "0.4.0-pre.2" +mimalloc = "0.1.43" # for tracing with tokio-console console-subscriber = { version = "0.4.0", optional = true } diff --git a/benches/rendering.rs b/benches/rendering.rs index 1b72e00..0655dc2 100644 --- a/benches/rendering.rs +++ b/benches/rendering.rs @@ -71,7 +71,7 @@ pub async fn render_first_page(path: impl AsRef) { } = start_all_rendering(path); // we only want to render until the first page is ready to be printed - while pages.iter().all(|p| p.is_none()) { + while pages.iter().all(Option::is_none) { tokio::select! { Some(renderer_msg) = from_render_rx.next() => { handle_renderer_msg(renderer_msg, &mut pages, &mut to_converter_tx); @@ -101,7 +101,7 @@ async fn render_all_files(path: &'static str) -> Vec { } }; - if pages.iter().all(|p| p.is_some()) { + if pages.iter().all(Option::is_some) { break; } } @@ -136,7 +136,7 @@ async fn convert_all_files(files: Vec) { } } - while converted.iter().any(|p| p.is_none()) { + while converted.iter().any(Option::is_none) { let page = from_converter_rx .next() .await @@ -157,7 +157,7 @@ impl Profiler for CpuProfiler { fn start_profiling(&mut self, benchmark_id: &str, _: &std::path::Path) { let file = format!( "./{}-{}.profile", - benchmark_id.replace("/", "-"), + benchmark_id.replace('/', "-"), SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() diff --git a/src/lib.rs b/src/lib.rs index 18baad9..d7b9ba6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,6 @@ +#[global_allocator] +static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; + pub mod converter; pub mod renderer; pub mod skip; diff --git a/src/main.rs b/src/main.rs index 5db3133..1c430e3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,6 @@ use std::{ path::PathBuf }; -use converter::{run_conversion_loop, ConvertedPage, ConverterMsg}; use crossterm::{ execute, terminal::{ @@ -17,13 +16,11 @@ use glib::{LogField, LogLevel, LogWriterOutput}; use notify::{Event, EventKind, RecursiveMode, Watcher}; use ratatui::{backend::CrosstermBackend, Terminal}; use ratatui_image::picker::Picker; -use renderer::{RenderError, RenderInfo, RenderNotif}; -use tui::{InputAction, Tui}; - -mod converter; -mod renderer; -mod skip; -mod tui; +use tdf::{ + converter::{run_conversion_loop, ConvertedPage, ConverterMsg}, + renderer::{self, RenderError, RenderInfo, RenderNotif}, + tui::{InputAction, Tui} +}; // Dummy struct for easy errors in main #[derive(Debug)] @@ -143,7 +140,7 @@ async fn main() -> Result<(), Box> { || "Unknown file".into(), |n| n.to_string_lossy().to_string() ); - let mut tui = tui::Tui::new(file_name, flags.max_wide, flags.r_to_l.unwrap_or_default()); + let mut tui = Tui::new(file_name, flags.max_wide, flags.r_to_l.unwrap_or_default()); let backend = CrosstermBackend::new(std::io::stdout()); let mut term = Terminal::new(backend)?; @@ -161,7 +158,7 @@ async fn main() -> Result<(), Box> { )?; enable_raw_mode()?; - let mut main_area = tui::Tui::main_layout(&term.get_frame()); + let mut main_area = Tui::main_layout(&term.get_frame()); tui_tx.send(RenderNotif::Area(main_area[1]))?; let mut tui_rx = tui_rx.into_stream(); @@ -259,7 +256,7 @@ fn on_notify_ev( // happened, then like the main thread has panicked or something, so it doesn't matter // we don't handle the error here. EventKind::Other | EventKind::Any | EventKind::Create(_) | EventKind::Modify(_) => - drop(to_render_tx.send(renderer::RenderNotif::Reload)), + drop(to_render_tx.send(RenderNotif::Reload)), } } } diff --git a/src/renderer.rs b/src/renderer.rs index 62a52ee..2a23b91 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -76,13 +76,11 @@ pub fn start_rendering( ) -> Result<(), SendError>> { // first, wait 'til we get told what the current starting area is so that we can set it to // know what to render to - let mut area; - loop { + let mut area = loop { if let RenderNotif::Area(r) = receiver.recv().unwrap() { - area = r; - break; + break r; } - } + }; // We want this outside of 'reload so that if the doc reloads, the search term that somebody // set will still get highlighted in the reloaded doc