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

Side by Side Diff: media/cast/test/utility/udp_proxy.cc

Issue 655713003: Standardize usage of virtual/override/final in media/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 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 <math.h> 5 #include <math.h>
6 #include <stdlib.h> 6 #include <stdlib.h>
7 #include <vector> 7 #include <vector>
8 8
9 #include "media/cast/test/utility/udp_proxy.h" 9 #include "media/cast/test/utility/udp_proxy.h"
10 10
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 public: 49 public:
50 Buffer(size_t buffer_size, double max_megabits_per_second) 50 Buffer(size_t buffer_size, double max_megabits_per_second)
51 : buffer_size_(0), 51 : buffer_size_(0),
52 max_buffer_size_(buffer_size), 52 max_buffer_size_(buffer_size),
53 max_megabits_per_second_(max_megabits_per_second), 53 max_megabits_per_second_(max_megabits_per_second),
54 weak_factory_(this) { 54 weak_factory_(this) {
55 CHECK_GT(max_buffer_size_, 0UL); 55 CHECK_GT(max_buffer_size_, 0UL);
56 CHECK_GT(max_megabits_per_second, 0); 56 CHECK_GT(max_megabits_per_second, 0);
57 } 57 }
58 58
59 virtual void Send(scoped_ptr<Packet> packet) override { 59 void Send(scoped_ptr<Packet> packet) override {
60 if (packet->size() + buffer_size_ <= max_buffer_size_) { 60 if (packet->size() + buffer_size_ <= max_buffer_size_) {
61 buffer_size_ += packet->size(); 61 buffer_size_ += packet->size();
62 buffer_.push_back(linked_ptr<Packet>(packet.release())); 62 buffer_.push_back(linked_ptr<Packet>(packet.release()));
63 if (buffer_.size() == 1) { 63 if (buffer_.size() == 1) {
64 Schedule(); 64 Schedule();
65 } 65 }
66 } 66 }
67 } 67 }
68 68
69 private: 69 private:
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 109
110 scoped_ptr<PacketPipe> NewBuffer(size_t buffer_size, double bandwidth) { 110 scoped_ptr<PacketPipe> NewBuffer(size_t buffer_size, double bandwidth) {
111 return scoped_ptr<PacketPipe>(new Buffer(buffer_size, bandwidth)).Pass(); 111 return scoped_ptr<PacketPipe>(new Buffer(buffer_size, bandwidth)).Pass();
112 } 112 }
113 113
114 class RandomDrop : public PacketPipe { 114 class RandomDrop : public PacketPipe {
115 public: 115 public:
116 RandomDrop(double drop_fraction) 116 RandomDrop(double drop_fraction)
117 : drop_fraction_(static_cast<int>(drop_fraction * RAND_MAX)) {} 117 : drop_fraction_(static_cast<int>(drop_fraction * RAND_MAX)) {}
118 118
119 virtual void Send(scoped_ptr<Packet> packet) override { 119 void Send(scoped_ptr<Packet> packet) override {
120 if (rand() > drop_fraction_) { 120 if (rand() > drop_fraction_) {
121 pipe_->Send(packet.Pass()); 121 pipe_->Send(packet.Pass());
122 } 122 }
123 } 123 }
124 124
125 private: 125 private:
126 int drop_fraction_; 126 int drop_fraction_;
127 }; 127 };
128 128
129 scoped_ptr<PacketPipe> NewRandomDrop(double drop_fraction) { 129 scoped_ptr<PacketPipe> NewRandomDrop(double drop_fraction) {
130 return scoped_ptr<PacketPipe>(new RandomDrop(drop_fraction)).Pass(); 130 return scoped_ptr<PacketPipe>(new RandomDrop(drop_fraction)).Pass();
131 } 131 }
132 132
133 class SimpleDelayBase : public PacketPipe { 133 class SimpleDelayBase : public PacketPipe {
134 public: 134 public:
135 SimpleDelayBase() : weak_factory_(this) {} 135 SimpleDelayBase() : weak_factory_(this) {}
136 virtual ~SimpleDelayBase() {} 136 ~SimpleDelayBase() override {}
137 137
138 virtual void Send(scoped_ptr<Packet> packet) override { 138 void Send(scoped_ptr<Packet> packet) override {
139 double seconds = GetDelay(); 139 double seconds = GetDelay();
140 task_runner_->PostDelayedTask( 140 task_runner_->PostDelayedTask(
141 FROM_HERE, 141 FROM_HERE,
142 base::Bind(&SimpleDelayBase::SendInternal, 142 base::Bind(&SimpleDelayBase::SendInternal,
143 weak_factory_.GetWeakPtr(), 143 weak_factory_.GetWeakPtr(),
144 base::Passed(&packet)), 144 base::Passed(&packet)),
145 base::TimeDelta::FromMicroseconds(static_cast<int64>(seconds * 1E6))); 145 base::TimeDelta::FromMicroseconds(static_cast<int64>(seconds * 1E6)));
146 } 146 }
147 protected: 147 protected:
148 virtual double GetDelay() = 0; 148 virtual double GetDelay() = 0;
149 149
150 private: 150 private:
151 virtual void SendInternal(scoped_ptr<Packet> packet) { 151 virtual void SendInternal(scoped_ptr<Packet> packet) {
152 pipe_->Send(packet.Pass()); 152 pipe_->Send(packet.Pass());
153 } 153 }
154 154
155 base::WeakPtrFactory<SimpleDelayBase> weak_factory_; 155 base::WeakPtrFactory<SimpleDelayBase> weak_factory_;
156 }; 156 };
157 157
158 class ConstantDelay : public SimpleDelayBase { 158 class ConstantDelay : public SimpleDelayBase {
159 public: 159 public:
160 ConstantDelay(double delay_seconds) : delay_seconds_(delay_seconds) {} 160 ConstantDelay(double delay_seconds) : delay_seconds_(delay_seconds) {}
161 virtual double GetDelay() override { 161 double GetDelay() override { return delay_seconds_; }
162 return delay_seconds_;
163 }
164 162
165 private: 163 private:
166 double delay_seconds_; 164 double delay_seconds_;
167 }; 165 };
168 166
169 scoped_ptr<PacketPipe> NewConstantDelay(double delay_seconds) { 167 scoped_ptr<PacketPipe> NewConstantDelay(double delay_seconds) {
170 return scoped_ptr<PacketPipe>(new ConstantDelay(delay_seconds)).Pass(); 168 return scoped_ptr<PacketPipe>(new ConstantDelay(delay_seconds)).Pass();
171 } 169 }
172 170
173 class RandomUnsortedDelay : public SimpleDelayBase { 171 class RandomUnsortedDelay : public SimpleDelayBase {
174 public: 172 public:
175 RandomUnsortedDelay(double random_delay) : random_delay_(random_delay) {} 173 RandomUnsortedDelay(double random_delay) : random_delay_(random_delay) {}
176 174
177 virtual double GetDelay() override { 175 double GetDelay() override { return random_delay_ * base::RandDouble(); }
178 return random_delay_ * base::RandDouble();
179 }
180 176
181 private: 177 private:
182 double random_delay_; 178 double random_delay_;
183 }; 179 };
184 180
185 scoped_ptr<PacketPipe> NewRandomUnsortedDelay(double random_delay) { 181 scoped_ptr<PacketPipe> NewRandomUnsortedDelay(double random_delay) {
186 return scoped_ptr<PacketPipe>(new RandomUnsortedDelay(random_delay)).Pass(); 182 return scoped_ptr<PacketPipe>(new RandomUnsortedDelay(random_delay)).Pass();
187 } 183 }
188 184
189 class DuplicateAndDelay : public RandomUnsortedDelay { 185 class DuplicateAndDelay : public RandomUnsortedDelay {
190 public: 186 public:
191 DuplicateAndDelay(double delay_min, 187 DuplicateAndDelay(double delay_min,
192 double random_delay) : 188 double random_delay) :
193 RandomUnsortedDelay(random_delay), 189 RandomUnsortedDelay(random_delay),
194 delay_min_(delay_min) { 190 delay_min_(delay_min) {
195 } 191 }
196 virtual void Send(scoped_ptr<Packet> packet) override { 192 void Send(scoped_ptr<Packet> packet) override {
197 pipe_->Send(scoped_ptr<Packet>(new Packet(*packet.get()))); 193 pipe_->Send(scoped_ptr<Packet>(new Packet(*packet.get())));
198 RandomUnsortedDelay::Send(packet.Pass()); 194 RandomUnsortedDelay::Send(packet.Pass());
199 } 195 }
200 virtual double GetDelay() override { 196 double GetDelay() override {
201 return RandomUnsortedDelay::GetDelay() + delay_min_; 197 return RandomUnsortedDelay::GetDelay() + delay_min_;
202 } 198 }
203 private: 199 private:
204 double delay_min_; 200 double delay_min_;
205 }; 201 };
206 202
207 scoped_ptr<PacketPipe> NewDuplicateAndDelay(double delay_min, 203 scoped_ptr<PacketPipe> NewDuplicateAndDelay(double delay_min,
208 double random_delay) { 204 double random_delay) {
209 return scoped_ptr<PacketPipe>( 205 return scoped_ptr<PacketPipe>(
210 new DuplicateAndDelay(delay_min, random_delay)).Pass(); 206 new DuplicateAndDelay(delay_min, random_delay)).Pass();
211 } 207 }
212 208
213 class RandomSortedDelay : public PacketPipe { 209 class RandomSortedDelay : public PacketPipe {
214 public: 210 public:
215 RandomSortedDelay(double random_delay, 211 RandomSortedDelay(double random_delay,
216 double extra_delay, 212 double extra_delay,
217 double seconds_between_extra_delay) 213 double seconds_between_extra_delay)
218 : random_delay_(random_delay), 214 : random_delay_(random_delay),
219 extra_delay_(extra_delay), 215 extra_delay_(extra_delay),
220 seconds_between_extra_delay_(seconds_between_extra_delay), 216 seconds_between_extra_delay_(seconds_between_extra_delay),
221 weak_factory_(this) {} 217 weak_factory_(this) {}
222 218
223 virtual void Send(scoped_ptr<Packet> packet) override { 219 void Send(scoped_ptr<Packet> packet) override {
224 buffer_.push_back(linked_ptr<Packet>(packet.release())); 220 buffer_.push_back(linked_ptr<Packet>(packet.release()));
225 if (buffer_.size() == 1) { 221 if (buffer_.size() == 1) {
226 next_send_ = std::max( 222 next_send_ = std::max(
227 clock_->NowTicks() + 223 clock_->NowTicks() +
228 base::TimeDelta::FromSecondsD(base::RandDouble() * random_delay_), 224 base::TimeDelta::FromSecondsD(base::RandDouble() * random_delay_),
229 next_send_); 225 next_send_);
230 ProcessBuffer(); 226 ProcessBuffer();
231 } 227 }
232 } 228 }
233 virtual void InitOnIOThread( 229 void InitOnIOThread(
234 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 230 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
235 base::TickClock* clock) override { 231 base::TickClock* clock) override {
236 PacketPipe::InitOnIOThread(task_runner, clock); 232 PacketPipe::InitOnIOThread(task_runner, clock);
237 // As we start the stream, assume that we are in a random 233 // As we start the stream, assume that we are in a random
238 // place between two extra delays, thus multiplier = 1.0; 234 // place between two extra delays, thus multiplier = 1.0;
239 ScheduleExtraDelay(1.0); 235 ScheduleExtraDelay(1.0);
240 } 236 }
241 237
242 private: 238 private:
243 void ScheduleExtraDelay(double mult) { 239 void ScheduleExtraDelay(double mult) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 } 298 }
303 299
304 class NetworkGlitchPipe : public PacketPipe { 300 class NetworkGlitchPipe : public PacketPipe {
305 public: 301 public:
306 NetworkGlitchPipe(double average_work_time, double average_outage_time) 302 NetworkGlitchPipe(double average_work_time, double average_outage_time)
307 : works_(false), 303 : works_(false),
308 max_work_time_(average_work_time * 2), 304 max_work_time_(average_work_time * 2),
309 max_outage_time_(average_outage_time * 2), 305 max_outage_time_(average_outage_time * 2),
310 weak_factory_(this) {} 306 weak_factory_(this) {}
311 307
312 virtual void InitOnIOThread( 308 void InitOnIOThread(
313 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 309 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
314 base::TickClock* clock) override { 310 base::TickClock* clock) override {
315 PacketPipe::InitOnIOThread(task_runner, clock); 311 PacketPipe::InitOnIOThread(task_runner, clock);
316 Flip(); 312 Flip();
317 } 313 }
318 314
319 virtual void Send(scoped_ptr<Packet> packet) override { 315 void Send(scoped_ptr<Packet> packet) override {
320 if (works_) { 316 if (works_) {
321 pipe_->Send(packet.Pass()); 317 pipe_->Send(packet.Pass());
322 } 318 }
323 } 319 }
324 320
325 private: 321 private:
326 void Flip() { 322 void Flip() {
327 works_ = !works_; 323 works_ = !works_;
328 double seconds = base::RandDouble() * 324 double seconds = base::RandDouble() *
329 (works_ ? max_work_time_ : max_outage_time_); 325 (works_ ? max_work_time_ : max_outage_time_);
(...skipping 23 matching lines...) Expand all
353 public: 349 public:
354 InternalBuffer(base::WeakPtr<InterruptedPoissonProcess> ipp, 350 InternalBuffer(base::WeakPtr<InterruptedPoissonProcess> ipp,
355 size_t size) 351 size_t size)
356 : ipp_(ipp), 352 : ipp_(ipp),
357 stored_size_(0), 353 stored_size_(0),
358 stored_limit_(size), 354 stored_limit_(size),
359 clock_(NULL), 355 clock_(NULL),
360 weak_factory_(this) { 356 weak_factory_(this) {
361 } 357 }
362 358
363 virtual void Send(scoped_ptr<Packet> packet) override { 359 void Send(scoped_ptr<Packet> packet) override {
364 // Drop if buffer is full. 360 // Drop if buffer is full.
365 if (stored_size_ >= stored_limit_) 361 if (stored_size_ >= stored_limit_)
366 return; 362 return;
367 stored_size_ += packet->size(); 363 stored_size_ += packet->size();
368 buffer_.push_back(linked_ptr<Packet>(packet.release())); 364 buffer_.push_back(linked_ptr<Packet>(packet.release()));
369 buffer_time_.push_back(clock_->NowTicks()); 365 buffer_time_.push_back(clock_->NowTicks());
370 DCHECK(buffer_.size() == buffer_time_.size()); 366 DCHECK(buffer_.size() == buffer_time_.size());
371 } 367 }
372 368
373 virtual void InitOnIOThread( 369 void InitOnIOThread(
374 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 370 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
375 base::TickClock* clock) override { 371 base::TickClock* clock) override {
376 clock_ = clock; 372 clock_ = clock;
377 if (ipp_) 373 if (ipp_)
378 ipp_->InitOnIOThread(task_runner, clock); 374 ipp_->InitOnIOThread(task_runner, clock);
379 PacketPipe::InitOnIOThread(task_runner, clock); 375 PacketPipe::InitOnIOThread(task_runner, clock);
380 } 376 }
381 377
382 void SendOnePacket() { 378 void SendOnePacket() {
383 scoped_ptr<Packet> packet(buffer_.front().release()); 379 scoped_ptr<Packet> packet(buffer_.front().release());
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 break; 541 break;
546 } 542 }
547 } 543 }
548 544
549 class UDPProxyImpl; 545 class UDPProxyImpl;
550 546
551 class PacketSender : public PacketPipe { 547 class PacketSender : public PacketPipe {
552 public: 548 public:
553 PacketSender(UDPProxyImpl* udp_proxy, const net::IPEndPoint* destination) 549 PacketSender(UDPProxyImpl* udp_proxy, const net::IPEndPoint* destination)
554 : udp_proxy_(udp_proxy), destination_(destination) {} 550 : udp_proxy_(udp_proxy), destination_(destination) {}
555 virtual void Send(scoped_ptr<Packet> packet) override; 551 void Send(scoped_ptr<Packet> packet) override;
556 virtual void AppendToPipe(scoped_ptr<PacketPipe> pipe) override { 552 void AppendToPipe(scoped_ptr<PacketPipe> pipe) override { NOTREACHED(); }
557 NOTREACHED();
558 }
559 553
560 private: 554 private:
561 UDPProxyImpl* udp_proxy_; 555 UDPProxyImpl* udp_proxy_;
562 const net::IPEndPoint* destination_; // not owned 556 const net::IPEndPoint* destination_; // not owned
563 }; 557 };
564 558
565 namespace { 559 namespace {
566 void BuildPipe(scoped_ptr<PacketPipe>* pipe, PacketPipe* next) { 560 void BuildPipe(scoped_ptr<PacketPipe>* pipe, PacketPipe* next) {
567 if (*pipe) { 561 if (*pipe) {
568 (*pipe)->AppendToPipe(scoped_ptr<PacketPipe>(next).Pass()); 562 (*pipe)->AppendToPipe(scoped_ptr<PacketPipe>(next).Pass());
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 base::WaitableEvent start_event(false, false); 649 base::WaitableEvent start_event(false, false);
656 proxy_thread_.message_loop_proxy()->PostTask( 650 proxy_thread_.message_loop_proxy()->PostTask(
657 FROM_HERE, 651 FROM_HERE,
658 base::Bind(&UDPProxyImpl::Start, 652 base::Bind(&UDPProxyImpl::Start,
659 base::Unretained(this), 653 base::Unretained(this),
660 base::Unretained(&start_event), 654 base::Unretained(&start_event),
661 net_log)); 655 net_log));
662 start_event.Wait(); 656 start_event.Wait();
663 } 657 }
664 658
665 virtual ~UDPProxyImpl() { 659 ~UDPProxyImpl() override {
666 base::WaitableEvent stop_event(false, false); 660 base::WaitableEvent stop_event(false, false);
667 proxy_thread_.message_loop_proxy()->PostTask( 661 proxy_thread_.message_loop_proxy()->PostTask(
668 FROM_HERE, 662 FROM_HERE,
669 base::Bind(&UDPProxyImpl::Stop, 663 base::Bind(&UDPProxyImpl::Stop,
670 base::Unretained(this), 664 base::Unretained(this),
671 base::Unretained(&stop_event))); 665 base::Unretained(&stop_event)));
672 stop_event.Wait(); 666 stop_event.Wait();
673 proxy_thread_.Stop(); 667 proxy_thread_.Stop();
674 } 668 }
675 669
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 destination, 824 destination,
831 to_dest_pipe.Pass(), 825 to_dest_pipe.Pass(),
832 from_dest_pipe.Pass(), 826 from_dest_pipe.Pass(),
833 net_log)); 827 net_log));
834 return ret.Pass(); 828 return ret.Pass();
835 } 829 }
836 830
837 } // namespace test 831 } // namespace test
838 } // namespace cast 832 } // namespace cast
839 } // namespace media 833 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/test/utility/standalone_cast_environment.h ('k') | media/cast/test/utility/udp_proxy_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698