Update protocol_bench.rs

This commit is contained in:
Michael Mikovsky
2026-04-25 12:45:46 -06:00
parent 1f70f99ba6
commit 16164354e3
+45 -23
View File
@@ -1,7 +1,9 @@
use std::hint::black_box; use std::hint::black_box;
use std::time::Instant; use std::time::Instant;
use unshell::protocol::tree::{ChildRoute, Endpoint, Ingress, LeafSpec, LocalEvent, ProtocolEndpoint}; use unshell::protocol::tree::{
ChildRoute, Endpoint, Ingress, LeafSpec, LocalEvent, ProtocolEndpoint,
};
use unshell::protocol::{CallMessage, PacketHeader, PacketType, decode_frame, encode_packet}; use unshell::protocol::{CallMessage, PacketHeader, PacketType, decode_frame, encode_packet};
const SAMPLES: usize = 500; const SAMPLES: usize = 500;
@@ -21,7 +23,10 @@ fn main() {
bench_hook_data_receive(), bench_hook_data_receive(),
]; ];
println!("{:32} {:>14} {:>14} {:>14}", "benchmark", "mean ns/op", "stddev", "samples"); println!(
"{:32} {:>14} {:>14} {:>14}",
"benchmark", "mean ns/op", "stddev", "samples"
);
for bench in benches { for bench in benches {
println!( println!(
"{:32} {:>14.2} {:>14.2} {:>14}", "{:32} {:>14.2} {:>14.2} {:>14}",
@@ -52,7 +57,8 @@ fn bench_encode_call() -> BenchResult {
}; };
run_bench("encode_call", || { run_bench("encode_call", || {
let frame = encode_packet(black_box(&header), black_box(&message)).expect("encode should work"); let frame =
encode_packet(black_box(&header), black_box(&message)).expect("encode should work");
black_box(frame.len()); black_box(frame.len());
}) })
} }
@@ -80,32 +86,48 @@ fn bench_decode_call() -> BenchResult {
} }
fn bench_forward_call_receive() -> BenchResult { fn bench_forward_call_receive() -> BenchResult {
run_prebuilt_bench("forward_call_receive", build_forward_call_cases, |(mut root, frame)| { run_prebuilt_bench(
let outcome = root.receive(&Ingress::Local, frame).expect("forward receive should work"); "forward_call_receive",
black_box(outcome.forward.is_some()); build_forward_call_cases,
}) |(mut root, frame)| {
let outcome = root
.receive(&Ingress::Local, frame)
.expect("forward receive should work");
black_box(outcome.forward.is_some());
},
)
} }
fn bench_local_call_receive() -> BenchResult { fn bench_local_call_receive() -> BenchResult {
run_prebuilt_bench("local_call_receive", build_local_call_cases, |(mut endpoint, frame)| { run_prebuilt_bench(
let outcome = endpoint.receive(&Ingress::Parent, frame).expect("local call should work"); "local_call_receive",
match black_box(outcome.event) { build_local_call_cases,
Some(LocalEvent::Call { .. }) => {} |(mut endpoint, frame)| {
other => panic!("expected local call event, got {other:?}"), let outcome = endpoint
} .receive(&Ingress::Parent, frame)
}) .expect("local call should work");
match black_box(outcome.event) {
Some(LocalEvent::Call { .. }) => {}
other => panic!("expected local call event, got {other:?}"),
}
},
)
} }
fn bench_hook_data_receive() -> BenchResult { fn bench_hook_data_receive() -> BenchResult {
run_prebuilt_bench("hook_data_receive", build_hook_data_cases, |(mut host, frame)| { run_prebuilt_bench(
let outcome = host "hook_data_receive",
.receive(&Ingress::Child(path(&["worker"])), frame) build_hook_data_cases,
.expect("hook data should work"); |(mut host, frame)| {
match black_box(outcome.event) { let outcome = host
Some(LocalEvent::Data { .. }) => {} .receive(&Ingress::Child(path(&["worker"])), frame)
other => panic!("expected local data event, got {other:?}"), .expect("hook data should work");
} match black_box(outcome.event) {
}) Some(LocalEvent::Data { .. }) => {}
other => panic!("expected local data event, got {other:?}"),
}
},
)
} }
fn run_bench(name: &'static str, mut op: impl FnMut()) -> BenchResult { fn run_bench(name: &'static str, mut op: impl FnMut()) -> BenchResult {