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 |