refactor(http2): store bdp sampler in Body H2 variant

This commit is contained in:
Sean McArthur
2020-03-03 14:23:49 -08:00
parent a82fd6c94a
commit 6a1bd055fc
3 changed files with 7 additions and 20 deletions

View File

@@ -38,6 +38,7 @@ enum Kind {
rx: mpsc::Receiver<Result<Bytes, crate::Error>>,
},
H2 {
bdp: bdp::Sampler,
content_length: DecodedLength,
recv: h2::RecvStream,
},
@@ -62,11 +63,6 @@ struct Extra {
/// connection yet.
delayed_eof: Option<DelayEof>,
on_upgrade: OnUpgrade,
/// Records bytes read to compute the BDP.
///
/// Only used with `H2` variant.
h2_bdp: bdp::Sampler,
}
type DelayEofUntil = oneshot::Receiver<Never>;
@@ -186,15 +182,12 @@ impl Body {
content_length: DecodedLength,
bdp: bdp::Sampler,
) -> Self {
let mut body = Body::new(Kind::H2 {
let body = Body::new(Kind::H2 {
bdp,
content_length,
recv,
});
if bdp.is_enabled() {
body.extra_mut().h2_bdp = bdp;
}
body
}
@@ -220,7 +213,6 @@ impl Body {
Box::new(Extra {
delayed_eof: None,
on_upgrade: OnUpgrade::none(),
h2_bdp: bdp::disabled(),
})
})
}
@@ -273,15 +265,14 @@ impl Body {
}
}
Kind::H2 {
ref bdp,
recv: ref mut h2,
content_length: ref mut len,
} => match ready!(h2.poll_data(cx)) {
Some(Ok(bytes)) => {
let _ = h2.flow_control().release_capacity(bytes.len());
len.sub_if(bytes.len() as u64);
if let Some(ref extra) = self.extra {
extra.h2_bdp.sample(bytes.len());
}
bdp.sample(bytes.len());
Poll::Ready(Some(Ok(bytes)))
}
Some(Err(e)) => Poll::Ready(Some(Err(crate::Error::new_body(e)))),