aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock60
-rw-r--r--azalea-nbt/Cargo.toml3
-rwxr-xr-xazalea-nbt/benches/comparison.rs126
-rwxr-xr-xazalea-nbt/benches/my_benchmark.rs26
4 files changed, 82 insertions, 133 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 131bb0b5..8ad23510 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -355,11 +355,10 @@ dependencies = [
"compact_str",
"criterion",
"enum-as-inner",
+ "fastnbt",
"flate2",
"graphite_binary",
- "hematite-nbt",
"log",
- "quartz_nbt",
"serde",
"valence_nbt",
]
@@ -1080,6 +1079,18 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1329,18 +1340,6 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1869,30 +1868,6 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2148,6 +2123,15 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/azalea-nbt/Cargo.toml b/azalea-nbt/Cargo.toml
index 59b52762..4f01e254 100644
--- a/azalea-nbt/Cargo.toml
+++ b/azalea-nbt/Cargo.toml
@@ -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 = []
diff --git a/azalea-nbt/benches/comparison.rs b/azalea-nbt/benches/comparison.rs
index 8ff2a54b..7aede267 100755
--- a/azalea-nbt/benches/comparison.rs
+++ b/azalea-nbt/benches/comparison.rs
@@ -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);
-
- // let cursor = Cursor::new(input);
- // let blob: hematite_nbt::Blob =
- // hematite_nbt::from_reader(cursor).unwrap(); black_box(blob);
- // })
- // });
+ // // writing
- // c.bench_function("quartz_parse_bigtest", |b| {
+ // let nbt = azalea_nbt::Tag::read_from(&mut Cursor::new(input)).unwrap();
+ // group.bench_function("azalea_write", |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);
+ // let nbt = black_box(&nbt);
+ // let mut written = Vec::new();
+ // nbt.write(&mut written).unwrap();
+ // black_box(written);
// })
// });
-}
-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 = graphite_binary::nbt::decode::read(&mut &input[..]).unwrap();
+ // group.bench_function("graphite_write", |b| {
// b.iter(|| {
// let nbt = black_box(&nbt);
- // let mut written = Vec::new();
- // hematite_nbt::to_writer(&mut written, nbt, None).unwrap();
+ // let written = graphite_binary::nbt::encode::write(nbt);
// 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 = 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);
diff --git a/azalea-nbt/benches/my_benchmark.rs b/azalea-nbt/benches/my_benchmark.rs
index 5987e533..7ce11e1f 100755
--- a/azalea-nbt/benches/my_benchmark.rs
+++ b/azalea-nbt/benches/my_benchmark.rs
@@ -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);