New shiny benchmarks with iai!

This commit is contained in:
Laurenz 2021-07-13 15:11:06 +02:00
parent 9fe9b95b7f
commit 0481192a77
3 changed files with 45 additions and 2 deletions

View File

@ -11,9 +11,15 @@ layout-cache = ["typst/layout-cache"]
[dev-dependencies]
criterion = { version = "0.3", features = ["html_reports"] }
iai = "0.1"
typst = { path = "..", default-features = false, features = ["fs"] }
[[bench]]
name = "typst"
path = "src/bench.rs"
name = "clock"
path = "src/clock.rs"
harness = false
[[bench]]
name = "parsing"
path = "src/parsing.rs"
harness = false

37
bench/src/parsing.rs Normal file
View File

@ -0,0 +1,37 @@
use iai::{black_box, main};
use typst::diag::Pass;
use typst::parse::{parse, Scanner, TokenMode, Tokens};
use typst::syntax::SyntaxTree;
const SRC: &str = include_str!("../../tests/typ/coma.typ");
fn bench_decode() -> usize {
// We don't use chars().count() because that has a special
// superfast implementation.
let mut count = 0;
let mut chars = black_box(SRC).chars();
while let Some(_) = chars.next() {
count += 1;
}
count
}
fn bench_scan() -> usize {
let mut count = 0;
let mut scanner = Scanner::new(black_box(SRC));
while let Some(_) = scanner.eat() {
count += 1;
}
count
}
fn bench_tokenize() -> usize {
Tokens::new(black_box(SRC), black_box(TokenMode::Markup)).count()
}
fn bench_parse() -> Pass<SyntaxTree> {
parse(black_box(SRC))
}
main!(bench_decode, bench_scan, bench_tokenize, bench_parse);