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

Side by Side Diff: net/tools/quic/test_tools/packet_dropping_test_writer.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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/tools/quic/test_tools/packet_dropping_test_writer.h" 5 #include "net/tools/quic/test_tools/packet_dropping_test_writer.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/rand_util.h" 9 #include "base/rand_util.h"
10 #include "net/tools/quic/quic_epoll_connection_helper.h" 10 #include "net/tools/quic/quic_epoll_connection_helper.h"
11 #include "net/tools/quic/quic_socket_utils.h" 11 #include "net/tools/quic/quic_socket_utils.h"
12 12
13 namespace net { 13 namespace net {
14 namespace tools { 14 namespace tools {
15 namespace test { 15 namespace test {
16 16
17 // An alarm that is scheduled if a blocked socket is simulated to indicate 17 // An alarm that is scheduled if a blocked socket is simulated to indicate
18 // it's writable again. 18 // it's writable again.
19 class WriteUnblockedAlarm : public QuicAlarm::Delegate { 19 class WriteUnblockedAlarm : public QuicAlarm::Delegate {
20 public: 20 public:
21 explicit WriteUnblockedAlarm(PacketDroppingTestWriter* writer) 21 explicit WriteUnblockedAlarm(PacketDroppingTestWriter* writer)
22 : writer_(writer) { } 22 : writer_(writer) {}
23 23
24 virtual QuicTime OnAlarm() OVERRIDE { 24 virtual QuicTime OnAlarm() OVERRIDE {
25 DVLOG(1) << "Unblocking socket."; 25 DVLOG(1) << "Unblocking socket.";
26 writer_->OnCanWrite(); 26 writer_->OnCanWrite();
27 return QuicTime::Zero(); 27 return QuicTime::Zero();
28 } 28 }
29 29
30 private: 30 private:
31 PacketDroppingTestWriter* writer_; 31 PacketDroppingTestWriter* writer_;
32 }; 32 };
33 33
34 // An alarm that is scheduled every time a new packet is to be written at a 34 // An alarm that is scheduled every time a new packet is to be written at a
35 // later point. 35 // later point.
36 class DelayAlarm : public QuicAlarm::Delegate { 36 class DelayAlarm : public QuicAlarm::Delegate {
37 public: 37 public:
38 explicit DelayAlarm(PacketDroppingTestWriter* writer) 38 explicit DelayAlarm(PacketDroppingTestWriter* writer) : writer_(writer) {}
39 : writer_(writer) { }
40 39
41 virtual QuicTime OnAlarm() OVERRIDE { 40 virtual QuicTime OnAlarm() OVERRIDE { return writer_->ReleaseOldPackets(); }
42 return writer_->ReleaseOldPackets();
43 }
44 41
45 private: 42 private:
46 PacketDroppingTestWriter* writer_; 43 PacketDroppingTestWriter* writer_;
47 }; 44 };
48 45
49 PacketDroppingTestWriter::PacketDroppingTestWriter() 46 PacketDroppingTestWriter::PacketDroppingTestWriter()
50 : clock_(NULL), 47 : clock_(NULL),
51 cur_buffer_size_(0), 48 cur_buffer_size_(0),
52 config_mutex_(), 49 config_mutex_(),
53 fake_packet_loss_percentage_(0), 50 fake_packet_loss_percentage_(0),
54 fake_blocked_socket_percentage_(0), 51 fake_blocked_socket_percentage_(0),
55 fake_packet_reorder_percentage_(0), 52 fake_packet_reorder_percentage_(0),
56 fake_packet_delay_(QuicTime::Delta::Zero()), 53 fake_packet_delay_(QuicTime::Delta::Zero()),
57 fake_bandwidth_(QuicBandwidth::Zero()), 54 fake_bandwidth_(QuicBandwidth::Zero()),
58 buffer_size_(0) { 55 buffer_size_(0) {
59 uint32 seed = base::RandInt(0, std::numeric_limits<int32>::max()); 56 uint32 seed = base::RandInt(0, std::numeric_limits<int32>::max());
60 VLOG(1) << "Seeding packet loss with " << seed; 57 VLOG(1) << "Seeding packet loss with " << seed;
61 simple_random_.set_seed(seed); 58 simple_random_.set_seed(seed);
62 } 59 }
63 60
64 PacketDroppingTestWriter::~PacketDroppingTestWriter() {} 61 PacketDroppingTestWriter::~PacketDroppingTestWriter() {
62 }
65 63
66 void PacketDroppingTestWriter::Initialize( 64 void PacketDroppingTestWriter::Initialize(QuicEpollConnectionHelper* helper,
67 QuicEpollConnectionHelper* helper, 65 Delegate* on_can_write) {
68 Delegate* on_can_write) {
69 clock_ = helper->GetClock(); 66 clock_ = helper->GetClock();
70 write_unblocked_alarm_.reset( 67 write_unblocked_alarm_.reset(
71 helper->CreateAlarm(new WriteUnblockedAlarm(this))); 68 helper->CreateAlarm(new WriteUnblockedAlarm(this)));
72 delay_alarm_.reset( 69 delay_alarm_.reset(helper->CreateAlarm(new DelayAlarm(this)));
73 helper->CreateAlarm(new DelayAlarm(this)));
74 on_can_write_.reset(on_can_write); 70 on_can_write_.reset(on_can_write);
75 } 71 }
76 72
77 WriteResult PacketDroppingTestWriter::WritePacket( 73 WriteResult PacketDroppingTestWriter::WritePacket(
78 const char* buffer, 74 const char* buffer,
79 size_t buf_len, 75 size_t buf_len,
80 const net::IPAddressNumber& self_address, 76 const net::IPAddressNumber& self_address,
81 const net::IPEndPoint& peer_address) { 77 const net::IPEndPoint& peer_address) {
82 ReleaseOldPackets(); 78 ReleaseOldPackets();
83 79
(...skipping 21 matching lines...) Expand all
105 // Drop packets which do not fit into the buffer. 101 // Drop packets which do not fit into the buffer.
106 DVLOG(1) << "Dropping packet because the buffer is full."; 102 DVLOG(1) << "Dropping packet because the buffer is full.";
107 return WriteResult(WRITE_STATUS_OK, buf_len); 103 return WriteResult(WRITE_STATUS_OK, buf_len);
108 } 104 }
109 105
110 // Queue it to be sent. 106 // Queue it to be sent.
111 QuicTime send_time = clock_->ApproximateNow().Add(fake_packet_delay_); 107 QuicTime send_time = clock_->ApproximateNow().Add(fake_packet_delay_);
112 if (!fake_bandwidth_.IsZero()) { 108 if (!fake_bandwidth_.IsZero()) {
113 // Calculate a time the bandwidth limit would impose. 109 // Calculate a time the bandwidth limit would impose.
114 QuicTime::Delta bandwidth_delay = QuicTime::Delta::FromMicroseconds( 110 QuicTime::Delta bandwidth_delay = QuicTime::Delta::FromMicroseconds(
115 (buf_len * kNumMicrosPerSecond) / 111 (buf_len * kNumMicrosPerSecond) / fake_bandwidth_.ToBytesPerSecond());
116 fake_bandwidth_.ToBytesPerSecond()); 112 send_time = delayed_packets_.empty()
117 send_time = delayed_packets_.empty() ? 113 ? send_time.Add(bandwidth_delay)
118 send_time.Add(bandwidth_delay) : 114 : delayed_packets_.back().send_time.Add(bandwidth_delay);
119 delayed_packets_.back().send_time.Add(bandwidth_delay);
120 } 115 }
121 delayed_packets_.push_back(DelayedWrite(buffer, buf_len, self_address, 116 delayed_packets_.push_back(
122 peer_address, send_time)); 117 DelayedWrite(buffer, buf_len, self_address, peer_address, send_time));
123 cur_buffer_size_ += buf_len; 118 cur_buffer_size_ += buf_len;
124 119
125 // Set the alarm if it's not yet set. 120 // Set the alarm if it's not yet set.
126 if (!delay_alarm_->IsSet()) { 121 if (!delay_alarm_->IsSet()) {
127 delay_alarm_->Set(send_time); 122 delay_alarm_->Set(send_time);
128 } 123 }
129 124
130 return WriteResult(WRITE_STATUS_OK, buf_len); 125 return WriteResult(WRITE_STATUS_OK, buf_len);
131 } 126 }
132 127
(...skipping 27 matching lines...) Expand all
160 static_cast<uint64>(fake_packet_reorder_percentage_)) { 155 static_cast<uint64>(fake_packet_reorder_percentage_)) {
161 DVLOG(1) << "Reordering packets."; 156 DVLOG(1) << "Reordering packets.";
162 ++iter; 157 ++iter;
163 // Swap the send times when re-ordering packets. 158 // Swap the send times when re-ordering packets.
164 delayed_packets_.begin()->send_time = iter->send_time; 159 delayed_packets_.begin()->send_time = iter->send_time;
165 } 160 }
166 161
167 DVLOG(1) << "Releasing packet. " << (delayed_packets_.size() - 1) 162 DVLOG(1) << "Releasing packet. " << (delayed_packets_.size() - 1)
168 << " remaining."; 163 << " remaining.";
169 // Grab the next one off the queue and send it. 164 // Grab the next one off the queue and send it.
170 QuicPacketWriterWrapper::WritePacket( 165 QuicPacketWriterWrapper::WritePacket(iter->buffer.data(),
171 iter->buffer.data(), iter->buffer.length(), 166 iter->buffer.length(),
172 iter->self_address, iter->peer_address); 167 iter->self_address,
168 iter->peer_address);
173 DCHECK_GE(cur_buffer_size_, iter->buffer.length()); 169 DCHECK_GE(cur_buffer_size_, iter->buffer.length());
174 cur_buffer_size_ -= iter->buffer.length(); 170 cur_buffer_size_ -= iter->buffer.length();
175 delayed_packets_.erase(iter); 171 delayed_packets_.erase(iter);
176 172
177 // If there are others, find the time for the next to be sent. 173 // If there are others, find the time for the next to be sent.
178 if (delayed_packets_.empty()) { 174 if (delayed_packets_.empty()) {
179 return QuicTime::Zero(); 175 return QuicTime::Zero();
180 } 176 }
181 return delayed_packets_.begin()->send_time; 177 return delayed_packets_.begin()->send_time;
182 } 178 }
(...skipping 15 matching lines...) Expand all
198 194
199 PacketDroppingTestWriter::DelayedWrite::DelayedWrite( 195 PacketDroppingTestWriter::DelayedWrite::DelayedWrite(
200 const char* buffer, 196 const char* buffer,
201 size_t buf_len, 197 size_t buf_len,
202 const net::IPAddressNumber& self_address, 198 const net::IPAddressNumber& self_address,
203 const net::IPEndPoint& peer_address, 199 const net::IPEndPoint& peer_address,
204 QuicTime send_time) 200 QuicTime send_time)
205 : buffer(buffer, buf_len), 201 : buffer(buffer, buf_len),
206 self_address(self_address), 202 self_address(self_address),
207 peer_address(peer_address), 203 peer_address(peer_address),
208 send_time(send_time) {} 204 send_time(send_time) {
205 }
209 206
210 PacketDroppingTestWriter::DelayedWrite::~DelayedWrite() {} 207 PacketDroppingTestWriter::DelayedWrite::~DelayedWrite() {
208 }
211 209
212 } // namespace test 210 } // namespace test
213 } // namespace tools 211 } // namespace tools
214 } // namespace net 212 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698