Skip to content

Commit fe2183d

Browse files
authored
Add benchmarks for BytesMut vs Vec (#303)
1 parent 491ebbf commit fe2183d

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

benches/bytes_mut.rs

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,95 @@ fn fmt_write(b: &mut Bencher) {
140140
unsafe { buf.set_len(0); }
141141
})
142142
}
143+
144+
// BufMut for BytesMut vs Vec<u8>
145+
146+
#[bench]
147+
fn put_bytes_mut(b: &mut Bencher) {
148+
let mut buf = BytesMut::with_capacity(256);
149+
let data = [33u8; 32];
150+
151+
b.bytes = data.len() as u64 * 4;
152+
b.iter(|| {
153+
for _ in 0..4 {
154+
buf.put_slice(&data);
155+
}
156+
test::black_box(&buf);
157+
unsafe { buf.set_len(0); }
158+
});
159+
}
160+
161+
#[bench]
162+
fn put_u8_bytes_mut(b: &mut Bencher) {
163+
let mut buf = BytesMut::with_capacity(256);
164+
let cnt = 128;
165+
166+
b.bytes = cnt as u64;
167+
b.iter(|| {
168+
for _ in 0..cnt {
169+
buf.put_u8(b'x');
170+
}
171+
test::black_box(&buf);
172+
unsafe { buf.set_len(0); }
173+
});
174+
}
175+
176+
#[bench]
177+
fn put_vec(b: &mut Bencher) {
178+
let mut buf = Vec::<u8>::with_capacity(256);
179+
let data = [33u8; 32];
180+
181+
b.bytes = data.len() as u64 * 4;
182+
b.iter(|| {
183+
for _ in 0..4 {
184+
buf.put_slice(&data);
185+
}
186+
test::black_box(&buf);
187+
unsafe { buf.set_len(0); }
188+
});
189+
}
190+
191+
#[bench]
192+
fn put_u8_vec(b: &mut Bencher) {
193+
let mut buf = Vec::<u8>::with_capacity(256);
194+
let cnt = 128;
195+
196+
b.bytes = cnt as u64;
197+
b.iter(|| {
198+
for _ in 0..cnt {
199+
buf.put_u8(b'x');
200+
}
201+
test::black_box(&buf);
202+
unsafe { buf.set_len(0); }
203+
});
204+
}
205+
206+
#[bench]
207+
fn put_vec_extend(b: &mut Bencher) {
208+
let mut buf = Vec::<u8>::with_capacity(256);
209+
let data = [33u8; 32];
210+
211+
b.bytes = data.len() as u64 * 4;
212+
b.iter(|| {
213+
for _ in 0..4 {
214+
buf.extend_from_slice(&data);
215+
}
216+
test::black_box(&buf);
217+
unsafe { buf.set_len(0); }
218+
});
219+
}
220+
221+
#[bench]
222+
fn put_u8_vec_push(b: &mut Bencher) {
223+
let mut buf = Vec::<u8>::with_capacity(256);
224+
let cnt = 128;
225+
226+
b.bytes = cnt as u64;
227+
b.iter(|| {
228+
for _ in 0..cnt {
229+
buf.push(b'x');
230+
}
231+
test::black_box(&buf);
232+
unsafe { buf.set_len(0); }
233+
});
234+
}

0 commit comments

Comments
 (0)