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:
parent
03a672ee9b
commit
95e9ec51dc
4 changed files with 85 additions and 136 deletions
60
Cargo.lock
generated
60
Cargo.lock
generated
|
@ -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"
|
||||
|
|
|
@ -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 = []
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue