Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: net/quic/congestion_control/tcp_cubic_sender.cc

Issue 131743009: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use size_t instead of int to fix win_x64 compile error Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/congestion_control/tcp_cubic_sender.h" 5 #include "net/quic/congestion_control/tcp_cubic_sender.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 10
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 feedback.tcp.accumulated_number_of_lost_packets; 82 feedback.tcp.accumulated_number_of_lost_packets;
83 if (recovered_lost_packets > 0) { 83 if (recovered_lost_packets > 0) {
84 // Assume the loss could be as late as the last acked packet. 84 // Assume the loss could be as late as the last acked packet.
85 OnPacketLost(largest_acked_sequence_number_, feedback_receive_time); 85 OnPacketLost(largest_acked_sequence_number_, feedback_receive_time);
86 } 86 }
87 } 87 }
88 receive_window_ = feedback.tcp.receive_window; 88 receive_window_ = feedback.tcp.receive_window;
89 } 89 }
90 90
91 void TcpCubicSender::OnPacketAcked( 91 void TcpCubicSender::OnPacketAcked(
92 QuicPacketSequenceNumber acked_sequence_number, 92 QuicPacketSequenceNumber acked_sequence_number, QuicByteCount acked_bytes) {
93 QuicByteCount acked_bytes,
94 QuicTime::Delta rtt) {
95 DCHECK_GE(bytes_in_flight_, acked_bytes); 93 DCHECK_GE(bytes_in_flight_, acked_bytes);
96 bytes_in_flight_ -= acked_bytes; 94 bytes_in_flight_ -= acked_bytes;
97 largest_acked_sequence_number_ = max(acked_sequence_number, 95 largest_acked_sequence_number_ = max(acked_sequence_number,
98 largest_acked_sequence_number_); 96 largest_acked_sequence_number_);
99 CongestionAvoidance(acked_sequence_number); 97 CongestionAvoidance(acked_sequence_number);
100 AckAccounting(rtt);
101 if (end_sequence_number_ == acked_sequence_number) { 98 if (end_sequence_number_ == acked_sequence_number) {
102 DVLOG(1) << "Start update end sequence number @" << acked_sequence_number; 99 DVLOG(1) << "Start update end sequence number @" << acked_sequence_number;
103 update_end_sequence_number_ = true; 100 update_end_sequence_number_ = true;
104 } 101 }
105 } 102 }
106 103
107 void TcpCubicSender::OnPacketLost(QuicPacketSequenceNumber sequence_number, 104 void TcpCubicSender::OnPacketLost(QuicPacketSequenceNumber sequence_number,
108 QuicTime /*ack_receive_time*/) { 105 QuicTime /*ack_receive_time*/) {
109 // TCP NewReno (RFC6582) says that once a loss occurs, any losses in packets 106 // TCP NewReno (RFC6582) says that once a loss occurs, any losses in packets
110 // already sent should be treated as a single loss event, since it's expected. 107 // already sent should be treated as a single loss event, since it's expected.
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 } 276 }
280 277
281 void TcpCubicSender::OnRetransmissionTimeout(bool packets_retransmitted) { 278 void TcpCubicSender::OnRetransmissionTimeout(bool packets_retransmitted) {
282 bytes_in_flight_ = 0; 279 bytes_in_flight_ = 0;
283 if (packets_retransmitted) { 280 if (packets_retransmitted) {
284 cubic_.Reset(); 281 cubic_.Reset();
285 congestion_window_ = kMinimumCongestionWindow; 282 congestion_window_ = kMinimumCongestionWindow;
286 } 283 }
287 } 284 }
288 285
289 void TcpCubicSender::AckAccounting(QuicTime::Delta rtt) { 286 void TcpCubicSender::UpdateRtt(QuicTime::Delta rtt) {
290 if (rtt.IsInfinite() || rtt.IsZero()) { 287 if (rtt.IsInfinite() || rtt.IsZero()) {
291 DVLOG(1) << "Ignoring rtt, because it's " 288 DVLOG(1) << "Ignoring rtt, because it's "
292 << (rtt.IsZero() ? "Zero" : "Infinite"); 289 << (rtt.IsZero() ? "Zero" : "Infinite");
293 return; 290 return;
294 } 291 }
295 // RTT can't be negative. 292 // RTT can't be negative.
296 DCHECK_LT(0, rtt.ToMicroseconds()); 293 DCHECK_LT(0, rtt.ToMicroseconds());
297 294
298 // TODO(pwestin): Discard delay samples right after fast recovery, 295 // TODO(pwestin): Discard delay samples right after fast recovery,
299 // during 1 second?. 296 // during 1 second?.
(...skipping 26 matching lines...) Expand all
326 hybrid_slow_start_.Reset(end_sequence_number_); 323 hybrid_slow_start_.Reset(end_sequence_number_);
327 } 324 }
328 hybrid_slow_start_.Update(rtt, delay_min_); 325 hybrid_slow_start_.Update(rtt, delay_min_);
329 if (hybrid_slow_start_.Exit()) { 326 if (hybrid_slow_start_.Exit()) {
330 slowstart_threshold_ = congestion_window_; 327 slowstart_threshold_ = congestion_window_;
331 } 328 }
332 } 329 }
333 } 330 }
334 331
335 } // namespace net 332 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/tcp_cubic_sender.h ('k') | net/quic/congestion_control/tcp_cubic_sender_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698