From 3cb123fbf09e322d1ba9c9b198199e38029694ab Mon Sep 17 00:00:00 2001 From: Alexey <247128645+axkurcom@users.noreply.github.com> Date: Sun, 6 Sep 2026 18:54:17 +0300 Subject: [PATCH] Create web_decoy_fasttrack.rs --- benches/web_decoy_fasttrack.rs | 73 ++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 benches/web_decoy_fasttrack.rs diff --git a/benches/web_decoy_fasttrack.rs b/benches/web_decoy_fasttrack.rs new file mode 100644 index 0000000..653249e --- /dev/null +++ b/benches/web_decoy_fasttrack.rs @@ -0,0 +1,73 @@ +use std::hint::black_box; +use std::sync::atomic::{AtomicU64, Ordering}; + +use base64::Engine as _; +use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main}; + +#[allow(dead_code)] +#[path = "../src/web/http/capability.rs"] +mod capability; + +fn capability_at(index: usize) -> [u8; 32] { + let mut capability = [0xa5u8; 32]; + capability[..8].copy_from_slice(&(index as u64).to_le_bytes()); + capability +} + +fn consume_scan(scan: capability::CapabilityScan) { + black_box(scan.matched.unwrap_u8()); + black_box(scan.matched_index); +} + +fn bench_decoy_fasttrack(c: &mut Criterion) { + for profile_count in [1usize, 32, 256, 1024] { + let capabilities = (0..profile_count).map(capability_at).collect::>(); + let miss = [0x5au8; 32]; + let first = capabilities[0]; + let middle = capabilities[profile_count / 2]; + let last = capabilities[profile_count - 1]; + let telemetry = AtomicU64::new(0); + let mut group = c.benchmark_group(format!("web_decoy_fasttrack/{profile_count}")); + + group.bench_function(BenchmarkId::new("ordinary_enforce", profile_count), |b| { + b.iter(|| { + let candidate = capability::bridge_candidate(black_box(None)); + telemetry.fetch_add(1, Ordering::Relaxed); + black_box(candidate.is_canonical()); + }); + }); + group.bench_function(BenchmarkId::new("ordinary_shadow", profile_count), |b| { + b.iter(|| { + let candidate = capability::bridge_candidate(black_box(None)); + telemetry.fetch_add(1, Ordering::Relaxed); + consume_scan(capability::scan_capabilities( + black_box(&capabilities), + candidate.scan_bytes(), + )); + }); + }); + for (name, candidate) in [ + ("canonical_miss", miss), + ("canonical_hit_first", first), + ("canonical_hit_middle", middle), + ("canonical_hit_last", last), + ] { + let token = base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(candidate); + let query = format!("bridge={token}"); + group.bench_function(BenchmarkId::new(name, profile_count), |b| { + b.iter(|| { + let candidate = capability::bridge_candidate(black_box(Some(&query))); + telemetry.fetch_add(1, Ordering::Relaxed); + consume_scan(capability::scan_capabilities( + black_box(&capabilities), + candidate.scan_bytes(), + )); + }); + }); + } + group.finish(); + } +} + +criterion_group!(benches, bench_decoy_fasttrack); +criterion_main!(benches);