| OLD | NEW |
| 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/cubic.h" | 5 #include "net/quic/congestion_control/cubic.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 | 154 |
| 155 QuicPacketCount target_congestion_window = | 155 QuicPacketCount target_congestion_window = |
| 156 origin_point_congestion_window_ - delta_congestion_window; | 156 origin_point_congestion_window_ - delta_congestion_window; |
| 157 | 157 |
| 158 DCHECK_LT(0u, estimated_tcp_congestion_window_); | 158 DCHECK_LT(0u, estimated_tcp_congestion_window_); |
| 159 // With dynamic beta/alpha based on number of active streams, it is possible | 159 // With dynamic beta/alpha based on number of active streams, it is possible |
| 160 // for the required_ack_count to become much lower than acked_packets_count_ | 160 // for the required_ack_count to become much lower than acked_packets_count_ |
| 161 // suddenly, leading to more than one iteration through the following loop. | 161 // suddenly, leading to more than one iteration through the following loop. |
| 162 while (true) { | 162 while (true) { |
| 163 // Update estimated TCP congestion_window. | 163 // Update estimated TCP congestion_window. |
| 164 uint32 required_ack_count = | 164 QuicPacketCount required_ack_count = static_cast<QuicPacketCount>( |
| 165 estimated_tcp_congestion_window_ / Alpha(); | 165 estimated_tcp_congestion_window_ / Alpha()); |
| 166 if (acked_packets_count_ < required_ack_count) { | 166 if (acked_packets_count_ < required_ack_count) { |
| 167 break; | 167 break; |
| 168 } | 168 } |
| 169 acked_packets_count_ -= required_ack_count; | 169 acked_packets_count_ -= required_ack_count; |
| 170 estimated_tcp_congestion_window_++; | 170 estimated_tcp_congestion_window_++; |
| 171 } | 171 } |
| 172 | 172 |
| 173 // Update cubic mode and reno mode stats in QuicConnectionStats. | 173 // Update cubic mode and reno mode stats in QuicConnectionStats. |
| 174 UpdateCongestionControlStats(target_congestion_window, | 174 UpdateCongestionControlStats(target_congestion_window, |
| 175 estimated_tcp_congestion_window_); | 175 estimated_tcp_congestion_window_); |
| 176 | 176 |
| 177 // We have a new cubic congestion window. | 177 // We have a new cubic congestion window. |
| 178 last_target_congestion_window_ = target_congestion_window; | 178 last_target_congestion_window_ = target_congestion_window; |
| 179 | 179 |
| 180 // Compute target congestion_window based on cubic target and estimated TCP | 180 // Compute target congestion_window based on cubic target and estimated TCP |
| 181 // congestion_window, use highest (fastest). | 181 // congestion_window, use highest (fastest). |
| 182 if (target_congestion_window < estimated_tcp_congestion_window_) { | 182 if (target_congestion_window < estimated_tcp_congestion_window_) { |
| 183 target_congestion_window = estimated_tcp_congestion_window_; | 183 target_congestion_window = estimated_tcp_congestion_window_; |
| 184 } | 184 } |
| 185 | 185 |
| 186 DVLOG(1) << "Target congestion_window: " << target_congestion_window; | 186 DVLOG(1) << "Target congestion_window: " << target_congestion_window; |
| 187 return target_congestion_window; | 187 return target_congestion_window; |
| 188 } | 188 } |
| 189 | 189 |
| 190 } // namespace net | 190 } // namespace net |
| OLD | NEW |