test(header): add ContentType to server encode benchmark
This commit is contained in:
@@ -202,8 +202,8 @@ impl<'a, 'b> Formatter<'a, 'b> {
|
|||||||
pub fn fmt_line(&mut self, line: &fmt::Display) -> fmt::Result {
|
pub fn fmt_line(&mut self, line: &fmt::Display) -> fmt::Result {
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
match self.0 {
|
match self.0 {
|
||||||
Multi::Line(ref name, ref mut f) => {
|
Multi::Line(name, ref mut f) => {
|
||||||
try!(f.write_str(*name));
|
try!(f.write_str(name));
|
||||||
try!(f.write_str(": "));
|
try!(f.write_str(": "));
|
||||||
try!(write!(NewlineReplacer(*f), "{}", line));
|
try!(write!(NewlineReplacer(*f), "{}", line));
|
||||||
f.write_str("\r\n")
|
f.write_str("\r\n")
|
||||||
@@ -256,6 +256,7 @@ impl<'a, H: Header> fmt::Debug for HeaderValueString<'a, H> {
|
|||||||
struct NewlineReplacer<'a, F: fmt::Write + 'a>(&'a mut F);
|
struct NewlineReplacer<'a, F: fmt::Write + 'a>(&'a mut F);
|
||||||
|
|
||||||
impl<'a, F: fmt::Write + 'a> fmt::Write for NewlineReplacer<'a, F> {
|
impl<'a, F: fmt::Write + 'a> fmt::Write for NewlineReplacer<'a, F> {
|
||||||
|
#[inline]
|
||||||
fn write_str(&mut self, s: &str) -> fmt::Result {
|
fn write_str(&mut self, s: &str) -> fmt::Result {
|
||||||
let mut since = 0;
|
let mut since = 0;
|
||||||
for (i, &byte) in s.as_bytes().iter().enumerate() {
|
for (i, &byte) in s.as_bytes().iter().enumerate() {
|
||||||
@@ -271,6 +272,11 @@ impl<'a, F: fmt::Write + 'a> fmt::Write for NewlineReplacer<'a, F> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn write_fmt(&mut self, args: fmt::Arguments) -> fmt::Result {
|
||||||
|
fmt::write(self, args)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -539,6 +545,7 @@ impl PartialEq for Headers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for Headers {
|
impl fmt::Display for Headers {
|
||||||
|
#[inline]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
for header in self.iter() {
|
for header in self.iter() {
|
||||||
try!(fmt::Display::fmt(&header, f));
|
try!(fmt::Display::fmt(&header, f));
|
||||||
@@ -548,6 +555,7 @@ impl fmt::Display for Headers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Debug for Headers {
|
impl fmt::Debug for Headers {
|
||||||
|
#[inline]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
f.debug_map()
|
f.debug_map()
|
||||||
.entries(self.iter().map(|view| (view.0.as_ref(), ValueString(view.1))))
|
.entries(self.iter().map(|view| (view.0.as_ref(), ValueString(view.1))))
|
||||||
@@ -610,12 +618,14 @@ impl<'a> HeaderView<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> fmt::Display for HeaderView<'a> {
|
impl<'a> fmt::Display for HeaderView<'a> {
|
||||||
|
#[inline]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
self.1.write_h1(&mut Formatter(Multi::Line(self.0.as_ref(), f)))
|
self.1.write_h1(&mut Formatter(Multi::Line(self.0.as_ref(), f)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> fmt::Debug for HeaderView<'a> {
|
impl<'a> fmt::Debug for HeaderView<'a> {
|
||||||
|
#[inline]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
fmt::Display::fmt(self, f)
|
fmt::Display::fmt(self, f)
|
||||||
}
|
}
|
||||||
@@ -659,8 +669,9 @@ impl<'a> FromIterator<HeaderView<'a>> for Headers {
|
|||||||
struct HeaderName(Ascii<Cow<'static, str>>);
|
struct HeaderName(Ascii<Cow<'static, str>>);
|
||||||
|
|
||||||
impl fmt::Display for HeaderName {
|
impl fmt::Display for HeaderName {
|
||||||
|
#[inline]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
fmt::Display::fmt(&self.0, f)
|
fmt::Display::fmt(self.0.as_ref(), f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,6 @@ impl Http1Transaction for ServerTransaction {
|
|||||||
Encoder::chunked()
|
Encoder::chunked()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
let init_cap = 30 + head.headers.len() * AVERAGE_HEADER_SIZE;
|
let init_cap = 30 + head.headers.len() * AVERAGE_HEADER_SIZE;
|
||||||
dst.reserve(init_cap);
|
dst.reserve(init_cap);
|
||||||
debug!("writing headers = {:?}", head.headers);
|
debug!("writing headers = {:?}", head.headers);
|
||||||
@@ -311,11 +310,13 @@ impl<'a> Iterator for HeadersAsBytesIter<'a> {
|
|||||||
struct FastWrite<'a>(&'a mut Vec<u8>);
|
struct FastWrite<'a>(&'a mut Vec<u8>);
|
||||||
|
|
||||||
impl<'a> fmt::Write for FastWrite<'a> {
|
impl<'a> fmt::Write for FastWrite<'a> {
|
||||||
|
#[inline]
|
||||||
fn write_str(&mut self, s: &str) -> fmt::Result {
|
fn write_str(&mut self, s: &str) -> fmt::Result {
|
||||||
extend(self.0, s.as_bytes());
|
extend(self.0, s.as_bytes());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
fn write_fmt(&mut self, args: fmt::Arguments) -> fmt::Result {
|
fn write_fmt(&mut self, args: fmt::Arguments) -> fmt::Result {
|
||||||
fmt::write(self, args)
|
fmt::write(self, args)
|
||||||
}
|
}
|
||||||
@@ -424,21 +425,24 @@ mod tests {
|
|||||||
#[bench]
|
#[bench]
|
||||||
fn bench_server_transaction_encode(b: &mut Bencher) {
|
fn bench_server_transaction_encode(b: &mut Bencher) {
|
||||||
use ::http::MessageHead;
|
use ::http::MessageHead;
|
||||||
use ::header::{Headers, ContentLength};
|
use ::header::{Headers, ContentLength, ContentType};
|
||||||
use ::{StatusCode, HttpVersion};
|
use ::{StatusCode, HttpVersion};
|
||||||
b.bytes = 75;
|
|
||||||
|
let len = 108;
|
||||||
|
b.bytes = len as u64;
|
||||||
|
|
||||||
let mut head = MessageHead {
|
let mut head = MessageHead {
|
||||||
subject: StatusCode::Ok,
|
subject: StatusCode::Ok,
|
||||||
headers: Headers::new(),
|
headers: Headers::new(),
|
||||||
version: HttpVersion::Http11,
|
version: HttpVersion::Http11,
|
||||||
};
|
};
|
||||||
head.headers.set(ContentLength(0));
|
head.headers.set(ContentLength(10));
|
||||||
|
head.headers.set(ContentType::json());
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut vec = Vec::new();
|
let mut vec = Vec::new();
|
||||||
ServerTransaction::encode(head.clone(), &mut vec);
|
ServerTransaction::encode(head.clone(), &mut vec);
|
||||||
assert_eq!(vec.len(), 75);
|
assert_eq!(vec.len(), len);
|
||||||
::test::black_box(vec);
|
::test::black_box(vec);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user