use psi_detector::{DetectorBuilder, ProtocolType, ProtocolDetector};
use std::time::Instant;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🚀 PSI-Detector 性能测试 - 验证优化效果");
println!("{}", "=".repeat(60));
let detector = DetectorBuilder::new()
.enable_http()
.build()?;
let test_cases = vec![
("HTTP/1.1 GET", b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n".to_vec()),
("HTTP/2 Preface", b"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n".to_vec()),
("TLS ClientHello", vec![
0x16, 0x03, 0x01, 0x00, 0x2f, 0x01, 0x00, 0x00, 0x2b, 0x03, 0x03, ]),
("QUIC Long Header", vec![
0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
]),
("WebSocket Upgrade",
b"GET /chat HTTP/1.1\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n\r\n".to_vec()),
("Random Data", vec![0x42; 100]),
];
println!("⏱️ 预热阶段...");
for _ in 0..10 {
for (_, data) in &test_cases {
let _ = detector.detect(data);
}
}
println!("🔥 性能测试开始...\n");
let iterations = 1000;
let mut total_time = std::time::Duration::new(0, 0);
let mut success_count = 0;
for (name, data) in &test_cases {
print!("测试 {:<20} ... ", name);
let start = Instant::now();
let mut local_success = 0;
for _ in 0..iterations {
match detector.detect(data) {
Ok(_) => local_success += 1,
Err(_) => {} }
}
let elapsed = start.elapsed();
total_time += elapsed;
success_count += local_success;
let avg_time = elapsed.as_nanos() / iterations as u128;
let success_rate = (local_success as f64 / iterations as f64) * 100.0;
println!("平均 {:>6} ns/次, 成功率 {:>5.1}%", avg_time, success_rate);
}
println!("\n📊 总体性能统计:");
println!(" 总耗时: {:?}", total_time);
println!(" 平均每次检测: {:.2} μs", total_time.as_micros() as f64 / (iterations * test_cases.len()) as f64);
println!(" 总成功检测: {}/{}", success_count, iterations * test_cases.len());
println!(" 吞吐量: {:.0} 检测/秒", (iterations * test_cases.len()) as f64 / total_time.as_secs_f64());
println!("\n💾 内存优化验证:");
println!(" ✅ 预分配结果容器 (Vec::with_capacity)");
println!(" ✅ 避免重复探测器运行");
println!(" ✅ 快速失败策略");
println!(" ✅ 优化字符串搜索算法");
println!("\n⚡ CPU优化验证:");
println!(" ✅ 修复重复start_time变量");
println!(" ✅ 减少超时检查频率");
println!(" ✅ 高置信度提前退出");
println!(" ✅ Boyer-Moore风格模式匹配");
Ok(())
}