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

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

Issue 605163004: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0925
Patch Set: Created 6 years, 2 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
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 #include "net/quic/congestion_control/rtt_stats.h" 10 #include "net/quic/congestion_control/rtt_stats.h"
(...skipping 18 matching lines...) Expand all
29 const QuicClock* clock, 29 const QuicClock* clock,
30 const RttStats* rtt_stats, 30 const RttStats* rtt_stats,
31 bool reno, 31 bool reno,
32 QuicTcpCongestionWindow max_tcp_congestion_window, 32 QuicTcpCongestionWindow max_tcp_congestion_window,
33 QuicConnectionStats* stats) 33 QuicConnectionStats* stats)
34 : hybrid_slow_start_(clock), 34 : hybrid_slow_start_(clock),
35 cubic_(clock, stats), 35 cubic_(clock, stats),
36 rtt_stats_(rtt_stats), 36 rtt_stats_(rtt_stats),
37 stats_(stats), 37 stats_(stats),
38 reno_(reno), 38 reno_(reno),
39 num_connections_(2),
39 congestion_window_count_(0), 40 congestion_window_count_(0),
40 receive_window_(kDefaultSocketReceiveBuffer), 41 receive_window_(kDefaultSocketReceiveBuffer),
41 prr_out_(0), 42 prr_out_(0),
42 prr_delivered_(0), 43 prr_delivered_(0),
43 ack_count_since_loss_(0), 44 ack_count_since_loss_(0),
44 bytes_in_flight_before_loss_(0), 45 bytes_in_flight_before_loss_(0),
45 largest_sent_sequence_number_(0), 46 largest_sent_sequence_number_(0),
46 largest_acked_sequence_number_(0), 47 largest_acked_sequence_number_(0),
47 largest_sent_at_last_cutback_(0), 48 largest_sent_at_last_cutback_(0),
48 congestion_window_(kInitialCongestionWindow), 49 congestion_window_(kInitialCongestionWindow),
(...skipping 21 matching lines...) Expand all
70 congestion_window_ = min(kMaxInitialWindow, 71 congestion_window_ = min(kMaxInitialWindow,
71 config.ReceivedInitialCongestionWindow()); 72 config.ReceivedInitialCongestionWindow());
72 } 73 }
73 } 74 }
74 if (config.HasReceivedSocketReceiveBuffer()) { 75 if (config.HasReceivedSocketReceiveBuffer()) {
75 // Set the initial socket receive buffer size in bytes. 76 // Set the initial socket receive buffer size in bytes.
76 receive_window_ = config.ReceivedSocketReceiveBuffer(); 77 receive_window_ = config.ReceivedSocketReceiveBuffer();
77 } 78 }
78 } 79 }
79 80
81 void TcpCubicSender::SetNumEmulatedConnections(int num_connections) {
82 num_connections_ = max(1, num_connections);
83 cubic_.SetNumConnections(num_connections_);
84 }
85
80 void TcpCubicSender::OnIncomingQuicCongestionFeedbackFrame( 86 void TcpCubicSender::OnIncomingQuicCongestionFeedbackFrame(
81 const QuicCongestionFeedbackFrame& feedback, 87 const QuicCongestionFeedbackFrame& feedback,
82 QuicTime feedback_receive_time) { 88 QuicTime feedback_receive_time) {
83 if (feedback.type == kTCP) { 89 if (feedback.type == kTCP) {
84 receive_window_ = feedback.tcp.receive_window; 90 receive_window_ = feedback.tcp.receive_window;
85 } 91 }
86 } 92 }
87 93
88 void TcpCubicSender::OnCongestionEvent( 94 void TcpCubicSender::OnCongestionEvent(
89 bool rtt_updated, 95 bool rtt_updated,
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 } 272 }
267 DVLOG(1) << "Slow start; congestion window: " << congestion_window_ 273 DVLOG(1) << "Slow start; congestion window: " << congestion_window_
268 << " slowstart threshold: " << slowstart_threshold_; 274 << " slowstart threshold: " << slowstart_threshold_;
269 return; 275 return;
270 } 276 }
271 if (congestion_window_ >= max_tcp_congestion_window_) { 277 if (congestion_window_ >= max_tcp_congestion_window_) {
272 return; 278 return;
273 } 279 }
274 // Congestion avoidance 280 // Congestion avoidance
275 if (reno_) { 281 if (reno_) {
276 // Classic Reno congestion avoidance provided for testing. 282 // Classic Reno congestion avoidance.
277
278 ++congestion_window_count_; 283 ++congestion_window_count_;
279 if (congestion_window_count_ >= congestion_window_) { 284 // Divide by num_connections to smoothly increase the CWND at a faster
285 // rate than conventional Reno.
286 if (congestion_window_count_ * num_connections_ >= congestion_window_) {
280 ++congestion_window_; 287 ++congestion_window_;
281 congestion_window_count_ = 0; 288 congestion_window_count_ = 0;
282 } 289 }
283 290
284 DVLOG(1) << "Reno; congestion window: " << congestion_window_ 291 DVLOG(1) << "Reno; congestion window: " << congestion_window_
285 << " slowstart threshold: " << slowstart_threshold_ 292 << " slowstart threshold: " << slowstart_threshold_
286 << " congestion window count: " << congestion_window_count_; 293 << " congestion window count: " << congestion_window_count_;
287 } else { 294 } else {
288 congestion_window_ = min(max_tcp_congestion_window_, 295 congestion_window_ = min(max_tcp_congestion_window_,
289 cubic_.CongestionWindowAfterAck( 296 cubic_.CongestionWindowAfterAck(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 return QuicTime::Delta::Zero(); 361 return QuicTime::Delta::Zero();
355 } 362 }
356 return QuicTime::Delta::Infinite(); 363 return QuicTime::Delta::Infinite();
357 } 364 }
358 365
359 CongestionControlType TcpCubicSender::GetCongestionControlType() const { 366 CongestionControlType TcpCubicSender::GetCongestionControlType() const {
360 return reno_ ? kReno : kCubic; 367 return reno_ ? kReno : kCubic;
361 } 368 }
362 369
363 } // namespace net 370 } // 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