Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Side by Side Diff: net/quic/congestion_control/send_algorithm_simulator.h

Issue 330333006: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed wtc's comments for Patch Set 1 Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 // A test only class to enable simulations of send algorithms.
6
7 #ifndef NET_QUIC_CONGESTION_CONTROL_SEND_ALGORITHM_SIMULATOR_H_
8 #define NET_QUIC_CONGESTION_CONTROL_SEND_ALGORITHM_SIMULATOR_H_
9
10 #include <algorithm>
11
12 #include "base/basictypes.h"
13 #include "net/quic/congestion_control/send_algorithm_interface.h"
14 #include "net/quic/quic_protocol.h"
15 #include "net/quic/quic_time.h"
16 #include "net/quic/test_tools/mock_clock.h"
17 #include "net/quic/test_tools/quic_test_utils.h"
18
19 namespace net {
20
21 class NET_EXPORT_PRIVATE SendAlgorithmSimulator {
22 public:
23 struct SentPacket {
24 SentPacket(QuicPacketSequenceNumber sequence_number,
25 QuicTime send_time,
26 QuicTime ack_time) :
27 sequence_number(sequence_number),
28 send_time(send_time),
29 ack_time(ack_time) {}
30 QuicPacketSequenceNumber sequence_number;
31 QuicTime send_time;
32 QuicTime ack_time;
33 };
34
35 // |rtt_stats| should be the same RttStats used by the |send_algorithm|.
36 SendAlgorithmSimulator(SendAlgorithmInterface* send_algorithm,
37 MockClock* clock_,
38 RttStats* rtt_stats,
39 QuicBandwidth bandwidth,
40 QuicTime::Delta rtt);
41 ~SendAlgorithmSimulator();
42
43 void set_forward_loss_rate(float loss_rate) {
44 DCHECK_LT(loss_rate, 1.0f);
45 forward_loss_rate_ = loss_rate;
46 }
47
48 void set_reverse_loss_rate(float loss_rate) {
49 DCHECK_LT(loss_rate, 1.0f);
50 reverse_loss_rate_ = loss_rate;
51 }
52
53 void set_loss_correlation(float loss_correlation) {
54 DCHECK_LT(loss_correlation, 1.0f);
55 loss_correlation_ = loss_correlation;
56 }
57
58 void set_buffer_size(size_t buffer_size_bytes) {
59 buffer_size_ = buffer_size_bytes;
60 }
61
62 // Sends the specified number of bytes as quickly as possible and returns the
63 // average bandwidth in bytes per second. The time elapsed is based on
64 // waiting for all acks to arrive.
65 QuicBandwidth SendBytes(size_t num_bytes);
66
67 const RttStats* rtt_stats() { return rtt_stats_; }
wtc 2014/06/16 22:05:53 Nit: this getter method should also be const.
ramant (doing other things) 2014/06/16 23:46:52 Done.
68
69 QuicByteCount max_cwnd() const { return max_cwnd_; }
70 QuicByteCount min_cwnd() const { return min_cwnd_; }
71 QuicByteCount max_cwnd_drop() const { return max_cwnd_drop_; }
72 QuicByteCount last_cwnd() const { return last_cwnd_; }
73
74 private:
75 // NextAckTime takes into account packet loss in both forward and reverse
76 // direction, as well as delayed ack behavior.
77 QuicTime::Delta NextAckDelta();
78
79 // Whether all packets in sent_packets_ are lost.
80 bool AllPacketsLost();
81
82 // Sets the next acked.
83 void FindNextAcked();
84
85 // Process all the acks that should have arrived by the current time, and
86 // lose any packets that are missing. Returns the number of bytes acked.
87 int HandlePendingAck();
88
89 void SendDataNow();
90 void RecordStats();
91
92 // Advance the time by |delta| without sending anything.
93 void AdvanceTime(QuicTime::Delta delta);
94
95 // Elapsed time from the start of the connection.
96 QuicTime ElapsedTime();
97
98 SendAlgorithmInterface* send_algorithm_;
99 MockClock* clock_;
100 RttStats* rtt_stats_;
101 // Next packet sequence number to send.
102 QuicPacketSequenceNumber next_sent_;
103 // Last packet sequence number acked.
104 QuicPacketSequenceNumber last_acked_;
105 // Packet sequence number to ack up to.
106 QuicPacketSequenceNumber next_acked_;
107 // Whether the next ack should be lost.
108 bool lose_next_ack_;
109 QuicByteCount bytes_in_flight_;
110 // The times acks are expected, assuming acks are not lost and every packet
111 // is acked.
112 std::list<SentPacket> sent_packets_;
113
114 test::SimpleRandom simple_random_;
115 float forward_loss_rate_; // Loss rate on the forward path.
116 float reverse_loss_rate_; // Loss rate on the reverse path.
117 float loss_correlation_; // Likelihood the subsequent packet is lost.
118 QuicBandwidth bandwidth_;
119 QuicTime::Delta rtt_;
120 size_t buffer_size_; // In bytes.
121
122 // Stats collected for understanding the congestion control.
123 QuicByteCount max_cwnd_;
124 QuicByteCount min_cwnd_;
125 QuicByteCount max_cwnd_drop_;
126 QuicByteCount last_cwnd_;
127
128 DISALLOW_COPY_AND_ASSIGN(SendAlgorithmSimulator);
129 };
130
131 } // namespace net
132
133 #endif // NET_QUIC_CONGESTION_CONTROL_SEND_ALGORITHM_SIMULATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698