Skip to content

Commit 4e99795

Browse files
authored
Merge pull request #12 from simd-lite/benchmarks
Add benchmarks for serializing/deserializing simd_json values
2 parents addcab4 + ebdde6a commit 4e99795

2 files changed

Lines changed: 55 additions & 0 deletions

File tree

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ simd-json = '0.6'
2424
[dev-dependencies]
2525
serde_json = "1"
2626
serde = "1"
27+
criterion = "0.4"
2728

2829
[features]
2930
default = ["impl-chrono"]
@@ -39,3 +40,7 @@ features = ["allow-non-simd"]
3940

4041
[[example]]
4142
name = "enum1"
43+
44+
[[bench]]
45+
name = "value"
46+
harness = false

benches/value.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
2+
3+
use simd_json::borrowed::Value as BorrowedValue;
4+
use simd_json::owned::Value as OwnedValue;
5+
use simd_json_derive::Deserialize;
6+
7+
fn json_array_string(length: usize) -> String {
8+
format!(
9+
"[{}]",
10+
(0..length)
11+
.map(|i| i.to_string())
12+
.collect::<Vec<_>>()
13+
.join(",")
14+
)
15+
}
16+
17+
fn deserialize_owned_value_benchmark(c: &mut Criterion) {
18+
let mut group = c.benchmark_group("owned-deserialize-array");
19+
for i in [2_usize, 32, 128, 1024, 4096] {
20+
let input = json_array_string(i);
21+
group.throughput(Throughput::Bytes(input.len() as u64));
22+
group.bench_with_input(BenchmarkId::from_parameter(i), &input, |b, input| {
23+
let mut my_input = input.clone();
24+
b.iter(|| OwnedValue::from_str(my_input.as_mut_str()).expect("shizzle"))
25+
});
26+
}
27+
group.finish();
28+
}
29+
30+
fn deserialize_borrowed_value_benchmark(c: &mut Criterion) {
31+
let mut group = c.benchmark_group("borrowed-deserialize-array");
32+
for i in [2_usize, 32, 128, 1024, 4096] {
33+
let input = json_array_string(i);
34+
group.throughput(Throughput::Bytes(input.len() as u64));
35+
group.bench_with_input(BenchmarkId::from_parameter(i), &input, |b, input| {
36+
let mut my_input = input.clone();
37+
b.iter(|| {
38+
let _x = BorrowedValue::from_str(my_input.as_mut_str()).expect("shizzle");
39+
})
40+
});
41+
}
42+
group.finish();
43+
}
44+
45+
criterion_group!(
46+
benches,
47+
deserialize_owned_value_benchmark,
48+
deserialize_borrowed_value_benchmark
49+
);
50+
criterion_main!(benches);

0 commit comments

Comments
 (0)