mirror of
https://github.com/serde-rs/serde.git
synced 2025-10-01 15:01:49 +00:00
reuse the buffers
This commit is contained in:
parent
742a70ed4f
commit
f1606c8eb3
@ -619,6 +619,9 @@ impl MyMemWriter0 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn clear(&mut self) { self.buf.clear() }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn unwrap(self) -> Vec<u8> { self.buf }
|
pub fn unwrap(self) -> Vec<u8> { self.buf }
|
||||||
}
|
}
|
||||||
@ -649,6 +652,9 @@ impl MyMemWriter1 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn clear(&mut self) { self.buf.clear() }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn unwrap(self) -> Vec<u8> { self.buf }
|
pub fn unwrap(self) -> Vec<u8> { self.buf }
|
||||||
}
|
}
|
||||||
@ -685,9 +691,18 @@ const JSON_STR: &'static str = r#"{"timestamp":2837513946597,"zone_id":123456,"z
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_encoder() {
|
fn test_encoder() {
|
||||||
|
use serialize::Encodable;
|
||||||
|
|
||||||
let log = Log::new();
|
let log = Log::new();
|
||||||
let json = serialize::json::encode(&log);
|
|
||||||
assert_eq!(json.as_slice(), JSON_STR);
|
let mut wr = Vec::with_capacity(1024);
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut encoder = serialize::json::Encoder::new(&mut wr as &mut io::Writer);
|
||||||
|
log.encode(&mut encoder).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(wr.as_slice(), JSON_STR.as_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
@ -736,9 +751,12 @@ fn bench_serializer_vec(b: &mut Bencher) {
|
|||||||
let json = json::to_vec(&log);
|
let json = json::to_vec(&log);
|
||||||
b.bytes = json.len() as u64;
|
b.bytes = json.len() as u64;
|
||||||
|
|
||||||
|
let mut wr = Vec::with_capacity(1024);
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let wr = Vec::with_capacity(1024);
|
wr.clear();
|
||||||
let mut serializer = json::Serializer::new(wr);
|
|
||||||
|
let mut serializer = json::Serializer::new(wr.by_ref());
|
||||||
log.serialize(&mut serializer).unwrap();
|
log.serialize(&mut serializer).unwrap();
|
||||||
let _json = serializer.unwrap();
|
let _json = serializer.unwrap();
|
||||||
});
|
});
|
||||||
@ -748,12 +766,14 @@ fn bench_serializer_vec(b: &mut Bencher) {
|
|||||||
fn test_serializer_my_mem_writer0() {
|
fn test_serializer_my_mem_writer0() {
|
||||||
let log = Log::new();
|
let log = Log::new();
|
||||||
|
|
||||||
let wr = MyMemWriter0::with_capacity(1024);
|
let mut wr = MyMemWriter0::with_capacity(1024);
|
||||||
let mut serializer = json::Serializer::new(wr);
|
|
||||||
log.serialize(&mut serializer).unwrap();
|
|
||||||
|
|
||||||
let json = serializer.unwrap().unwrap();
|
{
|
||||||
assert_eq!(json.as_slice(), JSON_STR.as_bytes());
|
let mut serializer = json::Serializer::new(wr.by_ref());
|
||||||
|
log.serialize(&mut serializer).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(wr.unwrap().as_slice(), JSON_STR.as_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
@ -762,12 +782,13 @@ fn bench_serializer_my_mem_writer0(b: &mut Bencher) {
|
|||||||
let json = json::to_vec(&log);
|
let json = json::to_vec(&log);
|
||||||
b.bytes = json.len() as u64;
|
b.bytes = json.len() as u64;
|
||||||
|
|
||||||
|
let mut wr = MyMemWriter0::with_capacity(1024);
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
//let _json = json::to_str(&log).unwrap();
|
wr.clear();
|
||||||
let wr = MyMemWriter0::with_capacity(1024);
|
|
||||||
let mut serializer = json::Serializer::new(wr);
|
let mut serializer = json::Serializer::new(wr.by_ref());
|
||||||
log.serialize(&mut serializer).unwrap();
|
log.serialize(&mut serializer).unwrap();
|
||||||
let _json = serializer.unwrap().unwrap();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -775,12 +796,14 @@ fn bench_serializer_my_mem_writer0(b: &mut Bencher) {
|
|||||||
fn test_serializer_my_mem_writer1() {
|
fn test_serializer_my_mem_writer1() {
|
||||||
let log = Log::new();
|
let log = Log::new();
|
||||||
|
|
||||||
let wr = MyMemWriter1::with_capacity(1024);
|
let mut wr = MyMemWriter1::with_capacity(1024);
|
||||||
let mut serializer = json::Serializer::new(wr);
|
|
||||||
log.serialize(&mut serializer).unwrap();
|
|
||||||
|
|
||||||
let json = serializer.unwrap().unwrap();
|
{
|
||||||
assert_eq!(json.as_slice(), JSON_STR.as_bytes());
|
let mut serializer = json::Serializer::new(wr.by_ref());
|
||||||
|
log.serialize(&mut serializer).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(wr.unwrap().as_slice(), JSON_STR.as_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
@ -789,11 +812,13 @@ fn bench_serializer_my_mem_writer1(b: &mut Bencher) {
|
|||||||
let json = json::to_vec(&log);
|
let json = json::to_vec(&log);
|
||||||
b.bytes = json.len() as u64;
|
b.bytes = json.len() as u64;
|
||||||
|
|
||||||
|
let mut wr = MyMemWriter1::with_capacity(1024);
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let wr = MyMemWriter1::with_capacity(1024);
|
wr.clear();
|
||||||
let mut serializer = json::Serializer::new(wr);
|
|
||||||
|
let mut serializer = json::Serializer::new(wr.by_ref());
|
||||||
log.serialize(&mut serializer).unwrap();
|
log.serialize(&mut serializer).unwrap();
|
||||||
let _json = serializer.unwrap().unwrap();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -989,7 +1014,7 @@ fn bench_manual_mem_writer_no_escape(b: &mut Bencher) {
|
|||||||
b.bytes = wr.len() as u64;
|
b.bytes = wr.len() as u64;
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut wr = Vec::with_capacity(1024);
|
wr.clear();
|
||||||
manual_no_escape(wr.by_ref(), &log);
|
manual_no_escape(wr.by_ref(), &log);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1014,7 +1039,8 @@ fn bench_manual_mem_writer_escape(b: &mut Bencher) {
|
|||||||
b.bytes = wr.len() as u64;
|
b.bytes = wr.len() as u64;
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut wr = Vec::with_capacity(1024);
|
wr.clear();
|
||||||
|
|
||||||
manual_escape(wr.by_ref(), &log);
|
manual_escape(wr.by_ref(), &log);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1036,10 +1062,11 @@ fn bench_manual_my_mem_writer0_no_escape(b: &mut Bencher) {
|
|||||||
|
|
||||||
let mut wr = MyMemWriter0::with_capacity(1000);
|
let mut wr = MyMemWriter0::with_capacity(1000);
|
||||||
manual_no_escape(wr.by_ref(), &log);
|
manual_no_escape(wr.by_ref(), &log);
|
||||||
b.bytes = wr.unwrap().len() as u64;
|
b.bytes = wr.buf.len() as u64;
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut wr = MyMemWriter0::with_capacity(1024);
|
wr.clear();
|
||||||
|
|
||||||
manual_no_escape(wr.by_ref(), &log);
|
manual_no_escape(wr.by_ref(), &log);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1061,12 +1088,12 @@ fn bench_manual_my_mem_writer0_escape(b: &mut Bencher) {
|
|||||||
|
|
||||||
let mut wr = MyMemWriter0::with_capacity(1024);
|
let mut wr = MyMemWriter0::with_capacity(1024);
|
||||||
manual_escape(wr.by_ref(), &log);
|
manual_escape(wr.by_ref(), &log);
|
||||||
b.bytes = wr.unwrap().len() as u64;
|
b.bytes = wr.buf.len() as u64;
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut wr = MyMemWriter0::with_capacity(1024);
|
wr.clear();
|
||||||
|
|
||||||
manual_escape(wr.by_ref(), &log);
|
manual_escape(wr.by_ref(), &log);
|
||||||
let _json = wr.unwrap();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1087,12 +1114,12 @@ fn bench_manual_my_mem_writer1_no_escape(b: &mut Bencher) {
|
|||||||
|
|
||||||
let mut wr = MyMemWriter1::with_capacity(1000);
|
let mut wr = MyMemWriter1::with_capacity(1000);
|
||||||
manual_no_escape(wr.by_ref(), &log);
|
manual_no_escape(wr.by_ref(), &log);
|
||||||
b.bytes = wr.unwrap().len() as u64;
|
b.bytes = wr.buf.len() as u64;
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut wr = MyMemWriter1::with_capacity(1024);
|
wr.clear();
|
||||||
|
|
||||||
manual_no_escape(wr.by_ref(), &log);
|
manual_no_escape(wr.by_ref(), &log);
|
||||||
let _json = wr.unwrap();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1187,12 +1214,12 @@ fn bench_direct_my_mem_writer0(b: &mut Bencher) {
|
|||||||
|
|
||||||
let mut wr = MyMemWriter0::with_capacity(1024);
|
let mut wr = MyMemWriter0::with_capacity(1024);
|
||||||
direct(wr.by_ref(), &log);
|
direct(wr.by_ref(), &log);
|
||||||
b.bytes = wr.unwrap().len() as u64;
|
b.bytes = wr.buf.len() as u64;
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut wr = MyMemWriter0::with_capacity(1024);
|
wr.clear();
|
||||||
|
|
||||||
direct(wr.by_ref(), &log);
|
direct(wr.by_ref(), &log);
|
||||||
let _json = wr.unwrap();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user