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

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

Issue 340433002: Port QuicServer to Chrome network stack (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments and fix blocked writers using callbacks 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
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"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 helper->CreateAlarm(new WriteUnblockedAlarm(this))); 71 helper->CreateAlarm(new WriteUnblockedAlarm(this)));
72 delay_alarm_.reset( 72 delay_alarm_.reset(
73 helper->CreateAlarm(new DelayAlarm(this))); 73 helper->CreateAlarm(new DelayAlarm(this)));
74 on_can_write_.reset(on_can_write); 74 on_can_write_.reset(on_can_write);
75 } 75 }
76 76
77 WriteResult PacketDroppingTestWriter::WritePacket( 77 WriteResult PacketDroppingTestWriter::WritePacket(
78 const char* buffer, 78 const char* buffer,
79 size_t buf_len, 79 size_t buf_len,
80 const net::IPAddressNumber& self_address, 80 const net::IPAddressNumber& self_address,
81 const net::IPEndPoint& peer_address) { 81 const net::IPEndPoint& peer_address,
82 base::Callback<void(WriteResult wr)> callback) {
82 ReleaseOldPackets(); 83 ReleaseOldPackets();
83 84
84 base::AutoLock locked(config_mutex_); 85 base::AutoLock locked(config_mutex_);
85 if (fake_packet_loss_percentage_ > 0 && 86 if (fake_packet_loss_percentage_ > 0 &&
86 simple_random_.RandUint64() % 100 < 87 simple_random_.RandUint64() % 100 <
87 static_cast<uint64>(fake_packet_loss_percentage_)) { 88 static_cast<uint64>(fake_packet_loss_percentage_)) {
88 DVLOG(1) << "Dropping packet."; 89 DVLOG(1) << "Dropping packet.";
89 return WriteResult(WRITE_STATUS_OK, buf_len); 90 return WriteResult(WRITE_STATUS_OK, buf_len);
90 } 91 }
91 if (fake_blocked_socket_percentage_ > 0 && 92 if (fake_blocked_socket_percentage_ > 0 &&
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 125
125 // Set the alarm if it's not yet set. 126 // Set the alarm if it's not yet set.
126 if (!delay_alarm_->IsSet()) { 127 if (!delay_alarm_->IsSet()) {
127 delay_alarm_->Set(send_time); 128 delay_alarm_->Set(send_time);
128 } 129 }
129 130
130 return WriteResult(WRITE_STATUS_OK, buf_len); 131 return WriteResult(WRITE_STATUS_OK, buf_len);
131 } 132 }
132 133
133 return QuicPacketWriterWrapper::WritePacket( 134 return QuicPacketWriterWrapper::WritePacket(
134 buffer, buf_len, self_address, peer_address); 135 buffer, buf_len, self_address, peer_address, callback);
135 } 136 }
136 137
137 bool PacketDroppingTestWriter::IsWriteBlocked() const { 138 bool PacketDroppingTestWriter::IsWriteBlocked() const {
138 if (write_unblocked_alarm_.get() != NULL && write_unblocked_alarm_->IsSet()) { 139 if (write_unblocked_alarm_.get() != NULL && write_unblocked_alarm_->IsSet()) {
139 return true; 140 return true;
140 } 141 }
141 return QuicPacketWriterWrapper::IsWriteBlocked(); 142 return QuicPacketWriterWrapper::IsWriteBlocked();
142 } 143 }
143 144
144 void PacketDroppingTestWriter::SetWritable() { 145 void PacketDroppingTestWriter::SetWritable() {
(...skipping 17 matching lines...) Expand all
162 ++iter; 163 ++iter;
163 // Swap the send times when re-ordering packets. 164 // Swap the send times when re-ordering packets.
164 delayed_packets_.begin()->send_time = iter->send_time; 165 delayed_packets_.begin()->send_time = iter->send_time;
165 } 166 }
166 167
167 DVLOG(1) << "Releasing packet. " << (delayed_packets_.size() - 1) 168 DVLOG(1) << "Releasing packet. " << (delayed_packets_.size() - 1)
168 << " remaining."; 169 << " remaining.";
169 // Grab the next one off the queue and send it. 170 // Grab the next one off the queue and send it.
170 QuicPacketWriterWrapper::WritePacket( 171 QuicPacketWriterWrapper::WritePacket(
171 iter->buffer.data(), iter->buffer.length(), 172 iter->buffer.data(), iter->buffer.length(),
172 iter->self_address, iter->peer_address); 173 iter->self_address, iter->peer_address,
174 base::Callback<void(WriteResult wr)>());
173 DCHECK_GE(cur_buffer_size_, iter->buffer.length()); 175 DCHECK_GE(cur_buffer_size_, iter->buffer.length());
174 cur_buffer_size_ -= iter->buffer.length(); 176 cur_buffer_size_ -= iter->buffer.length();
175 delayed_packets_.erase(iter); 177 delayed_packets_.erase(iter);
176 178
177 // If there are others, find the time for the next to be sent. 179 // If there are others, find the time for the next to be sent.
178 if (delayed_packets_.empty()) { 180 if (delayed_packets_.empty()) {
179 return QuicTime::Zero(); 181 return QuicTime::Zero();
180 } 182 }
181 return delayed_packets_.begin()->send_time; 183 return delayed_packets_.begin()->send_time;
182 } 184 }
(...skipping 22 matching lines...) Expand all
205 : buffer(buffer, buf_len), 207 : buffer(buffer, buf_len),
206 self_address(self_address), 208 self_address(self_address),
207 peer_address(peer_address), 209 peer_address(peer_address),
208 send_time(send_time) {} 210 send_time(send_time) {}
209 211
210 PacketDroppingTestWriter::DelayedWrite::~DelayedWrite() {} 212 PacketDroppingTestWriter::DelayedWrite::~DelayedWrite() {}
211 213
212 } // namespace test 214 } // namespace test
213 } // namespace tools 215 } // namespace tools
214 } // namespace net 216 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698