summaryrefslogtreecommitdiffstats
path: root/net/quic/reliable_quic_stream.cc
diff options
context:
space:
mode:
authorzhongyi <zhongyi@chromium.org>2015-10-05 12:23:24 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-05 19:24:42 +0000
commit3d183d7a37e39d4d3e9d9022a5ed85760ea0b0d3 (patch)
tree038c74b66ad4f08a87cffed96934c1b830d4dd10 /net/quic/reliable_quic_stream.cc
parente22e6b6c671130cf3f2d49b6b009279a10cbbf8b (diff)
downloadchromium_src-3d183d7a37e39d4d3e9d9022a5ed85760ea0b0d3.zip
chromium_src-3d183d7a37e39d4d3e9d9022a5ed85760ea0b0d3.tar.gz
chromium_src-3d183d7a37e39d4d3e9d9022a5ed85760ea0b0d3.tar.bz2
Landing Recent QUIC changes until 9/15/2015 14:26 UTC
relnote: Change the QuicAckNotifierDelegate to add a per-packet notification method. Not yet used, so no functional change. Merge internal change: 103090848 https://codereview.chromium.org/1381463004/ relnote: N/A. Adds compile warning for unused results. Merge internal change: 103064667 https://codereview.chromium.org/1381073004/ Review URL: https://codereview.chromium.org/1385923002 Cr-Commit-Position: refs/heads/master@{#352384}
Diffstat (limited to 'net/quic/reliable_quic_stream.cc')
-rw-r--r--net/quic/reliable_quic_stream.cc34
1 files changed, 28 insertions, 6 deletions
diff --git a/net/quic/reliable_quic_stream.cc b/net/quic/reliable_quic_stream.cc
index 7c7b21c..95175de 100644
--- a/net/quic/reliable_quic_stream.cc
+++ b/net/quic/reliable_quic_stream.cc
@@ -56,10 +56,10 @@ class ReliableQuicStream::ProxyAckNotifierDelegate
explicit ProxyAckNotifierDelegate(DelegateInterface* delegate)
: delegate_(delegate),
pending_acks_(0),
+ pending_bytes_(0),
wrote_last_data_(false),
num_retransmitted_packets_(0),
- num_retransmitted_bytes_(0) {
- }
+ num_retransmitted_bytes_(0) {}
void OnAckNotification(int num_retransmitted_packets,
int num_retransmitted_bytes,
@@ -76,9 +76,28 @@ class ReliableQuicStream::ProxyAckNotifierDelegate
}
}
- void WroteData(bool last_data) {
+ void OnPacketEvent(int acked_bytes,
+ int retransmitted_bytes,
+ QuicTime::Delta delta_largest_observed) override {
+ DCHECK_LE(acked_bytes, pending_bytes_);
+ pending_bytes_ -= acked_bytes;
+ if (retransmitted_bytes > 0) {
+ ++num_retransmitted_packets_;
+ num_retransmitted_bytes_ += retransmitted_bytes;
+ }
+
+ if (wrote_last_data_ && pending_bytes_ == 0) {
+ DCHECK_EQ(0, pending_bytes_);
+ delegate_->OnAckNotification(num_retransmitted_packets_,
+ num_retransmitted_bytes_,
+ delta_largest_observed);
+ }
+ }
+
+ void WroteData(bool last_data, size_t bytes_consumed) {
DCHECK(!wrote_last_data_);
++pending_acks_;
+ pending_bytes_ += bytes_consumed;
wrote_last_data_ = last_data;
}
@@ -94,6 +113,9 @@ class ReliableQuicStream::ProxyAckNotifierDelegate
// Number of outstanding acks.
int pending_acks_;
+ // Number of outstanding bytes.
+ int pending_bytes_;
+
// True if no pending writes remain.
bool wrote_last_data_;
@@ -295,7 +317,7 @@ void ReliableQuicStream::WriteOrBufferData(
if ((proxy_delegate.get() != nullptr) &&
(consumed_data.bytes_consumed > 0 || consumed_data.fin_consumed)) {
- proxy_delegate->WroteData(write_completed);
+ proxy_delegate->WroteData(write_completed, consumed_data.bytes_consumed);
}
}
@@ -325,13 +347,13 @@ void ReliableQuicStream::OnCanWrite() {
fin == consumed_data.fin_consumed) {
queued_data_.pop_front();
if (delegate != nullptr) {
- delegate->WroteData(true);
+ delegate->WroteData(true, consumed_data.bytes_consumed);
}
} else {
if (consumed_data.bytes_consumed > 0) {
pending_data->offset += consumed_data.bytes_consumed;
if (delegate != nullptr) {
- delegate->WroteData(false);
+ delegate->WroteData(false, consumed_data.bytes_consumed);
}
}
break;