summaryrefslogtreecommitdiff
path: root/benches
diff options
context:
space:
mode:
Diffstat (limited to 'benches')
-rw-r--r--benches/sheet_benchmark.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/benches/sheet_benchmark.rs b/benches/sheet_benchmark.rs
new file mode 100644
index 0000000..a2a79ed
--- /dev/null
+++ b/benches/sheet_benchmark.rs
@@ -0,0 +1,74 @@
+use std::{env::current_dir, hint::black_box, path::PathBuf};
+
+use criterion::{Criterion, criterion_group, criterion_main};
+use sheet_system::{
+ index_source::IndexSource,
+ mapping::{LocalMapping, LocalMappingForward},
+ sheet::SheetData,
+};
+
+fn sheet_file() -> PathBuf {
+ current_dir().unwrap().join(".temp").join("benchmark.sheet")
+}
+
+fn sheet_benchmark(c: &mut Criterion) {
+ let sheet_file = sheet_file();
+ std::fs::write(&sheet_file, sheet_write(u16::MAX as usize).as_bytes()).unwrap();
+
+ c.bench_function("sheet insert and apply", |b| b.iter(|| sheet_write(25)));
+ c.bench_function("sheet full read", |b| {
+ b.iter(|| sheet_full_read(&sheet_file))
+ });
+ c.bench_function("sheet mmap read", |b| {
+ b.iter(|| sheet_mmap_read(&sheet_file))
+ });
+ c.bench_function("sheet mmap copy read", |b| {
+ b.iter(|| sheet_mmap_copy_read(&sheet_file))
+ });
+ c.bench_function("sheet mmap read x10000", |b| {
+ let mmap = SheetData::mmap(&sheet_file).unwrap();
+ let key = ["docs", "my_file_12.txt"];
+
+ b.iter(|| {
+ for _ in 0..10000 {
+ black_box(mmap.mp_c(&key).unwrap());
+ }
+ })
+ });
+}
+
+fn sheet_write(count: usize) -> SheetData {
+ let mut sheet = SheetData::empty().pack("empty");
+ (0..count).for_each(|n| {
+ sheet
+ .insert_mapping(
+ LocalMapping::new(
+ vec!["docs".to_string(), format!("my_file_{}.txt", n)],
+ IndexSource::new(true, n as u32, 2u16),
+ LocalMappingForward::Latest,
+ )
+ .unwrap(),
+ )
+ .unwrap();
+ });
+ sheet.apply().unwrap();
+ sheet.unpack()
+}
+
+async fn sheet_full_read(path: &PathBuf) {
+ let mut sheet_data = SheetData::empty();
+ sheet_data.full_read(path).await.unwrap();
+}
+
+fn sheet_mmap_read(path: &PathBuf) {
+ let mmap = SheetData::mmap(path).unwrap();
+ mmap.mp(&["docs", "my_file_12.txt"]).unwrap().unwrap();
+}
+
+fn sheet_mmap_copy_read(path: &PathBuf) {
+ let mmap = SheetData::mmap(path).unwrap();
+ mmap.mp_c(&["docs", "my_file_12.txt"]).unwrap().unwrap();
+}
+
+criterion_group!(benches, sheet_benchmark);
+criterion_main!(benches);