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

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

Issue 125403006: Various QUIC cleanups to sync with internal code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix comments 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
11 using std::max; 11 using std::max;
12 using std::min;
12 13
13 namespace net { 14 namespace net {
14 15
15 namespace { 16 namespace {
16 // Constants based on TCP defaults. 17 // Constants based on TCP defaults.
17 // The minimum cwnd based on RFC 3782 (TCP NewReno) for cwnd reductions on a 18 // The minimum cwnd based on RFC 3782 (TCP NewReno) for cwnd reductions on a
18 // fast retransmission. The cwnd after a timeout is still 1. 19 // fast retransmission. The cwnd after a timeout is still 1.
19 const QuicTcpCongestionWindow kMinimumCongestionWindow = 2; 20 const QuicTcpCongestionWindow kMinimumCongestionWindow = 2;
20 const int64 kHybridStartLowWindow = 16; 21 const int64 kHybridStartLowWindow = 16;
21 const QuicByteCount kMaxSegmentSize = kDefaultTCPMSS; 22 const QuicByteCount kMaxSegmentSize = kDefaultTCPMSS;
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 191
191 QuicByteCount TcpCubicSender::AvailableSendWindow() { 192 QuicByteCount TcpCubicSender::AvailableSendWindow() {
192 if (bytes_in_flight_ > SendWindow()) { 193 if (bytes_in_flight_ > SendWindow()) {
193 return 0; 194 return 0;
194 } 195 }
195 return SendWindow() - bytes_in_flight_; 196 return SendWindow() - bytes_in_flight_;
196 } 197 }
197 198
198 QuicByteCount TcpCubicSender::SendWindow() { 199 QuicByteCount TcpCubicSender::SendWindow() {
199 // What's the current send window in bytes. 200 // What's the current send window in bytes.
200 return std::min(receive_window_, GetCongestionWindow()); 201 return min(receive_window_, GetCongestionWindow());
201 } 202 }
202 203
203 QuicBandwidth TcpCubicSender::BandwidthEstimate() const { 204 QuicBandwidth TcpCubicSender::BandwidthEstimate() const {
204 return QuicBandwidth::FromBytesAndTimeDelta(GetCongestionWindow(), 205 return QuicBandwidth::FromBytesAndTimeDelta(GetCongestionWindow(),
205 SmoothedRtt()); 206 SmoothedRtt());
206 } 207 }
207 208
208 QuicTime::Delta TcpCubicSender::SmoothedRtt() const { 209 QuicTime::Delta TcpCubicSender::SmoothedRtt() const {
209 if (smoothed_rtt_.IsZero()) { 210 if (smoothed_rtt_.IsZero()) {
210 return QuicTime::Delta::FromMilliseconds(kInitialRttMs); 211 return QuicTime::Delta::FromMilliseconds(kInitialRttMs);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 if (reno_) { 262 if (reno_) {
262 // Classic Reno congestion avoidance provided for testing. 263 // Classic Reno congestion avoidance provided for testing.
263 if (congestion_window_count_ >= congestion_window_) { 264 if (congestion_window_count_ >= congestion_window_) {
264 congestion_window_++; 265 congestion_window_++;
265 congestion_window_count_ = 0; 266 congestion_window_count_ = 0;
266 } else { 267 } else {
267 congestion_window_count_++; 268 congestion_window_count_++;
268 } 269 }
269 DVLOG(1) << "Reno; congestion window:" << congestion_window_; 270 DVLOG(1) << "Reno; congestion window:" << congestion_window_;
270 } else { 271 } else {
271 congestion_window_ = std::min( 272 congestion_window_ = min(
272 max_tcp_congestion_window_, 273 max_tcp_congestion_window_,
273 cubic_.CongestionWindowAfterAck(congestion_window_, delay_min_)); 274 cubic_.CongestionWindowAfterAck(congestion_window_, delay_min_));
274 DVLOG(1) << "Cubic; congestion window:" << congestion_window_; 275 DVLOG(1) << "Cubic; congestion window:" << congestion_window_;
275 } 276 }
276 } 277 }
277 } 278 }
278 } 279 }
279 280
280 void TcpCubicSender::OnRetransmissionTimeout() { 281 void TcpCubicSender::OnRetransmissionTimeout() {
281 cubic_.Reset(); 282 cubic_.Reset();
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 hybrid_slow_start_.Reset(end_sequence_number_); 323 hybrid_slow_start_.Reset(end_sequence_number_);
323 } 324 }
324 hybrid_slow_start_.Update(rtt, delay_min_); 325 hybrid_slow_start_.Update(rtt, delay_min_);
325 if (hybrid_slow_start_.Exit()) { 326 if (hybrid_slow_start_.Exit()) {
326 slowstart_threshold_ = congestion_window_; 327 slowstart_threshold_ = congestion_window_;
327 } 328 }
328 } 329 }
329 } 330 }
330 331
331 } // namespace net 332 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/send_algorithm_interface.cc ('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