2020-06-16 15:46:55 +00:00
|
|
|
use criterion::{criterion_group, criterion_main, Criterion};
|
2020-07-08 13:42:58 +00:00
|
|
|
use preserves::value::{self, Reader, Writer, PackedReader, PackedWriter};
|
2020-06-16 15:46:55 +00:00
|
|
|
use preserves::{de, ser};
|
|
|
|
use std::io::Read;
|
2020-06-16 15:57:52 +00:00
|
|
|
use std::io::BufReader;
|
|
|
|
use std::io::{Seek, SeekFrom};
|
2020-06-16 15:46:55 +00:00
|
|
|
|
|
|
|
#[path = "../tests/samples/mod.rs"]
|
|
|
|
mod samples;
|
|
|
|
use samples::TestCases;
|
|
|
|
|
2020-06-16 15:57:52 +00:00
|
|
|
pub fn bench_decoder_bytes(c: &mut Criterion) {
|
2020-06-16 15:46:55 +00:00
|
|
|
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
|
|
|
|
let mut bs = vec![];
|
|
|
|
fh.read_to_end(&mut bs).ok();
|
2020-06-16 22:13:56 +00:00
|
|
|
c.bench_function("decode samples.bin via bytes", |b| b.iter_with_large_drop(
|
2020-07-08 13:42:58 +00:00
|
|
|
|| PackedReader::decode_bytes(&bs[..]).demand_next(true).unwrap()));
|
2020-06-16 15:46:55 +00:00
|
|
|
}
|
|
|
|
|
2020-06-16 15:57:52 +00:00
|
|
|
pub fn bench_decoder_file(c: &mut Criterion) {
|
|
|
|
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
|
2020-06-16 22:13:56 +00:00
|
|
|
c.bench_function("decode samples.bin via file", |b| b.iter_with_large_drop(|| {
|
2020-06-16 15:57:52 +00:00
|
|
|
fh.seek(SeekFrom::Start(0)).ok();
|
2020-07-08 13:42:58 +00:00
|
|
|
PackedReader::decode_read(&mut fh).demand_next(true).unwrap()
|
2020-06-16 15:57:52 +00:00
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn bench_decoder_buffered_file(c: &mut Criterion) {
|
|
|
|
let mut fh = BufReader::new(std::fs::File::open("../../tests/samples.bin").unwrap());
|
2020-06-16 22:13:56 +00:00
|
|
|
c.bench_function("decode samples.bin via buffered file", |b| b.iter_with_large_drop(|| {
|
2020-06-16 15:57:52 +00:00
|
|
|
fh.seek(SeekFrom::Start(0)).ok();
|
2020-07-08 13:42:58 +00:00
|
|
|
PackedReader::decode_read(&mut fh).demand_next(true).unwrap()
|
2020-06-16 15:57:52 +00:00
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
2020-06-16 15:46:55 +00:00
|
|
|
pub fn bench_encoder(c: &mut Criterion) {
|
|
|
|
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
|
2020-07-08 13:42:58 +00:00
|
|
|
let v = PackedReader::decode_read(&mut fh).demand_next(true).unwrap();
|
2020-06-16 22:13:56 +00:00
|
|
|
c.bench_function("encode samples.bin", |b| b.iter_with_large_drop(|| {
|
2020-06-16 15:46:55 +00:00
|
|
|
let mut bs = vec![];
|
2021-01-06 16:42:02 +00:00
|
|
|
PackedWriter::new(&mut bs).write(&v).unwrap();
|
2020-06-16 15:46:55 +00:00
|
|
|
bs
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn bench_de(c: &mut Criterion) {
|
|
|
|
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
|
|
|
|
let mut bs = vec![];
|
|
|
|
fh.read_to_end(&mut bs).ok();
|
2020-06-16 22:13:56 +00:00
|
|
|
c.bench_function("deserialize samples.bin", |b| b.iter_with_large_drop(
|
2020-06-16 15:46:55 +00:00
|
|
|
|| de::from_bytes::<TestCases>(&bs[..]).unwrap()));
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn bench_ser(c: &mut Criterion) {
|
|
|
|
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
|
|
|
|
let v: TestCases = de::from_read(&mut fh).unwrap();
|
2020-06-16 22:13:56 +00:00
|
|
|
c.bench_function("serialize samples.bin", |b| b.iter_with_large_drop(|| {
|
2020-06-16 15:46:55 +00:00
|
|
|
let mut bs = vec![];
|
2021-01-06 16:42:02 +00:00
|
|
|
ser::to_writer(&mut PackedWriter::new(&mut bs), &v).unwrap();
|
2020-06-16 15:46:55 +00:00
|
|
|
bs
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn bench_decoder_de(c: &mut Criterion) {
|
|
|
|
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
|
|
|
|
let mut bs = vec![];
|
|
|
|
fh.read_to_end(&mut bs).ok();
|
2020-06-16 22:13:56 +00:00
|
|
|
c.bench_function("decode-then-deserialize samples.bin", |b| b.iter_with_large_drop(
|
2020-07-08 13:42:58 +00:00
|
|
|
|| value::de::from_value::<TestCases>(&PackedReader::decode_bytes(&bs[..]).demand_next(true).unwrap()).unwrap()));
|
2020-06-16 15:46:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn bench_ser_encoder(c: &mut Criterion) {
|
|
|
|
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
|
|
|
|
let v: TestCases = de::from_read(&mut fh).unwrap();
|
2020-06-16 22:13:56 +00:00
|
|
|
c.bench_function("serialize-then-encode samples.bin", |b| b.iter_with_large_drop(|| {
|
2020-06-16 15:46:55 +00:00
|
|
|
let mut bs = vec![];
|
2021-01-06 16:42:02 +00:00
|
|
|
PackedWriter::new(&mut bs).write(&value::ser::to_value(&v)).unwrap();
|
2020-06-16 15:46:55 +00:00
|
|
|
bs
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
2020-06-17 00:33:25 +00:00
|
|
|
pub fn large_testdata_decoder_with_ann(c: &mut Criterion) {
|
2020-06-17 09:01:31 +00:00
|
|
|
c.bench_function("decode testdata.bin with annotations", |b| {
|
|
|
|
let mut fh = std::fs::File::open("benches/testdata.bin").unwrap();
|
|
|
|
let mut bs = vec![];
|
|
|
|
fh.read_to_end(&mut bs).ok();
|
|
|
|
b.iter(|| {
|
2020-07-08 13:42:58 +00:00
|
|
|
let mut r = PackedReader::decode_bytes(&bs[..]);
|
2020-06-17 09:01:31 +00:00
|
|
|
while let Some(_) = r.next(true).unwrap() {}
|
|
|
|
})
|
|
|
|
});
|
2020-06-17 00:33:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn large_testdata_decoder_without_ann(c: &mut Criterion) {
|
2020-06-17 09:01:31 +00:00
|
|
|
c.bench_function("decode testdata.bin without annotations", |b| {
|
|
|
|
let mut fh = std::fs::File::open("benches/testdata.bin").unwrap();
|
|
|
|
let mut bs = vec![];
|
|
|
|
fh.read_to_end(&mut bs).ok();
|
|
|
|
b.iter(|| {
|
2020-07-08 13:42:58 +00:00
|
|
|
let mut r = PackedReader::decode_bytes(&bs[..]);
|
2020-06-17 09:01:31 +00:00
|
|
|
while let Some(_) = r.next(false).unwrap() {}
|
|
|
|
})
|
|
|
|
});
|
2020-06-17 00:33:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn large_testdata_encoder(c: &mut Criterion) {
|
2020-06-17 09:01:31 +00:00
|
|
|
c.bench_function("encode testdata.bin", |b| {
|
|
|
|
let mut fh = BufReader::new(std::fs::File::open("benches/testdata.bin").unwrap());
|
|
|
|
let mut vs = vec![];
|
2020-07-08 13:42:58 +00:00
|
|
|
let mut r = PackedReader::decode_read(&mut fh);
|
2020-06-17 09:01:31 +00:00
|
|
|
while let Some(v) = r.next(true).unwrap() {
|
|
|
|
vs.push(v);
|
2020-06-17 00:33:25 +00:00
|
|
|
}
|
2020-06-17 09:01:31 +00:00
|
|
|
b.iter_with_large_drop(|| {
|
|
|
|
let mut bs = vec![];
|
2021-01-06 16:42:02 +00:00
|
|
|
let mut w = PackedWriter::new(&mut bs);
|
2020-06-17 09:01:31 +00:00
|
|
|
for v in &vs {
|
2020-07-08 13:42:58 +00:00
|
|
|
w.write(&v).unwrap();
|
2020-06-17 09:01:31 +00:00
|
|
|
}
|
|
|
|
bs
|
|
|
|
})
|
|
|
|
});
|
2020-06-17 00:33:25 +00:00
|
|
|
}
|
|
|
|
|
2020-06-16 15:57:52 +00:00
|
|
|
criterion_group!(codec,
|
|
|
|
bench_decoder_bytes, bench_decoder_file, bench_decoder_buffered_file,
|
|
|
|
bench_encoder);
|
2020-06-16 15:46:55 +00:00
|
|
|
criterion_group!(serde, bench_de, bench_ser);
|
|
|
|
criterion_group!(codec_then_serde, bench_decoder_de, bench_ser_encoder);
|
2020-06-17 00:33:25 +00:00
|
|
|
criterion_group!{
|
|
|
|
name = large_testdata;
|
|
|
|
config = Criterion::default().sample_size(10);
|
|
|
|
targets = large_testdata_decoder_with_ann, large_testdata_decoder_without_ann, large_testdata_encoder
|
|
|
|
}
|
|
|
|
criterion_main!(codec, serde, codec_then_serde, large_testdata);
|