use criterion::{Criterion, criterion_group, criterion_main}; use epoll_perf::{ DrainPolicy, ServerConfig, ServerModel, client::{ClientConfig, ClientPool}, }; use std::time::{Duration, Instant}; static BASIC_CLIENT_CONFIG: ClientConfig = ClientConfig { num_clients: 10, payload_size: 1024, writes_per_client: 2048, addr: None, }; fn bench_single_consumer(c: &mut Criterion) { let server = ServerConfig { bind_addr: "127.0.0.1:0".parse().unwrap(), model: ServerModel::SingleThread, edge_triggered: false, drain_policy: DrainPolicy::UntilWouldBlock, event_buffer_size: 1024, } .start(); let client = ClientPool::spawn(&ClientConfig { addr: Some(server.addr), ..BASIC_CLIENT_CONFIG }); c.bench_function("single_consumer", |b| { b.iter_custom(|iters| { let mut total = Duration::ZERO; for _i in 0..iters { // reset server/client/timer server.reset(); client.reset(); let start = Instant::now(); // wait for completion client.wait(); while server.processed_bytes() < client.total_bytes() { std::hint::spin_loop(); } // tally result total += start.elapsed(); } total }); }); server.shutdown(); } criterion_group!(epoll_benches, bench_single_consumer); criterion_main!(epoll_benches);