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

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

Issue 131743009: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use size_t instead of int to fix win_x64 compile error Created 6 years, 11 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 using net::test::QuicTestWriter;
14
15 namespace net { 13 namespace net {
16 namespace tools { 14 namespace tools {
17 namespace test { 15 namespace test {
18 16
19 // 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
20 // it's writable again. 18 // it's writable again.
21 class WriteUnblockedAlarm : public QuicAlarm::Delegate { 19 class WriteUnblockedAlarm : public QuicAlarm::Delegate {
22 public: 20 public:
23 explicit WriteUnblockedAlarm(PacketDroppingTestWriter* writer) 21 explicit WriteUnblockedAlarm(PacketDroppingTestWriter* writer)
24 : writer_(writer) { } 22 : writer_(writer) { }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 fake_blocked_socket_percentage_(0), 55 fake_blocked_socket_percentage_(0),
58 fake_packet_reorder_percentage_(0), 56 fake_packet_reorder_percentage_(0),
59 fake_packet_delay_(QuicTime::Delta::Zero()), 57 fake_packet_delay_(QuicTime::Delta::Zero()),
60 fake_bandwidth_(QuicBandwidth::Zero()), 58 fake_bandwidth_(QuicBandwidth::Zero()),
61 buffer_size_(0) { 59 buffer_size_(0) {
62 uint32 seed = base::RandInt(0, std::numeric_limits<int32>::max()); 60 uint32 seed = base::RandInt(0, std::numeric_limits<int32>::max());
63 LOG(INFO) << "Seeding packet loss with " << seed; 61 LOG(INFO) << "Seeding packet loss with " << seed;
64 simple_random_.set_seed(seed); 62 simple_random_.set_seed(seed);
65 } 63 }
66 64
67 PacketDroppingTestWriter::~PacketDroppingTestWriter() { } 65 PacketDroppingTestWriter::~PacketDroppingTestWriter() {}
68 66
69 void PacketDroppingTestWriter::SetConnectionHelper( 67 void PacketDroppingTestWriter::SetConnectionHelper(
70 QuicEpollConnectionHelper* helper) { 68 QuicEpollConnectionHelper* helper) {
71 clock_ = helper->GetClock(); 69 clock_ = helper->GetClock();
72 write_unblocked_alarm_.reset( 70 write_unblocked_alarm_.reset(
73 helper->CreateAlarm(new WriteUnblockedAlarm(this))); 71 helper->CreateAlarm(new WriteUnblockedAlarm(this)));
74 delay_alarm_.reset( 72 delay_alarm_.reset(
75 helper->CreateAlarm(new DelayAlarm(this))); 73 helper->CreateAlarm(new DelayAlarm(this)));
76 } 74 }
77 75
78 WriteResult PacketDroppingTestWriter::WritePacket( 76 WriteResult PacketDroppingTestWriter::WritePacket(
79 const char* buffer, size_t buf_len, 77 const char* buffer,
78 size_t buf_len,
80 const net::IPAddressNumber& self_address, 79 const net::IPAddressNumber& self_address,
81 const net::IPEndPoint& peer_address, 80 const net::IPEndPoint& peer_address,
82 QuicBlockedWriterInterface* blocked_writer) { 81 QuicBlockedWriterInterface* blocked_writer) {
83 ReleaseOldPackets(); 82 ReleaseOldPackets();
84 83
85 base::AutoLock locked(config_mutex_); 84 base::AutoLock locked(config_mutex_);
86 if (fake_packet_loss_percentage_ > 0 && 85 if (fake_packet_loss_percentage_ > 0 &&
87 simple_random_.RandUint64() % 100 < 86 simple_random_.RandUint64() % 100 <
88 static_cast<uint64>(fake_packet_loss_percentage_)) { 87 static_cast<uint64>(fake_packet_loss_percentage_)) {
89 DLOG(INFO) << "Dropping packet."; 88 DLOG(INFO) << "Dropping packet.";
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 cur_buffer_size_ += buf_len; 125 cur_buffer_size_ += buf_len;
127 126
128 // Set the alarm if it's not yet set. 127 // Set the alarm if it's not yet set.
129 if (!delay_alarm_->IsSet()) { 128 if (!delay_alarm_->IsSet()) {
130 delay_alarm_->Set(send_time); 129 delay_alarm_->Set(send_time);
131 } 130 }
132 131
133 return WriteResult(WRITE_STATUS_OK, buf_len); 132 return WriteResult(WRITE_STATUS_OK, buf_len);
134 } 133 }
135 134
136 return writer()->WritePacket(buffer, buf_len, self_address, peer_address, 135 return QuicPacketWriterWrapper::WritePacket(
137 blocked_writer); 136 buffer, buf_len, self_address, peer_address, blocked_writer);
138 }
139
140 bool PacketDroppingTestWriter::IsWriteBlockedDataBuffered() const {
141 return false;
142 } 137 }
143 138
144 QuicTime PacketDroppingTestWriter::ReleaseNextPacket() { 139 QuicTime PacketDroppingTestWriter::ReleaseNextPacket() {
145 if (delayed_packets_.empty()) { 140 if (delayed_packets_.empty()) {
146 return QuicTime::Zero(); 141 return QuicTime::Zero();
147 } 142 }
148 base::AutoLock locked(config_mutex_); 143 base::AutoLock locked(config_mutex_);
149 DelayedPacketList::iterator iter = delayed_packets_.begin(); 144 DelayedPacketList::iterator iter = delayed_packets_.begin();
150 // Determine if we should re-order. 145 // Determine if we should re-order.
151 if (delayed_packets_.size() > 1 && fake_packet_reorder_percentage_ > 0 && 146 if (delayed_packets_.size() > 1 && fake_packet_reorder_percentage_ > 0 &&
152 simple_random_.RandUint64() % 100 < 147 simple_random_.RandUint64() % 100 <
153 static_cast<uint64>(fake_packet_reorder_percentage_)) { 148 static_cast<uint64>(fake_packet_reorder_percentage_)) {
154 DLOG(INFO) << "Reordering packets."; 149 DLOG(INFO) << "Reordering packets.";
155 ++iter; 150 ++iter;
156 // Swap the send times when re-ordering packets. 151 // Swap the send times when re-ordering packets.
157 delayed_packets_.begin()->send_time = iter->send_time; 152 delayed_packets_.begin()->send_time = iter->send_time;
158 } 153 }
159 154
160 DLOG(INFO) << "Releasing packet. " << (delayed_packets_.size() - 1) 155 DLOG(INFO) << "Releasing packet. " << (delayed_packets_.size() - 1)
161 << " remaining."; 156 << " remaining.";
162 // Grab the next one off the queue and send it. 157 // Grab the next one off the queue and send it.
163 writer()->WritePacket(iter->buffer.data(), iter->buffer.length(), 158 QuicPacketWriterWrapper::WritePacket(
164 iter->self_address, iter->peer_address, NULL); 159 iter->buffer.data(), iter->buffer.length(),
160 iter->self_address, iter->peer_address, NULL);
165 DCHECK_GE(cur_buffer_size_, iter->buffer.length()); 161 DCHECK_GE(cur_buffer_size_, iter->buffer.length());
166 cur_buffer_size_ -= iter->buffer.length(); 162 cur_buffer_size_ -= iter->buffer.length();
167 delayed_packets_.erase(iter); 163 delayed_packets_.erase(iter);
168 164
169 // If there are others, find the time for the next to be sent. 165 // If there are others, find the time for the next to be sent.
170 if (delayed_packets_.empty()) { 166 if (delayed_packets_.empty()) {
171 return QuicTime::Zero(); 167 return QuicTime::Zero();
172 } 168 }
173 return delayed_packets_.begin()->send_time; 169 return delayed_packets_.begin()->send_time;
174 } 170 }
(...skipping 19 matching lines...) Expand all
194 self_address(self_address), 190 self_address(self_address),
195 peer_address(peer_address), 191 peer_address(peer_address),
196 send_time(send_time) { 192 send_time(send_time) {
197 } 193 }
198 194
199 PacketDroppingTestWriter::DelayedWrite::~DelayedWrite() {} 195 PacketDroppingTestWriter::DelayedWrite::~DelayedWrite() {}
200 196
201 } // namespace test 197 } // namespace test
202 } // namespace tools 198 } // namespace tools
203 } // namespace net 199 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/test_tools/packet_dropping_test_writer.h ('k') | net/tools/quic/test_tools/quic_dispatcher_peer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698