summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-08-19 20:51:36 +0200
committerLaurenz <laurmaedje@gmail.com>2020-08-19 20:51:36 +0200
commitfd9959fd04739c1dab2ea1a899a17c94e0892103 (patch)
tree91d3a5d65d2a5ff0d98f92007c5a0ecee70eb527
parent77dac270a8a99f24a6fc0eb9e92256bcc07c586c (diff)
Add end-to-end typesetting benchmark 🖊
-rw-r--r--Cargo.toml5
-rw-r--r--benches/bench_parsing.rs19
-rw-r--r--benches/benchmarks.rs50
3 files changed, 53 insertions, 21 deletions
diff --git a/Cargo.toml b/Cargo.toml
index d13c5d6f..f6a0def9 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 4a8a7eb2..00000000
--- 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 00000000..f8e0d4b7
--- /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<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);