Revision control
Copy as Markdown
Other Tools
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright by contributors to this project.
// SPDX-License-Identifier: (Apache-2.0 OR MIT)
use criterion::{BatchSize, BenchmarkId, Criterion, Throughput};
use mls_rs::test_utils::benchmarks::load_group_states;
use mls_rs::CipherSuite;
use rand::RngCore;
fn bench(c: &mut Criterion) {
let cipher_suite = CipherSuite::CURVE25519_AES128;
let group_states = load_group_states(cipher_suite).pop().unwrap();
let mut bytes = vec![0; 1000000];
rand::thread_rng().fill_bytes(&mut bytes);
let bytes = &bytes;
let mut n = 100;
let mut bench_group = c.benchmark_group("group_application");
while n <= 1000000 {
bench_group.throughput(Throughput::Bytes(n as u64));
bench_group.bench_with_input(
BenchmarkId::new(format!("{cipher_suite:?}"), n),
&n,
|b, _| {
b.iter_batched_ref(
|| group_states.clone(),
move |group_states| {
let msg = group_states
.sender
.encrypt_application_message(&bytes[..n], vec![])
.unwrap();
group_states.receiver.process_incoming_message(msg).unwrap();
},
BatchSize::SmallInput,
)
},
);
n *= 10;
}
bench_group.finish();
}
criterion::criterion_group!(benches, bench);
criterion::criterion_main!(benches);