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

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

Issue 1905763002: Convert //media/cast from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « media/cast/test/utility/tap_proxy.cc ('k') | media/cast/test/utility/udp_proxy.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #ifndef MEDIA_CAST_TEST_UTILITY_UDP_PROXY_H_ 5 #ifndef MEDIA_CAST_TEST_UTILITY_UDP_PROXY_H_
6 #define MEDIA_CAST_TEST_UTILITY_UDP_PROXY_H_ 6 #define MEDIA_CAST_TEST_UTILITY_UDP_PROXY_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
11 #include <memory>
11 #include <vector> 12 #include <vector>
12 13
13 #include "base/macros.h" 14 #include "base/macros.h"
14 #include "base/memory/linked_ptr.h" 15 #include "base/memory/linked_ptr.h"
15 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
16 #include "base/memory/scoped_ptr.h"
17 #include "base/memory/weak_ptr.h" 17 #include "base/memory/weak_ptr.h"
18 #include "base/single_thread_task_runner.h" 18 #include "base/single_thread_task_runner.h"
19 #include "media/cast/net/cast_transport_config.h" 19 #include "media/cast/net/cast_transport_config.h"
20 #include "net/base/ip_endpoint.h" 20 #include "net/base/ip_endpoint.h"
21 #include "third_party/mt19937ar/mt19937ar.h" 21 #include "third_party/mt19937ar/mt19937ar.h"
22 22
23 namespace net { 23 namespace net {
24 class NetLog; 24 class NetLog;
25 }; 25 };
26 26
27 namespace base { 27 namespace base {
28 class TickClock; 28 class TickClock;
29 }; 29 };
30 30
31 namespace media { 31 namespace media {
32 namespace cast { 32 namespace cast {
33 namespace test { 33 namespace test {
34 34
35 class PacketPipe { 35 class PacketPipe {
36 public: 36 public:
37 PacketPipe(); 37 PacketPipe();
38 virtual ~PacketPipe(); 38 virtual ~PacketPipe();
39 virtual void Send(scoped_ptr<Packet> packet) = 0; 39 virtual void Send(std::unique_ptr<Packet> packet) = 0;
40 // Allows injection of fake test runner for testing. 40 // Allows injection of fake test runner for testing.
41 virtual void InitOnIOThread( 41 virtual void InitOnIOThread(
42 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 42 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
43 base::TickClock* clock); 43 base::TickClock* clock);
44 virtual void AppendToPipe(scoped_ptr<PacketPipe> pipe); 44 virtual void AppendToPipe(std::unique_ptr<PacketPipe> pipe);
45
45 protected: 46 protected:
46 scoped_ptr<PacketPipe> pipe_; 47 std::unique_ptr<PacketPipe> pipe_;
47 // Allows injection of fake task runner for testing. 48 // Allows injection of fake task runner for testing.
48 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 49 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
49 base::TickClock* clock_; 50 base::TickClock* clock_;
50 }; 51 };
51 52
52 // Implements a Interrupted Poisson Process for packet delivery. 53 // Implements a Interrupted Poisson Process for packet delivery.
53 // The process has 2 states: ON and OFF, the rate of switching between 54 // The process has 2 states: ON and OFF, the rate of switching between
54 // these two states are defined. 55 // these two states are defined.
55 // When in ON state packets are sent according to a defined rate. 56 // When in ON state packets are sent according to a defined rate.
56 // When in OFF state packets are not sent. 57 // When in OFF state packets are not sent.
57 // The rate above is the average rate of a poisson distribution. 58 // The rate above is the average rate of a poisson distribution.
58 class InterruptedPoissonProcess { 59 class InterruptedPoissonProcess {
59 public: 60 public:
60 InterruptedPoissonProcess(const std::vector<double>& average_rates, 61 InterruptedPoissonProcess(const std::vector<double>& average_rates,
61 double coef_burstiness, 62 double coef_burstiness,
62 double coef_variance, 63 double coef_variance,
63 uint32_t rand_seed); 64 uint32_t rand_seed);
64 ~InterruptedPoissonProcess(); 65 ~InterruptedPoissonProcess();
65 66
66 scoped_ptr<PacketPipe> NewBuffer(size_t size); 67 std::unique_ptr<PacketPipe> NewBuffer(size_t size);
67 68
68 private: 69 private:
69 class InternalBuffer; 70 class InternalBuffer;
70 71
71 // |task_runner| is the executor of the IO thread. 72 // |task_runner| is the executor of the IO thread.
72 // |clock| is the system clock. 73 // |clock| is the system clock.
73 void InitOnIOThread( 74 void InitOnIOThread(
74 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 75 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
75 base::TickClock* clock); 76 base::TickClock* clock);
76 77
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 // Packets send to that port will be forwarded to |destination|. 110 // Packets send to that port will be forwarded to |destination|.
110 // Packets send from |destination| to |local_port| will be returned 111 // Packets send from |destination| to |local_port| will be returned
111 // to whoever sent a packet to |local_port| last. (Not counting packets 112 // to whoever sent a packet to |local_port| last. (Not counting packets
112 // from |destination|.) The UDPProxy will run a separate thread to 113 // from |destination|.) The UDPProxy will run a separate thread to
113 // do the forwarding of packets, and will keep doing so until destroyed. 114 // do the forwarding of packets, and will keep doing so until destroyed.
114 // You can insert delays and packet drops by supplying a PacketPipe. 115 // You can insert delays and packet drops by supplying a PacketPipe.
115 // The PacketPipes may also be NULL if you just want to forward packets. 116 // The PacketPipes may also be NULL if you just want to forward packets.
116 class UDPProxy { 117 class UDPProxy {
117 public: 118 public:
118 virtual ~UDPProxy() {} 119 virtual ~UDPProxy() {}
119 static scoped_ptr<UDPProxy> Create(const net::IPEndPoint& local_port, 120 static std::unique_ptr<UDPProxy> Create(
120 const net::IPEndPoint& destination, 121 const net::IPEndPoint& local_port,
121 scoped_ptr<PacketPipe> to_dest_pipe, 122 const net::IPEndPoint& destination,
122 scoped_ptr<PacketPipe> from_dest_pipe, 123 std::unique_ptr<PacketPipe> to_dest_pipe,
123 net::NetLog* net_log); 124 std::unique_ptr<PacketPipe> from_dest_pipe,
125 net::NetLog* net_log);
124 }; 126 };
125 127
126 // The following functions create PacketPipes which can be linked 128 // The following functions create PacketPipes which can be linked
127 // together (with AppendToPipe) and passed into UdpProxy::Create below. 129 // together (with AppendToPipe) and passed into UdpProxy::Create below.
128 130
129 // This PacketPipe emulates a buffer of a given size. Limits our output 131 // This PacketPipe emulates a buffer of a given size. Limits our output
130 // from the buffer at a rate given by |bandwidth| (in megabits per second). 132 // from the buffer at a rate given by |bandwidth| (in megabits per second).
131 // Packets entering the buffer will be dropped if there is not enough 133 // Packets entering the buffer will be dropped if there is not enough
132 // room for them. 134 // room for them.
133 scoped_ptr<PacketPipe> NewBuffer(size_t buffer_size, double bandwidth); 135 std::unique_ptr<PacketPipe> NewBuffer(size_t buffer_size, double bandwidth);
134 136
135 // Randomly drops |drop_fraction|*100% of packets. 137 // Randomly drops |drop_fraction|*100% of packets.
136 scoped_ptr<PacketPipe> NewRandomDrop(double drop_fraction); 138 std::unique_ptr<PacketPipe> NewRandomDrop(double drop_fraction);
137 139
138 // Delays each packet by |delay_seconds|. 140 // Delays each packet by |delay_seconds|.
139 scoped_ptr<PacketPipe> NewConstantDelay(double delay_seconds); 141 std::unique_ptr<PacketPipe> NewConstantDelay(double delay_seconds);
140 142
141 // Delays packets by a random amount between zero and |delay|. 143 // Delays packets by a random amount between zero and |delay|.
142 // This PacketPipe can reorder packets. 144 // This PacketPipe can reorder packets.
143 scoped_ptr<PacketPipe> NewRandomUnsortedDelay(double delay); 145 std::unique_ptr<PacketPipe> NewRandomUnsortedDelay(double delay);
144 146
145 // Duplicates every packet, one is transmitted immediately, 147 // Duplicates every packet, one is transmitted immediately,
146 // one is transmitted after a random delay between |delay_min| 148 // one is transmitted after a random delay between |delay_min|
147 // and |delay_min + random_delay|. 149 // and |delay_min + random_delay|.
148 // This PacketPipe will reorder packets. 150 // This PacketPipe will reorder packets.
149 scoped_ptr<PacketPipe> NewDuplicateAndDelay(double delay_min, 151 std::unique_ptr<PacketPipe> NewDuplicateAndDelay(double delay_min,
150 double random_delay); 152 double random_delay);
151 153
152 // This PacketPipe inserts a random delay between each packet. 154 // This PacketPipe inserts a random delay between each packet.
153 // This PacketPipe cannot re-order packets. The delay between each 155 // This PacketPipe cannot re-order packets. The delay between each
154 // packet is asically |min_delay| + random( |random_delay| ) 156 // packet is asically |min_delay| + random( |random_delay| )
155 // However, every now and then a delay of |big_delay| will be 157 // However, every now and then a delay of |big_delay| will be
156 // inserted (roughly every |seconds_between_big_delay| seconds). 158 // inserted (roughly every |seconds_between_big_delay| seconds).
157 scoped_ptr<PacketPipe> NewRandomSortedDelay(double random_delay, 159 std::unique_ptr<PacketPipe> NewRandomSortedDelay(
158 double big_delay, 160 double random_delay,
159 double seconds_between_big_delay); 161 double big_delay,
162 double seconds_between_big_delay);
160 163
161 // This PacketPipe emulates network outages. It basically waits 164 // This PacketPipe emulates network outages. It basically waits
162 // for 0-2*|average_work_time| seconds, then kills the network for 165 // for 0-2*|average_work_time| seconds, then kills the network for
163 // 0-|2*average_outage_time| seconds. Then it starts over again. 166 // 0-|2*average_outage_time| seconds. Then it starts over again.
164 scoped_ptr<PacketPipe> NewNetworkGlitchPipe(double average_work_time, 167 std::unique_ptr<PacketPipe> NewNetworkGlitchPipe(double average_work_time,
165 double average_outage_time); 168 double average_outage_time);
166 169
167 // This method builds a stack of PacketPipes to emulate a reasonably 170 // This method builds a stack of PacketPipes to emulate a reasonably
168 // good network. ~50mbit, ~3ms latency, no packet loss unless saturated. 171 // good network. ~50mbit, ~3ms latency, no packet loss unless saturated.
169 scoped_ptr<PacketPipe> GoodNetwork(); 172 std::unique_ptr<PacketPipe> GoodNetwork();
170 173
171 // This method builds a stack of PacketPipes to emulate a reasonably 174 // This method builds a stack of PacketPipes to emulate a reasonably
172 // good wifi network. ~20mbit, 1% packet loss, ~3ms latency. 175 // good wifi network. ~20mbit, 1% packet loss, ~3ms latency.
173 scoped_ptr<PacketPipe> WifiNetwork(); 176 std::unique_ptr<PacketPipe> WifiNetwork();
174 177
175 // This method builds a stack of PacketPipes to emulate a 178 // This method builds a stack of PacketPipes to emulate a
176 // bad wifi network. ~5mbit, 5% packet loss, ~7ms latency 179 // bad wifi network. ~5mbit, 5% packet loss, ~7ms latency
177 // 40ms dropouts every ~2 seconds. Can reorder packets. 180 // 40ms dropouts every ~2 seconds. Can reorder packets.
178 scoped_ptr<PacketPipe> BadNetwork(); 181 std::unique_ptr<PacketPipe> BadNetwork();
179 182
180 // This method builds a stack of PacketPipes to emulate a crappy wifi network. 183 // This method builds a stack of PacketPipes to emulate a crappy wifi network.
181 // ~2mbit, 20% packet loss, ~40ms latency and packets can get reordered. 184 // ~2mbit, 20% packet loss, ~40ms latency and packets can get reordered.
182 // 300ms drouputs every ~2 seconds. 185 // 300ms drouputs every ~2 seconds.
183 scoped_ptr<PacketPipe> EvilNetwork(); 186 std::unique_ptr<PacketPipe> EvilNetwork();
184 187
185 // Builds an Interrupted Poisson Process network simulator with default 188 // Builds an Interrupted Poisson Process network simulator with default
186 // settings. It simulates a challenging interference-heavy WiFi environment 189 // settings. It simulates a challenging interference-heavy WiFi environment
187 // of roughly 2mbits/s. 190 // of roughly 2mbits/s.
188 scoped_ptr<InterruptedPoissonProcess> DefaultInterruptedPoissonProcess(); 191 std::unique_ptr<InterruptedPoissonProcess> DefaultInterruptedPoissonProcess();
189 192
190 } // namespace test 193 } // namespace test
191 } // namespace cast 194 } // namespace cast
192 } // namespace media 195 } // namespace media
193 196
194 #endif // MEDIA_CAST_TEST_UTILITY_UDP_PROXY_H_ 197 #endif // MEDIA_CAST_TEST_UTILITY_UDP_PROXY_H_
OLDNEW
« no previous file with comments | « media/cast/test/utility/tap_proxy.cc ('k') | media/cast/test/utility/udp_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698