1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00

improve comparison benchmark

This commit is contained in:
mat 2023-03-22 20:49:52 -05:00
parent 03a672ee9b
commit 95e9ec51dc
4 changed files with 85 additions and 136 deletions

60
Cargo.lock generated
View file

@ -355,11 +355,10 @@ dependencies = [
"compact_str",
"criterion",
"enum-as-inner",
"fastnbt",
"flate2",
"graphite_binary",
"hematite-nbt",
"log",
"quartz_nbt",
"serde",
"valence_nbt",
]
@ -1079,6 +1078,18 @@ version = "2.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
[[package]]
name = "fastnbt"
version = "2.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1aab2b0109236f6c89cc81b9e2ef4aced6d585aabe96ac860ee5e9a102eb198"
dependencies = [
"byteorder",
"cesu8",
"serde",
"serde_bytes",
]
[[package]]
name = "fastrand"
version = "1.9.0"
@ -1328,18 +1339,6 @@ version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hematite-nbt"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "670d0784ee67cfb57393dc1837867d2951f9a59ca7db99a653499c854f745739"
dependencies = [
"byteorder",
"cesu8",
"flate2",
"serde",
]
[[package]]
name = "hermit-abi"
version = "0.1.19"
@ -1868,30 +1867,6 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "quartz_nbt"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "348031720b71761481d77969dcb3c89ab06f04132ee1503aca1bd9313eef5e67"
dependencies = [
"anyhow",
"byteorder",
"cesu8",
"flate2",
"quartz_nbt_macros",
]
[[package]]
name = "quartz_nbt_macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "289baa0c8a4d1f840d2de528a7f8c29e0e9af48b3018172b3edad4f716e8daed"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "quote"
version = "1.0.26"
@ -2147,6 +2122,15 @@ dependencies = [
"serde_derive",
]
[[package]]
name = "serde_bytes"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294"
dependencies = [
"serde",
]
[[package]]
name = "serde_derive"
version = "1.0.155"

View file

@ -21,9 +21,8 @@ serde = { version = "1.0.152", features = ["derive"], optional = true }
[dev-dependencies]
criterion = { version = "^0.4.0", features = ["html_reports"] }
graphite_binary = "0.1.0"
quartz_nbt = "0.2.6"
hematite-nbt = "0.5.2"
valence_nbt = "0.4.0"
fastnbt = "2.4.3"
[features]
default = []

View file

@ -1,28 +1,36 @@
use std::io::Cursor;
use std::{
fs::File,
io::{Cursor, Read},
};
use azalea_buf::McBufReadable;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
use flate2::read::GzDecoder;
use nbt as hematite_nbt;
use quartz_nbt::io::Flavor;
pub fn bench_read_file(filename: &str, c: &mut Criterion) {
let mut file = File::open(filename).unwrap();
let mut contents = Vec::new();
file.read_to_end(&mut contents).unwrap();
let mut src = &contents[..];
pub fn nbt_parse_bigtest(c: &mut Criterion) {
let original = include_bytes!("../tests/bigtest.nbt").to_vec();
let mut original_stream = Cursor::new(original);
let original_tag = azalea_nbt::Tag::read_gzip(&mut original_stream).unwrap();
// decode the original src so most of the time isn't spent on unzipping
let mut decoded_src_decoder = GzDecoder::new(&mut src);
let mut input = Vec::new();
original_tag.write(&mut input).unwrap();
decoded_src_decoder.read_to_end(&mut input).unwrap();
let input = input.as_slice();
c.bench_function("azalea_parse_bigtest", |b| {
let mut group = c.benchmark_group(filename);
group.throughput(Throughput::Bytes(input.len() as u64));
group.bench_function("azalea_parse", |b| {
b.iter(|| {
let input = black_box(input);
let nbt = azalea_nbt::Tag::read(&mut Cursor::new(input)).unwrap();
let nbt = azalea_nbt::Tag::read(&mut Cursor::new(&input)).unwrap();
black_box(nbt);
})
});
c.bench_function("graphite_parse_bigtest", |b| {
group.bench_function("graphite_parse", |b| {
b.iter(|| {
let input = black_box(input);
let nbt = graphite_binary::nbt::decode::read(&mut &input[..]).unwrap();
@ -30,7 +38,7 @@ pub fn nbt_parse_bigtest(c: &mut Criterion) {
})
});
c.bench_function("valence_parse_bigtest", |b| {
group.bench_function("valence_parse", |b| {
b.iter(|| {
let input = black_box(input);
let nbt = valence_nbt::from_binary_slice(&mut &input[..]).unwrap();
@ -38,88 +46,46 @@ pub fn nbt_parse_bigtest(c: &mut Criterion) {
})
});
// c.bench_function("hematite_parse_bigtest", |b| {
// b.iter(|| {
// let input = black_box(input);
// // writing
// let cursor = Cursor::new(input);
// let blob: hematite_nbt::Blob =
// hematite_nbt::from_reader(cursor).unwrap(); black_box(blob);
// })
// });
// c.bench_function("quartz_parse_bigtest", |b| {
// b.iter(|| {
// let input = black_box(input);
// let mut cursor = Cursor::new(input);
// let nbt = quartz_nbt::io::read_nbt(&mut cursor,
// Flavor::Uncompressed).unwrap(); black_box(nbt);
// })
// });
}
pub fn nbt_write_bigtest(c: &mut Criterion) {
let original = include_bytes!("../tests/bigtest.nbt").to_vec();
let mut original_stream = Cursor::new(original);
let original_tag = azalea_nbt::Tag::read_gzip(&mut original_stream).unwrap();
let mut input = Vec::new();
original_tag.write(&mut input).unwrap();
let input = input.as_slice();
let mut cursor = Cursor::new(input);
let nbt = azalea_nbt::Tag::read_from(&mut cursor).unwrap();
c.bench_function("azalea_write_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let mut written = Vec::new();
nbt.write(&mut written).unwrap();
black_box(written);
})
});
let nbt = graphite_binary::nbt::decode::read(&mut &input[..]).unwrap();
c.bench_function("graphite_write_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let written = graphite_binary::nbt::encode::write(nbt);
black_box(written);
})
});
let nbt = valence_nbt::from_binary_slice(&mut &input[..]).unwrap();
c.bench_function("valence_write_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let mut written = Vec::new();
valence_nbt::to_binary_writer(&mut written, &nbt.0, &nbt.1).unwrap();
black_box(written);
})
});
// let cursor = Cursor::new(input);
// let nbt: hematite_nbt::Blob = hematite_nbt::from_reader(cursor).unwrap();
// c.bench_function("hematite_write_bigtest", |b| {
// let nbt = azalea_nbt::Tag::read_from(&mut Cursor::new(input)).unwrap();
// group.bench_function("azalea_write", |b| {
// b.iter(|| {
// let nbt = black_box(&nbt);
// let mut written = Vec::new();
// hematite_nbt::to_writer(&mut written, nbt, None).unwrap();
// nbt.write(&mut written).unwrap();
// black_box(written);
// })
// });
// let mut cursor = Cursor::new(input);
// let (nbt, _) = quartz_nbt::io::read_nbt(&mut cursor,
// Flavor::Uncompressed).unwrap(); c.bench_function("
// quartz_write_bigtest", |b| { b.iter(|| {
// let nbt = graphite_binary::nbt::decode::read(&mut &input[..]).unwrap();
// group.bench_function("graphite_write", |b| {
// b.iter(|| {
// let nbt = black_box(&nbt);
// let written = graphite_binary::nbt::encode::write(nbt);
// black_box(written);
// })
// });
// let nbt = valence_nbt::from_binary_slice(&mut &input[..]).unwrap();
// group.bench_function("valence_write", |b| {
// b.iter(|| {
// let nbt = black_box(&nbt);
// let mut written = Vec::new();
// quartz_nbt::io::write_nbt(&mut written, None, nbt,
// Flavor::Uncompressed).unwrap(); black_box(written);
// valence_nbt::to_binary_writer(&mut written, &nbt.0,
// &nbt.1).unwrap(); black_box(written);
// })
// });
}
// criterion_group!(benches, nbt_write_bigtest);
criterion_group!(benches, nbt_parse_bigtest, nbt_write_bigtest);
fn bench(c: &mut Criterion) {
bench_read_file("tests/bigtest.nbt", c);
// bench_read_file("tests/simple_player.dat", c);
// bench_read_file("tests/complex_player.dat", c);
// bench_read_file("tests/level.dat", c);
// bench_read_file("tests/stringtest.nbt", c);
// bench_read_file("tests/inttest.nbt", c);
}
criterion_group!(benches, bench);
criterion_main!(benches);

View file

@ -6,7 +6,7 @@ use std::{
io::{self, Cursor, Read},
};
fn bench_serialize(filename: &str, c: &mut Criterion) {
fn bench_file(filename: &str, c: &mut Criterion) {
let mut file = File::open(filename).unwrap();
let mut contents = Vec::new();
file.read_to_end(&mut contents).unwrap();
@ -26,12 +26,12 @@ fn bench_serialize(filename: &str, c: &mut Criterion) {
group.throughput(Throughput::Bytes(decoded_src.len() as u64));
// group.bench_function("Decode", |b| {
// b.iter(|| {
// black_box(Tag::read(&mut decoded_src_stream).unwrap());
// decoded_src_stream.set_position(0);
// })
// });
group.bench_function("Decode", |b| {
b.iter(|| {
black_box(Tag::read(&mut decoded_src_stream).unwrap());
decoded_src_stream.set_position(0);
})
});
group.bench_function("Encode", |b| {
b.iter(|| {
@ -42,12 +42,12 @@ fn bench_serialize(filename: &str, c: &mut Criterion) {
}
fn bench(c: &mut Criterion) {
bench_serialize("tests/bigtest.nbt", c);
// bench_serialize("tests/simple_player.dat", c);
// bench_serialize("tests/complex_player.dat", c);
// bench_serialize("tests/level.dat", c);
// bench_serialize("tests/stringtest.nbt", c);
// bench_serialize("tests/inttest.nbt", c);
bench_file("tests/bigtest.nbt", c);
bench_file("tests/simple_player.dat", c);
bench_file("tests/complex_player.dat", c);
bench_file("tests/level.dat", c);
bench_file("tests/stringtest.nbt", c);
bench_file("tests/inttest.nbt", c);
}
criterion_group!(benches, bench);