summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-11-25 19:28:04 +0100
committerLaurenz <laurmaedje@gmail.com>2020-11-25 19:28:04 +0100
commitb4f809f1ea8a469d0bdee225f47d7f09bc22aa61 (patch)
tree93a186e98a278588b42d61fdbe814151f3e6fce7
parente30d896c7b871b1588925cadd10808c65e93d511 (diff)
Move benchmarks into separate crate ♾
So that CI does not have to build criterion each time.
-rw-r--r--.gitignore1
-rw-r--r--Cargo.toml12
-rw-r--r--bench/Cargo.toml16
-rw-r--r--bench/src/bench.rs (renamed from benches/benchmarks.rs)29
4 files changed, 37 insertions, 21 deletions
diff --git a/.gitignore b/.gitignore
index 064a0a81..e4e7a1be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
/target
**/*.rs.bk
Cargo.lock
+bench/target
tests/png
tests/pdf
_things
diff --git a/Cargo.toml b/Cargo.toml
index f92114d8..b7c3055f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,6 +4,9 @@ version = "0.1.0"
authors = ["The Typst Project Developers"]
edition = "2018"
+[workspace]
+members = ["bench"]
+
[features]
default = ["fs", "anyhow"]
fs = ["fontdock/fs"]
@@ -23,7 +26,6 @@ serde = { version = "1", features = ["derive"], optional = true }
anyhow = { version = "1", optional = true }
[dev-dependencies]
-criterion = "0.3"
memmap = "0.7"
tiny-skia = "0.2"
@@ -33,9 +35,6 @@ opt-level = 2
[profile.release]
lto = true
-[lib]
-bench = false
-
[[bin]]
name = "typst"
required-features = ["fs", "anyhow"]
@@ -44,8 +43,3 @@ required-features = ["fs", "anyhow"]
name = "typeset"
required-features = ["fs"]
harness = false
-
-[[bench]]
-name = "benchmarks"
-required-features = ["fs"]
-harness = false
diff --git a/bench/Cargo.toml b/bench/Cargo.toml
new file mode 100644
index 00000000..25a112a1
--- /dev/null
+++ b/bench/Cargo.toml
@@ -0,0 +1,16 @@
+[package]
+name = "typst-bench"
+version = "0.0.1"
+authors = ["The Typst Project Developers"]
+edition = "2018"
+publish = false
+
+[dependencies]
+fontdock = { path = "../../fontdock" }
+typst = { path = ".." }
+criterion = "0.3"
+
+[[bench]]
+name = "typst"
+path = "src/bench.rs"
+harness = false
diff --git a/benches/benchmarks.rs b/bench/src/bench.rs
index ea37ff0f..e004c5ce 100644
--- a/benches/benchmarks.rs
+++ b/bench/src/bench.rs
@@ -5,16 +5,21 @@ use criterion::{criterion_group, criterion_main, Criterion};
use fontdock::fs::{FsIndex, FsSource};
use typst::eval::{eval, State};
+use typst::export::pdf;
use typst::font::FontLoader;
use typst::layout::layout;
use typst::parse::parse;
use typst::typeset;
const FONT_DIR: &str = "fonts";
-const COMA: &str = include_str!("../tests/typ/coma.typ");
+const COMA: &str = include_str!("../../tests/typ/coma.typ");
fn benchmarks(c: &mut Criterion) {
- let state = State::default();
+ macro_rules! bench {
+ ($name:literal: $($tts:tt)*) => {
+ c.bench_function($name, |b| b.iter(|| $($tts)*));
+ };
+ }
let mut index = FsIndex::new();
index.search_dir(FONT_DIR);
@@ -25,18 +30,18 @@ fn benchmarks(c: &mut Criterion) {
descriptors,
)));
+ // Prepare intermediate results and run warm.
+ let state = State::default();
let tree = parse(COMA).output;
let document = eval(&tree, state.clone()).output;
- let _ = layout(&document, Rc::clone(&loader));
-
- c.bench_function("parse-coma", |b| b.iter(|| parse(COMA)));
- c.bench_function("eval-coma", |b| b.iter(|| eval(&tree, state.clone())));
- c.bench_function("layout-coma", |b| {
- b.iter(|| layout(&document, Rc::clone(&loader)))
- });
- c.bench_function("typeset-coma", |b| {
- b.iter(|| typeset(COMA, state.clone(), Rc::clone(&loader)))
- });
+ let layouts = layout(&document, Rc::clone(&loader));
+
+ // Bench!
+ bench!("parse-coma": parse(COMA));
+ bench!("eval-coma": eval(&tree, state.clone()));
+ bench!("layout-coma": layout(&document, Rc::clone(&loader)));
+ bench!("typeset-coma": typeset(COMA, state.clone(), Rc::clone(&loader)));
+ bench!("export-pdf-coma": pdf::export(&layouts, &loader.borrow()));
}
criterion_group!(benches, benchmarks);