diff options
author | zhongyi <zhongyi@chromium.org> | 2015-10-05 12:23:24 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-05 19:24:42 +0000 |
commit | 3d183d7a37e39d4d3e9d9022a5ed85760ea0b0d3 (patch) | |
tree | 038c74b66ad4f08a87cffed96934c1b830d4dd10 /net/quic/reliable_quic_stream.cc | |
parent | e22e6b6c671130cf3f2d49b6b009279a10cbbf8b (diff) | |
download | chromium_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.cc | 34 |
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; |