OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/inter_arrival_sender.h" | 5 #include "net/quic/congestion_control/inter_arrival_sender.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 using std::max; | 9 using std::max; |
10 using std::min; | 10 using std::min; |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 << new_rate.ToKBitsPerSecond() << " Kbits/s " | 209 << new_rate.ToKBitsPerSecond() << " Kbits/s " |
210 << " available estimate:" | 210 << " available estimate:" |
211 << available_channel_estimate.ToKBitsPerSecond() << " Kbits/s " | 211 << available_channel_estimate.ToKBitsPerSecond() << " Kbits/s " |
212 << " channel estimate:" | 212 << " channel estimate:" |
213 << channel_estimate.ToKBitsPerSecond() << " Kbits/s "; | 213 << channel_estimate.ToKBitsPerSecond() << " Kbits/s "; |
214 return false; | 214 return false; |
215 } | 215 } |
216 | 216 |
217 void InterArrivalSender::OnPacketAcked( | 217 void InterArrivalSender::OnPacketAcked( |
218 QuicPacketSequenceNumber /*acked_sequence_number*/, | 218 QuicPacketSequenceNumber /*acked_sequence_number*/, |
219 QuicByteCount acked_bytes, | 219 QuicByteCount acked_bytes) { |
220 QuicTime::Delta rtt) { | |
221 // RTT can't be negative. | |
222 DCHECK_LE(0, rtt.ToMicroseconds()); | |
223 | |
224 if (probing_) { | 220 if (probing_) { |
225 probe_->OnAcknowledgedPacket(acked_bytes); | 221 probe_->OnAcknowledgedPacket(acked_bytes); |
226 } | 222 } |
227 | |
228 if (rtt.IsInfinite()) { | |
229 return; | |
230 } | |
231 | |
232 if (smoothed_rtt_.IsZero()) { | |
233 smoothed_rtt_ = rtt; | |
234 } else { | |
235 smoothed_rtt_ = QuicTime::Delta::FromMicroseconds( | |
236 kOneMinusAlpha * smoothed_rtt_.ToMicroseconds() + | |
237 kAlpha * rtt.ToMicroseconds()); | |
238 } | |
239 state_machine_->set_rtt(smoothed_rtt_); | |
240 } | 223 } |
241 | 224 |
242 void InterArrivalSender::OnPacketLost( | 225 void InterArrivalSender::OnPacketLost( |
243 QuicPacketSequenceNumber /*sequence_number*/, | 226 QuicPacketSequenceNumber /*sequence_number*/, |
244 QuicTime ack_receive_time) { | 227 QuicTime ack_receive_time) { |
245 // Packet loss was reported. | 228 // Packet loss was reported. |
246 if (!probing_) { | 229 if (!probing_) { |
247 if (!state_machine_->PacketLossEvent()) { | 230 if (!state_machine_->PacketLossEvent()) { |
248 // Less than one RTT since last PacketLossEvent. | 231 // Less than one RTT since last PacketLossEvent. |
249 return; | 232 return; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 } | 313 } |
331 break; | 314 break; |
332 } | 315 } |
333 bandwidth_usage_state_ = new_bandwidth_usage_state; | 316 bandwidth_usage_state_ = new_bandwidth_usage_state; |
334 } | 317 } |
335 | 318 |
336 QuicBandwidth InterArrivalSender::BandwidthEstimate() const { | 319 QuicBandwidth InterArrivalSender::BandwidthEstimate() const { |
337 return current_bandwidth_; | 320 return current_bandwidth_; |
338 } | 321 } |
339 | 322 |
| 323 void InterArrivalSender::UpdateRtt(QuicTime::Delta rtt) { |
| 324 // RTT can't be negative. |
| 325 DCHECK_LE(0, rtt.ToMicroseconds()); |
| 326 |
| 327 if (rtt.IsInfinite()) { |
| 328 return; |
| 329 } |
| 330 |
| 331 if (smoothed_rtt_.IsZero()) { |
| 332 smoothed_rtt_ = rtt; |
| 333 } else { |
| 334 smoothed_rtt_ = QuicTime::Delta::FromMicroseconds( |
| 335 kOneMinusAlpha * smoothed_rtt_.ToMicroseconds() + |
| 336 kAlpha * rtt.ToMicroseconds()); |
| 337 } |
| 338 state_machine_->set_rtt(smoothed_rtt_); |
| 339 } |
| 340 |
340 QuicTime::Delta InterArrivalSender::SmoothedRtt() const { | 341 QuicTime::Delta InterArrivalSender::SmoothedRtt() const { |
341 if (smoothed_rtt_.IsZero()) { | 342 if (smoothed_rtt_.IsZero()) { |
342 return QuicTime::Delta::FromMilliseconds(kInitialRttMs); | 343 return QuicTime::Delta::FromMilliseconds(kInitialRttMs); |
343 } | 344 } |
344 return smoothed_rtt_; | 345 return smoothed_rtt_; |
345 } | 346 } |
346 | 347 |
347 QuicTime::Delta InterArrivalSender::RetransmissionDelay() const { | 348 QuicTime::Delta InterArrivalSender::RetransmissionDelay() const { |
348 // TODO(pwestin): Calculate and return retransmission delay. | 349 // TODO(pwestin): Calculate and return retransmission delay. |
349 // Use 2 * the smoothed RTT for now. | 350 // Use 2 * the smoothed RTT for now. |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 bitrate_ramp_up_->Reset(new_rate, current_bandwidth_, channel_estimate); | 530 bitrate_ramp_up_->Reset(new_rate, current_bandwidth_, channel_estimate); |
530 if (new_rate != current_bandwidth_) { | 531 if (new_rate != current_bandwidth_) { |
531 current_bandwidth_ = new_rate; | 532 current_bandwidth_ = new_rate; |
532 paced_sender_->UpdateBandwidthEstimate(feedback_receive_time, | 533 paced_sender_->UpdateBandwidthEstimate(feedback_receive_time, |
533 current_bandwidth_); | 534 current_bandwidth_); |
534 state_machine_->DecreaseBitrateDecision(); | 535 state_machine_->DecreaseBitrateDecision(); |
535 } | 536 } |
536 } | 537 } |
537 | 538 |
538 } // namespace net | 539 } // namespace net |
OLD | NEW |