Skip to content

Commit 353b1a7

Browse files
committed
chore: add benchmarks to avoid parsing performance regressions
1 parent 4a4fa0f commit 353b1a7

File tree

5 files changed

+62
-12
lines changed

5 files changed

+62
-12
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gix-object/Cargo.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ rust-version = "1.65"
1212
[lib]
1313
doctest = false
1414

15+
[[bench]]
16+
name = "decode-objects"
17+
harness = false
18+
path = "./benches/decode_objects.rs"
19+
20+
1521
[features]
1622
## Data structures implement `serde::Serialize` and `serde::Deserialize`.
1723
serde = ["dep:serde", "bstr/serde", "smallvec/serde", "gix-hash/serde", "gix-actor/serde"]
@@ -39,6 +45,7 @@ serde = { version = "1.0.114", optional = true, default-features = false, featur
3945
document-features = { version = "0.2.0", optional = true }
4046

4147
[dev-dependencies]
48+
criterion = "0.5.1"
4249
pretty_assertions = "1.0.0"
4350
gix-testtools = { path = "../tests/tools"}
4451

gix-object/benches/decode_objects.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
2+
3+
fn parse_commit(c: &mut Criterion) {
4+
c.bench_function("CommitRef(sig)", |b| {
5+
b.iter(|| black_box(gix_object::CommitRef::from_bytes(COMMIT_WITH_MULTI_LINE_HEADERS)).unwrap())
6+
});
7+
c.bench_function("CommitRefIter(sig)", |b| {
8+
b.iter(|| black_box(gix_object::CommitRefIter::from_bytes(COMMIT_WITH_MULTI_LINE_HEADERS).count()))
9+
});
10+
}
11+
12+
fn parse_tag(c: &mut Criterion) {
13+
c.bench_function("TagRef(sig)", |b| {
14+
b.iter(|| black_box(gix_object::TagRef::from_bytes(TAG_WITH_SIGNATURE)).unwrap())
15+
});
16+
c.bench_function("TagRefIter(sig)", |b| {
17+
b.iter(|| black_box(gix_object::TagRefIter::from_bytes(TAG_WITH_SIGNATURE).count()))
18+
});
19+
}
20+
21+
fn parse_tree(c: &mut Criterion) {
22+
c.bench_function("TreeRef(sig)", |b| {
23+
b.iter(|| black_box(gix_object::TreeRef::from_bytes(TREE)).unwrap())
24+
});
25+
c.bench_function("TreeRefIter(sig)", |b| {
26+
b.iter(|| black_box(gix_object::TreeRefIter::from_bytes(TREE).count()))
27+
});
28+
}
29+
30+
criterion_group!(benches, parse_commit, parse_tag, parse_tree);
31+
criterion_main!(benches);
32+
33+
const COMMIT_WITH_MULTI_LINE_HEADERS: &[u8] = include_bytes!("../tests/fixtures/commit/two-multiline-headers.txt");
34+
const TAG_WITH_SIGNATURE: &[u8] = include_bytes!("../tests/fixtures/tag/signed.txt");
35+
const TREE: &[u8] = include_bytes!("../tests/fixtures/tree/everything.tree");

gix-revision/fuzz/Cargo.lock

Lines changed: 18 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

justfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ clear-target:
1919

2020
# Run cargo clippy on all crates
2121
clippy *clippy-args:
22-
cargo clippy --all --tests --examples -- {{ clippy-args }}
22+
cargo clippy --all --tests --examples --benches -- {{ clippy-args }}
2323
cargo clippy --all --no-default-features --features small -- {{ clippy-args }}
2424
cargo clippy --all --no-default-features --features max-pure -- {{ clippy-args }}
2525
cargo clippy --all --no-default-features --features lean-async --tests -- {{ clippy-args }}

0 commit comments

Comments
 (0)