| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 // BBR (Bottleneck Bandwidth and RTT) congestion control algorithm. | 5 // BBR (Bottleneck Bandwidth and RTT) congestion control algorithm. |
| 6 | 6 |
| 7 #ifndef NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ | 7 #ifndef NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ |
| 8 #define NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ | 8 #define NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ |
| 9 | 9 |
| 10 #include <cstdint> | 10 #include <cstdint> |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 // Decides whether to enter or exit PROBE_RTT. | 189 // Decides whether to enter or exit PROBE_RTT. |
| 190 void MaybeEnterOrExitProbeRtt(QuicTime now, | 190 void MaybeEnterOrExitProbeRtt(QuicTime now, |
| 191 bool is_round_start, | 191 bool is_round_start, |
| 192 bool min_rtt_expired); | 192 bool min_rtt_expired); |
| 193 // Determines whether BBR needs to enter, exit or advance state of the | 193 // Determines whether BBR needs to enter, exit or advance state of the |
| 194 // recovery. | 194 // recovery. |
| 195 void UpdateRecoveryState(QuicPacketNumber last_acked_packet, | 195 void UpdateRecoveryState(QuicPacketNumber last_acked_packet, |
| 196 bool has_losses, | 196 bool has_losses, |
| 197 bool is_round_start); | 197 bool is_round_start); |
| 198 | 198 |
| 199 // Updates the ack spacing max filter if a larger value is observed. | |
| 200 void UpdateAckSpacing(QuicTime ack_time, | |
| 201 QuicPacketNumber largest_newly_acked, | |
| 202 const CongestionVector& acked_packets); | |
| 203 | |
| 204 // Updates the ack aggregation max filter in bytes. | 199 // Updates the ack aggregation max filter in bytes. |
| 205 void UpdateAckAggregationBytes(QuicTime ack_time, | 200 void UpdateAckAggregationBytes(QuicTime ack_time, |
| 206 QuicByteCount newly_acked_bytes); | 201 QuicByteCount newly_acked_bytes); |
| 207 | 202 |
| 208 // Determines the appropriate pacing rate for the connection. | 203 // Determines the appropriate pacing rate for the connection. |
| 209 void CalculatePacingRate(); | 204 void CalculatePacingRate(); |
| 210 // Determines the appropriate congestion window for the connection. | 205 // Determines the appropriate congestion window for the connection. |
| 211 void CalculateCongestionWindow(QuicByteCount bytes_acked); | 206 void CalculateCongestionWindow(QuicByteCount bytes_acked); |
| 212 // Determines the approriate window that constrains the in-flight during | 207 // Determines the approriate window that constrains the in-flight during |
| 213 // recovery. | 208 // recovery. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 229 // The packet number of the most recently sent packet. | 224 // The packet number of the most recently sent packet. |
| 230 QuicPacketNumber last_sent_packet_; | 225 QuicPacketNumber last_sent_packet_; |
| 231 // Acknowledgement of any packet after |current_round_trip_end_| will cause | 226 // Acknowledgement of any packet after |current_round_trip_end_| will cause |
| 232 // the round trip counter to advance. | 227 // the round trip counter to advance. |
| 233 QuicPacketCount current_round_trip_end_; | 228 QuicPacketCount current_round_trip_end_; |
| 234 | 229 |
| 235 // The filter that tracks the maximum bandwidth over the multiple recent | 230 // The filter that tracks the maximum bandwidth over the multiple recent |
| 236 // round-trips. | 231 // round-trips. |
| 237 MaxBandwidthFilter max_bandwidth_; | 232 MaxBandwidthFilter max_bandwidth_; |
| 238 | 233 |
| 239 // Tracks the maximum spacing between two acks acknowledging in order packets. | |
| 240 MaxAckDelayFilter max_ack_spacing_; | |
| 241 | |
| 242 // The time the largest acked packet was acked and when it was sent. | |
| 243 QuicTime largest_acked_time_; | |
| 244 QuicTime largest_acked_sent_time_; | |
| 245 | |
| 246 // Tracks the maximum number of bytes acked faster than the sending rate. | 234 // Tracks the maximum number of bytes acked faster than the sending rate. |
| 247 MaxAckHeightFilter max_ack_height_; | 235 MaxAckHeightFilter max_ack_height_; |
| 248 | 236 |
| 249 // The time this aggregation started and the number of bytes acked during it. | 237 // The time this aggregation started and the number of bytes acked during it. |
| 250 QuicTime aggregation_epoch_start_time_; | 238 QuicTime aggregation_epoch_start_time_; |
| 251 QuicByteCount aggregation_epoch_bytes_; | 239 QuicByteCount aggregation_epoch_bytes_; |
| 252 | 240 |
| 253 // Minimum RTT estimate. Automatically expires within 10 seconds (and | 241 // Minimum RTT estimate. Automatically expires within 10 seconds (and |
| 254 // triggers PROBE_RTT mode) if no new value is sampled during that period. | 242 // triggers PROBE_RTT mode) if no new value is sampled during that period. |
| 255 QuicTime::Delta min_rtt_; | 243 QuicTime::Delta min_rtt_; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 | 310 |
| 323 QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, | 311 QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, |
| 324 const BbrSender::Mode& mode); | 312 const BbrSender::Mode& mode); |
| 325 QUIC_EXPORT_PRIVATE std::ostream& operator<<( | 313 QUIC_EXPORT_PRIVATE std::ostream& operator<<( |
| 326 std::ostream& os, | 314 std::ostream& os, |
| 327 const BbrSender::DebugState& state); | 315 const BbrSender::DebugState& state); |
| 328 | 316 |
| 329 } // namespace net | 317 } // namespace net |
| 330 | 318 |
| 331 #endif // NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ | 319 #endif // NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ |
| OLD | NEW |