52 lines
1.5 KiB
Rust
52 lines
1.5 KiB
Rust
//! Repeatable wire-encoding baseline: `cargo bench -p hemx-core --bench wire`.
|
|
|
|
use hemx_core::{
|
|
BuildFingerprint, Effect, EffectBatch, Payload, ResourceId, ResourceKind, ResourceRef,
|
|
EFFECT_BATCH_ABI_VERSION,
|
|
};
|
|
use std::hint::black_box;
|
|
use std::time::Instant;
|
|
|
|
const ITERATIONS: u32 = 100_000;
|
|
const ROUNDS: usize = 7;
|
|
|
|
fn representative_batch() -> EffectBatch {
|
|
let target = ResourceRef::unscoped(ResourceId::new(ResourceKind::Slot, 42));
|
|
let ops = (0..50)
|
|
.map(|index| Effect::Put {
|
|
target: target.clone(),
|
|
payload: Payload::Text(format!("item-{index}-{}", "x".repeat(64))),
|
|
})
|
|
.collect();
|
|
EffectBatch {
|
|
abi_version: EFFECT_BATCH_ABI_VERSION,
|
|
fingerprint: BuildFingerprint(7),
|
|
ops,
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let batch = representative_batch();
|
|
for _ in 0..10_000 {
|
|
black_box(batch.to_wire());
|
|
}
|
|
|
|
let mut nanos_per_batch = [0_u128; ROUNDS];
|
|
let mut checksum = 0_usize;
|
|
for round in &mut nanos_per_batch {
|
|
let start = Instant::now();
|
|
for _ in 0..ITERATIONS {
|
|
let bytes = black_box(&batch).to_wire();
|
|
checksum = checksum.wrapping_add(black_box(bytes.len()));
|
|
}
|
|
*round = start.elapsed().as_nanos() / u128::from(ITERATIONS);
|
|
}
|
|
nanos_per_batch.sort_unstable();
|
|
|
|
println!(
|
|
"median_ns_per_batch={} wire_len={} checksum={checksum}",
|
|
nanos_per_batch[ROUNDS / 2],
|
|
batch.encoded_len(),
|
|
);
|
|
}
|