#![allow(missing_docs, clippy::doc_markdown, clippy::expect_used)]
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use matter_codec::{Tag, TlvWriter};
use matter_interaction::{build_list_write_chunks, AttributePath};
fn element(len: usize) -> Vec<u8> {
let mut buf = Vec::new();
let mut w = TlvWriter::new(&mut buf);
w.put_bytes(Tag::Anonymous, &vec![0xAB; len])
.expect("vec writer");
buf
}
fn bench_write_chunks(c: &mut Criterion) {
let path = AttributePath {
endpoint: 0,
cluster: 0x001F,
attribute: 0,
};
let elems: Vec<Vec<u8>> = (0..100).map(|_| element(64)).collect();
c.bench_function("write_chunks/100x64B/budget900", |b| {
b.iter(|| black_box(build_list_write_chunks(path, black_box(&elems), 900, false)));
});
c.bench_function("write_chunks/100x64B/single_chunk", |b| {
b.iter(|| {
black_box(build_list_write_chunks(
path,
black_box(&elems),
1 << 16,
false,
));
});
});
}
criterion_group!(benches, bench_write_chunks);
criterion_main!(benches);