From beace2f31e7195767a8386fe27b49e03ccef5a89 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Sun, 3 Jun 2018 16:18:37 -0700 Subject: [PATCH] perf(chunk): use faster length check in Chunk::remaining --- src/body/chunk.rs | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/body/chunk.rs b/src/body/chunk.rs index e0f9e33d..7490d4d3 100644 --- a/src/body/chunk.rs +++ b/src/body/chunk.rs @@ -34,7 +34,10 @@ impl Chunk { impl Buf for Chunk { #[inline] fn remaining(&self) -> usize { - self.bytes.len() + //perf: Bytes::len() isn't inline yet, + //so it's slightly slower than checking + //the length of the slice. + self.bytes().len() } #[inline] @@ -157,3 +160,29 @@ impl Iterator for IntoIter { impl ExactSizeIterator for IntoIter {} +#[cfg(test)] +mod tests { + use super::*; + + #[cfg(feature = "nightly")] + use test::Bencher; + + #[cfg(feature = "nightly")] + #[bench] + fn bench_chunk_static_buf(b: &mut Bencher) { + use bytes::BufMut; + + let s = "Hello, World!"; + b.bytes = s.len() as u64; + + let mut dst = Vec::with_capacity(128); + + b.iter(|| { + let chunk = Chunk::from(s); + dst.put(chunk); + ::test::black_box(&dst); + unsafe { dst.set_len(0); } + }) + } +} +