test(http1): add benchmarks for fixed and chunked decoding
This commit is contained in:
		| @@ -406,6 +406,15 @@ mod tests { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[cfg(feature = "nightly")] | ||||||
|  |     impl MemRead for Bytes { | ||||||
|  |         fn read_mem(&mut self, _: &mut task::Context<'_>, len: usize) -> Poll<io::Result<Bytes>> { | ||||||
|  |             let n = std::cmp::min(len, self.len()); | ||||||
|  |             let ret = self.split_to(n); | ||||||
|  |             Poll::Ready(Ok(ret)) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
|     use std::io; |     use std::io; | ||||||
|     use std::io::Write; |     use std::io::Write; | ||||||
| @@ -610,4 +619,56 @@ mod tests { | |||||||
|         let content = "foobar"; |         let content = "foobar"; | ||||||
|         all_async_cases(content, content, Decoder::eof()).await; |         all_async_cases(content, content, Decoder::eof()).await; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[cfg(feature = "nightly")] | ||||||
|  |     #[bench] | ||||||
|  |     fn bench_decode_chunked_1kb(b: &mut test::Bencher) { | ||||||
|  |         let mut rt = new_runtime(); | ||||||
|  |  | ||||||
|  |         const LEN: usize = 1024; | ||||||
|  |         let mut vec = Vec::new(); | ||||||
|  |         vec.extend(format!("{:x}\r\n", LEN).as_bytes()); | ||||||
|  |         vec.extend(&[0; LEN][..]); | ||||||
|  |         vec.extend(b"\r\n"); | ||||||
|  |         let content = Bytes::from(vec); | ||||||
|  |  | ||||||
|  |         b.bytes = LEN as u64; | ||||||
|  |  | ||||||
|  |         b.iter(|| { | ||||||
|  |             let mut decoder = Decoder::chunked(); | ||||||
|  |             rt.block_on(async { | ||||||
|  |                 let mut raw = content.clone(); | ||||||
|  |                 let chunk = decoder.decode_fut(&mut raw).await.unwrap(); | ||||||
|  |                 assert_eq!(chunk.len(), LEN); | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[cfg(feature = "nightly")] | ||||||
|  |     #[bench] | ||||||
|  |     fn bench_decode_length_1kb(b: &mut test::Bencher) { | ||||||
|  |         let mut rt = new_runtime(); | ||||||
|  |  | ||||||
|  |         const LEN: usize = 1024; | ||||||
|  |         let content = Bytes::from(&[0; LEN][..]); | ||||||
|  |         b.bytes = LEN as u64; | ||||||
|  |  | ||||||
|  |         b.iter(|| { | ||||||
|  |             let mut decoder = Decoder::length(LEN as u64); | ||||||
|  |             rt.block_on(async { | ||||||
|  |                 let mut raw = content.clone(); | ||||||
|  |                 let chunk = decoder.decode_fut(&mut raw).await.unwrap(); | ||||||
|  |                 assert_eq!(chunk.len(), LEN); | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[cfg(feature = "nightly")] | ||||||
|  |     fn new_runtime() -> tokio::runtime::Runtime { | ||||||
|  |         tokio::runtime::Builder::new() | ||||||
|  |             .enable_all() | ||||||
|  |             .basic_scheduler() | ||||||
|  |             .build() | ||||||
|  |             .expect("rt build") | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user