OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/send_algorithm_simulator.h" | 5 #include "net/quic/congestion_control/send_algorithm_simulator.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 // Record initial stats from when the transfer begins. | 66 // Record initial stats from when the transfer begins. |
67 pending_transfers_.back().sender->RecordStats(); | 67 pending_transfers_.back().sender->RecordStats(); |
68 } | 68 } |
69 | 69 |
70 void SendAlgorithmSimulator::TransferBytes() { | 70 void SendAlgorithmSimulator::TransferBytes() { |
71 TransferBytes(kuint64max, QuicTime::Delta::Infinite()); | 71 TransferBytes(kuint64max, QuicTime::Delta::Infinite()); |
72 } | 72 } |
73 | 73 |
74 void SendAlgorithmSimulator::TransferBytes(QuicByteCount max_bytes, | 74 void SendAlgorithmSimulator::TransferBytes(QuicByteCount max_bytes, |
75 QuicTime::Delta max_time) { | 75 QuicTime::Delta max_time) { |
76 const QuicTime end_time = clock_->Now().Add(max_time); | 76 const QuicTime end_time = max_time.IsInfinite() ? |
| 77 QuicTime::Zero().Add(QuicTime::Delta::Infinite()) : |
| 78 clock_->Now().Add(max_time); |
77 QuicByteCount bytes_sent = 0; | 79 QuicByteCount bytes_sent = 0; |
78 while (!pending_transfers_.empty() && | 80 while (!pending_transfers_.empty() && |
79 clock_->Now() < end_time && | 81 clock_->Now() < end_time && |
80 bytes_sent < max_bytes) { | 82 bytes_sent < max_bytes) { |
81 // Determine the times of next send and of the next ack arrival. | 83 // Determine the times of next send and of the next ack arrival. |
82 PacketEvent send_event = NextSendEvent(); | 84 PacketEvent send_event = NextSendEvent(); |
83 PacketEvent ack_event = NextAckEvent(); | 85 PacketEvent ack_event = NextAckEvent(); |
84 // If both times are infinite, fire a TLP. | 86 // If both times are infinite, fire a TLP. |
85 if (ack_event.time_delta.IsInfinite() && | 87 if (ack_event.time_delta.IsInfinite() && |
86 send_event.time_delta.IsInfinite()) { | 88 send_event.time_delta.IsInfinite()) { |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 } | 335 } |
334 transfer->bytes_in_flight += kPacketSize; | 336 transfer->bytes_in_flight += kPacketSize; |
335 } | 337 } |
336 | 338 |
337 // Advance the time by |delta| without sending anything. | 339 // Advance the time by |delta| without sending anything. |
338 void SendAlgorithmSimulator::AdvanceTime(QuicTime::Delta delta) { | 340 void SendAlgorithmSimulator::AdvanceTime(QuicTime::Delta delta) { |
339 clock_->AdvanceTime(delta); | 341 clock_->AdvanceTime(delta); |
340 } | 342 } |
341 | 343 |
342 } // namespace net | 344 } // namespace net |
OLD | NEW |