mirror of
https://github.com/typst/typst
synced 2025-06-28 08:12:53 +08:00
Move benchmarks into separate crate ♾
So that CI does not have to build criterion each time.
This commit is contained in:
parent
e30d896c7b
commit
b4f809f1ea
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@
|
||||
/target
|
||||
**/*.rs.bk
|
||||
Cargo.lock
|
||||
bench/target
|
||||
tests/png
|
||||
tests/pdf
|
||||
_things
|
||||
|
12
Cargo.toml
12
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
|
||||
|
16
bench/Cargo.toml
Normal file
16
bench/Cargo.toml
Normal file
@ -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
|
@ -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));
|
||||
let layouts = 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)))
|
||||
});
|
||||
// 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);
|
Loading…
x
Reference in New Issue
Block a user