mirror of
https://github.com/helix-editor/helix
synced 2026-08-01 13:32:19 +02:00
60 lines
2.0 KiB
Rust
60 lines
2.0 KiB
Rust
//! Benchmarks for the word index.
|
|
|
|
use std::hint::black_box;
|
|
|
|
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
|
|
use helix_core::Rope;
|
|
use helix_view::handlers::word_index::bench;
|
|
|
|
/// See `texts/README`. These texts are used in unicode-segmentation's benchmarks.
|
|
const CORPORA: &[(&str, &str)] = &[
|
|
("arabic", include_str!("texts/arabic.txt")),
|
|
("english", include_str!("texts/english.txt")),
|
|
("hindi", include_str!("texts/hindi.txt")),
|
|
("japanese", include_str!("texts/japanese.txt")),
|
|
("korean", include_str!("texts/korean.txt")),
|
|
("mandarin", include_str!("texts/mandarin.txt")),
|
|
("russian", include_str!("texts/russian.txt")),
|
|
("source_code", include_str!("texts/source_code.txt")),
|
|
];
|
|
|
|
/// Just extracting words from a rope (i.e. the hot path).
|
|
fn words(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("words");
|
|
for (name, text) in CORPORA {
|
|
let rope = Rope::from_str(text);
|
|
group.throughput(Throughput::Bytes(text.len() as u64));
|
|
group.bench_with_input(BenchmarkId::from_parameter(name), &rope, |b, rope| {
|
|
b.iter(|| {
|
|
let mut count = 0usize;
|
|
for word in bench::words(black_box(rope.slice(..))) {
|
|
black_box(word);
|
|
count += 1;
|
|
}
|
|
count
|
|
});
|
|
});
|
|
}
|
|
group.finish();
|
|
}
|
|
|
|
/// End-to-end extraction plus hashing / locking / inserting.
|
|
fn add_document(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("add_document");
|
|
for (name, text) in CORPORA {
|
|
let rope = Rope::from_str(text);
|
|
group.throughput(Throughput::Bytes(text.len() as u64));
|
|
group.bench_with_input(BenchmarkId::from_parameter(name), &rope, |b, rope| {
|
|
b.iter(|| {
|
|
let index = bench::WordIndex::default();
|
|
bench::add_document(&index, black_box(rope));
|
|
index
|
|
});
|
|
});
|
|
}
|
|
group.finish();
|
|
}
|
|
|
|
criterion_group!(benches, words, add_document);
|
|
criterion_main!(benches);
|