- Run fmt

- Use built-in async benching
- Use custom Resize::None when making ratatui images to save some cycles
This commit is contained in:
itsjunetime
2024-06-04 16:50:51 -06:00
parent 5825849434
commit 8feea1127b
9 changed files with 61 additions and 48 deletions
+12 -19
View File
@@ -1,25 +1,19 @@
mod utils;
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use utils::{render_doc, render_first_page};
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
const FILES: [&str; 2] = [
"./benches/example_dictionary.pdf",
"./benches/adobe_example.pdf"
"benches/example_dictionary.pdf",
"benches/adobe_example.pdf"
];
fn render_full(c: &mut Criterion) {
for file in FILES {
c.bench_with_input(
BenchmarkId::new("render_full", file),
&file,
|b, &file| b.iter(||
tokio::runtime::Runtime::new()
.unwrap()
.block_on(render_doc(file))
)
);
c.bench_with_input(BenchmarkId::new("render_full", file), &file, |b, &file| {
b.to_async(tokio::runtime::Runtime::new().unwrap())
.iter(|| render_doc(file))
});
}
}
@@ -28,18 +22,17 @@ fn render_to_first_page(c: &mut Criterion) {
c.bench_with_input(
BenchmarkId::new("render_first_page", file),
&file,
|b, &file| b.iter(||
tokio::runtime::Runtime::new()
.unwrap()
.block_on(render_first_page(file))
)
|b, &file| {
b.to_async(tokio::runtime::Runtime::new().unwrap())
.iter(|| render_first_page(file))
}
);
}
}
criterion_group!(
name = benches;
config = Criterion::default().sample_size(10);
config = Criterion::default().sample_size(40);
targets = render_full, render_to_first_page
);
criterion_main!(benches);
+12 -11
View File
@@ -2,21 +2,24 @@ use std::{hint::black_box, path::Path};
use crossterm::terminal::WindowSize;
use flume::{r#async::RecvStream, unbounded, Sender};
use futures_util::stream::StreamExt as _;
use ratatui::layout::Rect;
use ratatui_image::picker::{Picker, ProtocolType};
use tdf::{converter::{run_conversion_loop, ConvertedPage, ConverterMsg}, renderer::{fill_default, start_rendering, RenderError, RenderInfo, RenderNotif}};
use futures_util::stream::StreamExt as _;
use tdf::{
converter::{run_conversion_loop, ConvertedPage, ConverterMsg},
renderer::{fill_default, start_rendering, RenderError, RenderInfo, RenderNotif}
};
fn handle_renderer_msg(
msg: Result<RenderInfo, RenderError>,
pages: &mut Vec<Option<ConvertedPage>>,
to_converter_tx: &mut Sender<tdf::converter::ConverterMsg>,
to_converter_tx: &mut Sender<tdf::converter::ConverterMsg>
) {
match msg {
Ok(RenderInfo::NumPages(num)) => {
fill_default(pages, num);
to_converter_tx.send(ConverterMsg::NumPages(num)).unwrap();
},
}
Ok(RenderInfo::Page(info)) => to_converter_tx.send(ConverterMsg::AddImg(info)).unwrap(),
Err(e) => panic!("Got error from renderer: {e:?}")
}
@@ -32,13 +35,13 @@ fn handle_converter_msg(
pages[num] = Some(page);
let num_got = pages.iter()
.filter(|p| p.is_some())
.count();
let num_got = pages.iter().filter(|p| p.is_some()).count();
// 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();
to_converter_tx
.send(ConverterMsg::GoToPage(num_got))
.unwrap();
}
struct RenderState {
@@ -66,9 +69,7 @@ fn start_all_rendering(path: impl AsRef<Path>) -> RenderState {
width: columns * font_size.0
};
std::thread::spawn(move || {
start_rendering(str_path, to_main_tx, from_main_rx, size)
});
std::thread::spawn(move || start_rendering(str_path, to_main_tx, from_main_rx, size));
let (to_converter_tx, from_main_rx) = unbounded();
let (to_main_tx, from_converter_rx) = unbounded();