Skip to content

Commit 63c3ba9

Browse files
authored
tls_coded: remove measuring allocs in benchmarks (#1657)
Benches now use [`iter_batched_ref`] with provided buffers when serializing and returned buffers when deserializing. This avoids measuring allocations. [`iter_batched_ref`]: https://docs.rs/criterion/0.5.1/criterion/struct.Bencher.html#method.iter_batched_ref
1 parent 579ec92 commit 63c3ba9

File tree

2 files changed

+52
-69
lines changed

2 files changed

+52
-69
lines changed

tls_codec/benches/quic_vec.rs

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,70 @@
11
use criterion::{criterion_group, criterion_main};
22
use criterion::{BatchSize, Criterion};
33

4+
use tls_codec::*;
5+
6+
/// Length of the test bytes vector.
7+
const N: usize = 0xFFFF;
8+
49
fn vector(c: &mut Criterion) {
5-
use tls_codec::*;
610
c.bench_function("TLS Serialize VL Vector", |b| {
7-
b.iter_batched(
8-
|| vec![77u8; 65535],
9-
|long_vector| {
10-
let _serialized_long_vec = long_vector.tls_serialize_detached().unwrap();
11-
},
11+
b.iter_batched_ref(
12+
|| (vec![77u8; N], Vec::with_capacity(8 + N)),
13+
|(long_vec, buf)| Serialize::tls_serialize(long_vec, buf).unwrap(),
1214
BatchSize::SmallInput,
1315
)
1416
});
1517
c.bench_function("TLS Deserialize VL Vector", |b| {
16-
b.iter_batched(
18+
b.iter_batched_ref(
1719
|| {
18-
let long_vector = vec![77u8; 65535];
19-
long_vector.tls_serialize_detached().unwrap()
20+
let long_vec = vec![77u8; N];
21+
long_vec.tls_serialize_detached().unwrap()
2022
},
2123
|serialized_long_vec| {
22-
let _deserialized_long_vec =
23-
Vec::<u8>::tls_deserialize(&mut serialized_long_vec.as_slice()).unwrap();
24+
Vec::<u8>::tls_deserialize(&mut serialized_long_vec.as_slice()).unwrap()
2425
},
2526
BatchSize::SmallInput,
2627
)
2728
});
2829
}
2930

3031
fn byte_vector(c: &mut Criterion) {
31-
use tls_codec::*;
3232
c.bench_function("TLS Serialize VL Byte Vector", |b| {
33-
b.iter_batched(
34-
|| VLBytes::new(vec![77u8; 65535]),
35-
|long_vector| {
36-
let _serialized_long_vec = long_vector.tls_serialize_detached().unwrap();
37-
},
33+
b.iter_batched_ref(
34+
|| (VLBytes::new(vec![77u8; N]), Vec::with_capacity(8 + N)),
35+
|(long_vec, buf)| Serialize::tls_serialize(long_vec, buf).unwrap(),
3836
BatchSize::SmallInput,
3937
)
4038
});
4139
c.bench_function("TLS Deserialize VL Byte Vector", |b| {
42-
b.iter_batched(
40+
b.iter_batched_ref(
4341
|| {
44-
let long_vector = vec![77u8; 65535];
45-
VLByteSlice(&long_vector).tls_serialize_detached().unwrap()
42+
let long_vec = vec![77u8; N];
43+
VLByteSlice(&long_vec).tls_serialize_detached().unwrap()
4644
},
4745
|serialized_long_vec| {
48-
let _deserialized_long_vec =
49-
VLBytes::tls_deserialize(&mut serialized_long_vec.as_slice()).unwrap();
46+
VLBytes::tls_deserialize(&mut serialized_long_vec.as_slice()).unwrap()
5047
},
5148
BatchSize::SmallInput,
5249
)
5350
});
5451
}
5552

5653
fn byte_slice(c: &mut Criterion) {
57-
use tls_codec::*;
5854
c.bench_function("TLS Serialize VL Byte Slice", |b| {
59-
b.iter_batched(
60-
|| vec![77u8; 65535],
61-
|long_vector| {
62-
let _serialized_long_vec =
63-
VLByteSlice(&long_vector).tls_serialize_detached().unwrap();
64-
},
55+
b.iter_batched_ref(
56+
|| (vec![77u8; N], Vec::with_capacity(8 + N)),
57+
|(long_vec, buf)| VLByteSlice(long_vec).tls_serialize(buf).unwrap(),
6558
BatchSize::SmallInput,
6659
)
6760
});
6861
}
6962

7063
fn slice(c: &mut Criterion) {
71-
use tls_codec::*;
7264
c.bench_function("TLS Serialize VL Slice", |b| {
73-
b.iter_batched(
74-
|| vec![77u8; 65535],
75-
|long_vector| {
76-
let _serialized_long_vec = long_vector.tls_serialize_detached().unwrap();
77-
},
65+
b.iter_batched_ref(
66+
|| (vec![77u8; N], Vec::with_capacity(8 + N)),
67+
|(long_vec, buf)| Serialize::tls_serialize(&long_vec.as_slice(), buf).unwrap(),
7868
BatchSize::SmallInput,
7969
)
8070
});

tls_codec/benches/tls_vec.rs

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
use criterion::{criterion_group, criterion_main};
22
use criterion::{BatchSize, Criterion};
33

4+
/// Length of the test bytes vector.
5+
const N: usize = 0xFFFF;
6+
47
fn vector(c: &mut Criterion) {
58
use tls_codec::*;
69
c.bench_function("TLS Serialize Vector", |b| {
7-
b.iter_batched(
8-
|| TlsVecU32::from(vec![77u8; 65535]),
9-
|long_vector| {
10-
let _serialized_long_vec = long_vector.tls_serialize_detached().unwrap();
11-
},
10+
b.iter_batched_ref(
11+
|| (TlsVecU32::from(vec![77u8; N]), Vec::with_capacity(8 + N)),
12+
|(long_vec, buf)| long_vec.tls_serialize(buf).unwrap(),
1213
BatchSize::SmallInput,
1314
)
1415
});
1516
c.bench_function("TLS Deserialize Vector", |b| {
16-
b.iter_batched(
17+
b.iter_batched_ref(
1718
|| {
18-
let long_vector = vec![77u8; 65535];
19-
TlsSliceU32(&long_vector).tls_serialize_detached().unwrap()
19+
let long_vec = vec![77u8; N];
20+
TlsSliceU32(&long_vec).tls_serialize_detached().unwrap()
2021
},
2122
|serialized_long_vec| {
22-
let _deserialized_long_vec =
23-
TlsVecU32::<u8>::tls_deserialize(&mut serialized_long_vec.as_slice()).unwrap();
23+
TlsVecU32::<u8>::tls_deserialize(&mut serialized_long_vec.as_slice()).unwrap()
2424
},
2525
BatchSize::SmallInput,
2626
)
@@ -30,25 +30,25 @@ fn vector(c: &mut Criterion) {
3030
fn byte_vector(c: &mut Criterion) {
3131
use tls_codec::*;
3232
c.bench_function("TLS Serialize Byte Vector", |b| {
33-
b.iter_batched(
34-
|| TlsByteVecU32::from(vec![77u8; 65535]),
35-
|long_vector| {
36-
let _serialized_long_vec = long_vector.tls_serialize_detached().unwrap();
33+
b.iter_batched_ref(
34+
|| {
35+
(
36+
TlsByteVecU32::from(vec![77u8; N]),
37+
Vec::with_capacity(8 + N),
38+
)
3739
},
40+
|(long_vec, buf)| Serialize::tls_serialize(long_vec, buf).unwrap(),
3841
BatchSize::SmallInput,
3942
)
4043
});
4144
c.bench_function("TLS Deserialize Byte Vector", |b| {
42-
b.iter_batched(
45+
b.iter_batched_ref(
4346
|| {
44-
let long_vector = vec![77u8; 65535];
45-
TlsByteSliceU32(&long_vector)
46-
.tls_serialize_detached()
47-
.unwrap()
47+
let long_vec = vec![77u8; N];
48+
TlsByteSliceU32(&long_vec).tls_serialize_detached().unwrap()
4849
},
4950
|serialized_long_vec| {
50-
let _deserialized_long_vec =
51-
TlsVecU32::<u8>::tls_deserialize(&mut serialized_long_vec.as_slice()).unwrap();
51+
TlsVecU32::<u8>::tls_deserialize(&mut serialized_long_vec.as_slice()).unwrap()
5252
},
5353
BatchSize::SmallInput,
5454
)
@@ -58,13 +58,9 @@ fn byte_vector(c: &mut Criterion) {
5858
fn byte_slice(c: &mut Criterion) {
5959
use tls_codec::*;
6060
c.bench_function("TLS Serialize Byte Slice", |b| {
61-
b.iter_batched(
62-
|| vec![77u8; 65535],
63-
|long_vector| {
64-
let _serialized_long_vec = TlsByteSliceU32(&long_vector)
65-
.tls_serialize_detached()
66-
.unwrap();
67-
},
61+
b.iter_batched_ref(
62+
|| (vec![77u8; N], Vec::with_capacity(8 + N)),
63+
|(long_vec, buf)| TlsByteSliceU32(long_vec).tls_serialize(buf).unwrap(),
6864
BatchSize::SmallInput,
6965
)
7066
});
@@ -73,12 +69,9 @@ fn byte_slice(c: &mut Criterion) {
7369
fn slice(c: &mut Criterion) {
7470
use tls_codec::*;
7571
c.bench_function("TLS Serialize Slice", |b| {
76-
b.iter_batched(
77-
|| vec![77u8; 65535],
78-
|long_vector| {
79-
let _serialized_long_vec =
80-
TlsSliceU32(&long_vector).tls_serialize_detached().unwrap();
81-
},
72+
b.iter_batched_ref(
73+
|| (vec![77u8; N], Vec::with_capacity(8 + N)),
74+
|(long_vec, buf)| TlsSliceU32(long_vec).tls_serialize(buf).unwrap(),
8275
BatchSize::SmallInput,
8376
)
8477
});

0 commit comments

Comments
 (0)