mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-25 18:59:48 +00:00
2048a18e53
Co-authored-by: LabDennis <341377186+LabDennis@users.noreply.github.com>
30 lines
1.4 KiB
Rust
30 lines
1.4 KiB
Rust
//! Synthetic search microbenchmark, including normalization and glyph-range mapping.
|
|
//! Run with `cargo run -p pdfcraft-render --example search_bench --locked` on both revisions
|
|
//! with the same toolchain/profile. Timings are diagnostic, never a CI deadline.
|
|
use pdfcraft_render::{PageText, TextGlyph};
|
|
use std::{hint::black_box, time::Instant};
|
|
|
|
fn main() {
|
|
for (name, text, query) in [
|
|
("repeated prefix", "a".repeat(131072), format!("{}b", "a".repeat(4095))),
|
|
("ordinary", "The quick brown fox jumps over the lazy dog. ".repeat(3000), "brown fox".into()),
|
|
("unicode", "İSTANBUL κόσμος Straße العربية 日本語 ".repeat(3000), "istanbul".into()),
|
|
] {
|
|
let glyphs: Vec<_> =
|
|
text.chars().map(|c| TextGlyph { text: c.to_string(), rect: [0.0; 4], quad: [[0.0; 2]; 4], direction: [1.0, 0.0] }).collect();
|
|
let n = glyphs.len();
|
|
let page = PageText { glyphs, line_of: vec![0; n], space_before: vec![false; n] };
|
|
black_box(page.find(&query));
|
|
let mut times = Vec::new();
|
|
for _ in 0..7 {
|
|
let start = Instant::now();
|
|
black_box(page.find(black_box(&query)));
|
|
times.push(start.elapsed().as_secs_f64() * 1000.0);
|
|
}
|
|
times.sort_by(f64::total_cmp);
|
|
if let Some(median) = times.get(3) {
|
|
println!("{name}: median {median:.3} ms (7 runs, {n} glyphs)");
|
|
}
|
|
}
|
|
}
|