use std::sync::Arc;
use criterion::{criterion_group, criterion_main, Criterion};
use dag_executor::storage::{Durability, FileStorage, Storage};
use tokio::runtime::Runtime;
fn bench_persistence(c: &mut Criterion) {
let rt = Runtime::new().unwrap();
let payload = serde_json::json!({ "data": "x".repeat(1024) });
let mut group = c.benchmark_group("state_persistence");
for (name, mode) in [
("save_1kb_fast", Durability::Fast),
("save_1kb_atomic", Durability::Atomic),
("save_1kb_durable", Durability::Durable),
] {
let dir = tempfile::tempdir().unwrap();
let storage = Arc::new(FileStorage::open_with(dir.path(), mode).unwrap());
group.bench_function(name, |b| {
b.iter(|| {
rt.block_on(storage.save("bench-key", &payload)).unwrap();
});
});
}
let dir = tempfile::tempdir().unwrap();
let storage = Arc::new(FileStorage::open(dir.path()).unwrap());
group.bench_function("load_1kb", |b| {
rt.block_on(storage.save("bench-key", &payload)).unwrap();
b.iter(|| {
rt.block_on(storage.load("bench-key")).unwrap();
});
});
group.finish();
}
criterion_group!(benches, bench_persistence);
criterion_main!(benches);