diff options
author | Chih-Hung Hsieh <chh@google.com> | 2020-06-10 20:13:05 -0700 |
---|---|---|
committer | Chih-Hung Hsieh <chh@google.com> | 2020-06-10 20:13:05 -0700 |
commit | cfc3a2393e88971337346fd696518e9ea60aa2b8 (patch) | |
tree | 27da848698dcf5cab8eabb82e02b880eb1e100c4 /benches/coded_input_stream.rs | |
parent | e97eb59d5ef6d56df05edde7356c6310d9a2cbe3 (diff) | |
download | protobuf-cfc3a2393e88971337346fd696518e9ea60aa2b8.tar.gz |
Import protobuf-2.14.0
* Add OWNERS and Android.bp
* add generated version.rs into out
Bug: 143953733
Test: make
Change-Id: Ib53a973b74679c4dd78e2de2fa54141e55048c17
Diffstat (limited to 'benches/coded_input_stream.rs')
-rw-r--r-- | benches/coded_input_stream.rs | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/benches/coded_input_stream.rs b/benches/coded_input_stream.rs new file mode 100644 index 0000000..ad78115 --- /dev/null +++ b/benches/coded_input_stream.rs @@ -0,0 +1,104 @@ +// `cargo test --benches` and `#[feature(test)]` work only in nightly +#![cfg(rustc_nightly)] +#![feature(test)] + +extern crate protobuf; +extern crate test; + +use std::io; +use std::io::Read; + +use protobuf::stream::CodedInputStream; + +use self::test::Bencher; + +fn make_bytes(len: usize) -> Vec<u8> { + let mut r = Vec::with_capacity(len); + for i in 0..len { + r.push((i % 10) as u8); + } + test::black_box(r) +} + +#[bench] +fn read_byte(b: &mut Bencher) { + let v = make_bytes(1_000); + b.iter(|| { + let mut is = CodedInputStream::from_bytes(test::black_box(&v)); + while !is.eof().expect("eof") { + test::black_box(is.read_raw_byte().expect("read")); + } + }); +} + +#[bench] +fn read_byte_no_eof(b: &mut Bencher) { + let v = make_bytes(1_000); + b.iter(|| { + let mut is = CodedInputStream::from_bytes(test::black_box(&v)); + for _ in 0..v.len() { + test::black_box(is.read_raw_byte().expect("read")); + } + assert!(is.eof().expect("eof")); + }); +} + +#[bench] +fn read_byte_from_vec(b: &mut Bencher) { + let v = make_bytes(1_000); + b.iter(|| { + let mut v = io::Cursor::new(test::black_box(&v)); + loop { + let mut buf = [0]; + let count = v.read(&mut buf).expect("read"); + if count == 0 { + break; + } + test::black_box(buf); + } + }); +} + +#[bench] +fn read_varint_12(b: &mut Bencher) { + let mut v = Vec::new(); + { + let mut v = protobuf::CodedOutputStream::vec(&mut v); + for i in 0..1000 { + // one or two byte varints + v.write_raw_varint32((i * 7919) % (1 << 14)).expect("write"); + } + v.flush().expect("flush"); + } + b.iter(|| { + let mut is = CodedInputStream::from_bytes(test::black_box(&v)); + let mut count = 0; + while !is.eof().expect("eof") { + test::black_box(is.read_raw_varint32().expect("read")); + count += 1; + } + assert_eq!(1000, count); + }) +} + +#[bench] +fn read_varint_1(b: &mut Bencher) { + let mut v = Vec::new(); + { + let mut v = protobuf::CodedOutputStream::vec(&mut v); + for i in 0..1000 { + // one or two byte varints + v.write_raw_varint32((i * 7919) % (1 << 7)).expect("write"); + } + v.flush().expect("flush"); + } + b.iter(|| { + let mut is = CodedInputStream::from_bytes(test::black_box(&v)); + let mut count = 0; + while !is.eof().expect("eof") { + test::black_box(is.read_raw_varint32().expect("read")); + count += 1; + } + assert_eq!(1000, count); + }) +} |