Add end-to-end typesetting benchmark 🖊

This commit is contained in:
Laurenz 2020-08-19 20:51:36 +02:00
parent 77dac270a8
commit fd9959fd04
3 changed files with 53 additions and 21 deletions

View File

@ -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

View File

@ -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);

50
benches/benchmarks.rs Normal file
View File

@ -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<DynProvider>;
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);