diff --git a/Cargo.toml b/Cargo.toml index d13c5d6f5..f6a0def9d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,6 +34,7 @@ required-features = ["fs"] harness = false [[bench]] -name = "bench-parsing" -path = "benches/bench_parsing.rs" +name = "benchmarks" +path = "benches/benchmarks.rs" +required-features = ["fs"] harness = false diff --git a/benches/bench_parsing.rs b/benches/bench_parsing.rs deleted file mode 100644 index 4a8a7eb2d..000000000 --- a/benches/bench_parsing.rs +++ /dev/null @@ -1,19 +0,0 @@ -use criterion::{criterion_group, criterion_main, Criterion}; -use typstc::syntax::parsing::parse; - -// 28 not too dense lines. -const COMA: &str = include_str!("../tests/coma.typ"); - -fn parsing_benchmark(c: &mut Criterion) { - c.bench_function("parse-coma-28-lines", |b| { - b.iter(|| parse(COMA)) - }); - - let long = COMA.repeat(100); - c.bench_function("parse-coma-2800-lines", |b| { - b.iter(|| parse(&long)) - }); -} - -criterion_group!(benches, parsing_benchmark); -criterion_main!(benches); diff --git a/benches/benchmarks.rs b/benches/benchmarks.rs new file mode 100644 index 000000000..f8e0d4b7e --- /dev/null +++ b/benches/benchmarks.rs @@ -0,0 +1,50 @@ +use std::cell::RefCell; +use std::rc::Rc; + +use criterion::{criterion_group, criterion_main, Criterion}; +use fontdock::fs::{FsIndex, FsProvider}; +use fontdock::FontLoader; + +use typstc::font::DynProvider; +use typstc::syntax::parsing::parse; +use typstc::Typesetter; + +const FONT_DIR: &str = "fonts"; + +// 28 not too dense lines. +const COMA: &str = include_str!("../tests/coma.typ"); + +fn parsing_benchmark(c: &mut Criterion) { + c.bench_function("parse-coma-28-lines", |b| { + b.iter(|| parse(COMA)) + }); + + let long = COMA.repeat(100); + c.bench_function("parse-coma-2800-lines", |b| { + b.iter(|| parse(&long)) + }); +} + +fn typesetting_benchmark(c: &mut Criterion) { + let mut index = FsIndex::new(); + index.search_dir(FONT_DIR); + + let (descriptors, files) = index.clone().into_vecs(); + let provider = FsProvider::new(files.clone()); + let dynamic = Box::new(provider) as Box; + let loader = FontLoader::new(dynamic, descriptors); + let loader = Rc::new(RefCell::new(loader)); + let typesetter = Typesetter::new(loader.clone()); + + c.bench_function("typeset-coma-28-lines", |b| { + b.iter(|| futures_executor::block_on(typesetter.typeset(COMA))) + }); + + let long = COMA.repeat(100); + c.bench_function("typeset-coma-2800-lines", |b| { + b.iter(|| futures_executor::block_on(typesetter.typeset(&long))) + }); +} + +criterion_group!(benches, parsing_benchmark, typesetting_benchmark); +criterion_main!(benches);