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

Side by Side Diff: media/cast/net/rtcp/rtcp_unittest.cc

Issue 488133005: Cast: Fix memory leak in cast_unittests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged Created 6 years, 4 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
« no previous file with comments | « no previous file | no next file » | 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 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include "base/test/simple_test_tick_clock.h" 7 #include "base/test/simple_test_tick_clock.h"
8 #include "media/cast/cast_defines.h" 8 #include "media/cast/cast_defines.h"
9 #include "media/cast/net/cast_transport_config.h" 9 #include "media/cast/net/cast_transport_config.h"
10 #include "media/cast/net/cast_transport_sender_impl.h" 10 #include "media/cast/net/cast_transport_sender_impl.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 return true; 52 return true;
53 53
54 rtcp_receiver_->IncomingRtcpPacket(&packet->data[0], packet->data.size()); 54 rtcp_receiver_->IncomingRtcpPacket(&packet->data[0], packet->data.size());
55 return true; 55 return true;
56 } 56 }
57 57
58 private: 58 private:
59 bool drop_packets_; 59 bool drop_packets_;
60 bool short_delay_; 60 bool short_delay_;
61 Rtcp* rtcp_receiver_; 61 Rtcp* rtcp_receiver_;
62 base::SimpleTestTickClock* testing_clock_; 62 base::SimpleTestTickClock* testing_clock_; // Not owned.
63 63
64 DISALLOW_COPY_AND_ASSIGN(RtcpTestPacketSender); 64 DISALLOW_COPY_AND_ASSIGN(RtcpTestPacketSender);
65 }; 65 };
66 66
67 class LocalRtcpTransport : public PacedPacketSender { 67 class LocalRtcpTransport : public PacedPacketSender {
68 public: 68 public:
69 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock) 69 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock)
70 : drop_packets_(false), 70 : drop_packets_(false),
71 short_delay_(false), 71 short_delay_(false),
72 testing_clock_(testing_clock) {} 72 testing_clock_(testing_clock) {}
(...skipping 30 matching lines...) Expand all
103 } 103 }
104 104
105 virtual void CancelSendingPacket( 105 virtual void CancelSendingPacket(
106 const PacketKey& packet_key) OVERRIDE { 106 const PacketKey& packet_key) OVERRIDE {
107 } 107 }
108 108
109 private: 109 private:
110 bool drop_packets_; 110 bool drop_packets_;
111 bool short_delay_; 111 bool short_delay_;
112 Rtcp* rtcp_; 112 Rtcp* rtcp_;
113 base::SimpleTestTickClock* testing_clock_; 113 base::SimpleTestTickClock* testing_clock_; // Not owned.
114 114
115 DISALLOW_COPY_AND_ASSIGN(LocalRtcpTransport); 115 DISALLOW_COPY_AND_ASSIGN(LocalRtcpTransport);
116 }; 116 };
117 117
118 class MockReceiverStats : public RtpReceiverStatistics { 118 class MockReceiverStats : public RtpReceiverStatistics {
119 public: 119 public:
120 MockReceiverStats() {} 120 MockReceiverStats() {}
121 virtual ~MockReceiverStats() {} 121 virtual ~MockReceiverStats() {}
122 122
123 virtual void GetStatistics(uint8* fraction_lost, 123 virtual void GetStatistics(uint8* fraction_lost,
(...skipping 23 matching lines...) Expand all
147 base::TimeDelta min_rtt, 147 base::TimeDelta min_rtt,
148 base::TimeDelta max_rtt)); 148 base::TimeDelta max_rtt));
149 private: 149 private:
150 DISALLOW_COPY_AND_ASSIGN(MockFrameSender); 150 DISALLOW_COPY_AND_ASSIGN(MockFrameSender);
151 }; 151 };
152 152
153 class RtcpTest : public ::testing::Test { 153 class RtcpTest : public ::testing::Test {
154 protected: 154 protected:
155 RtcpTest() 155 RtcpTest()
156 : testing_clock_(new base::SimpleTestTickClock()), 156 : testing_clock_(new base::SimpleTestTickClock()),
157 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), 157 task_runner_(
158 sender_to_receiver_(testing_clock_), 158 new test::FakeSingleThreadTaskRunner(testing_clock_.get())),
159 receiver_to_sender_(testing_clock_) { 159 sender_to_receiver_(testing_clock_.get()),
160 receiver_to_sender_(testing_clock_.get()) {
160 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); 161 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
161 } 162 }
162 163
163 virtual ~RtcpTest() {} 164 virtual ~RtcpTest() {}
164 165
165 static void UpdateCastTransportStatus(CastTransportStatus status) { 166 static void UpdateCastTransportStatus(CastTransportStatus status) {
166 bool result = (status == TRANSPORT_AUDIO_INITIALIZED || 167 bool result = (status == TRANSPORT_AUDIO_INITIALIZED ||
167 status == TRANSPORT_VIDEO_INITIALIZED); 168 status == TRANSPORT_VIDEO_INITIALIZED);
168 EXPECT_TRUE(result); 169 EXPECT_TRUE(result);
169 } 170 }
170 171
171 void RunTasks(int during_ms) { 172 void RunTasks(int during_ms) {
172 for (int i = 0; i < during_ms; ++i) { 173 for (int i = 0; i < during_ms; ++i) {
173 // Call process the timers every 1 ms. 174 // Call process the timers every 1 ms.
174 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(1)); 175 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(1));
175 task_runner_->RunTasks(); 176 task_runner_->RunTasks();
176 } 177 }
177 } 178 }
178 179
179 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. 180 scoped_ptr<base::SimpleTestTickClock> testing_clock_;
180 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 181 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
181 LocalRtcpTransport sender_to_receiver_; 182 LocalRtcpTransport sender_to_receiver_;
182 LocalRtcpTransport receiver_to_sender_; 183 LocalRtcpTransport receiver_to_sender_;
183 MockFrameSender mock_frame_sender_; 184 MockFrameSender mock_frame_sender_;
184 MockReceiverStats stats_; 185 MockReceiverStats stats_;
185 186
186 DISALLOW_COPY_AND_ASSIGN(RtcpTest); 187 DISALLOW_COPY_AND_ASSIGN(RtcpTest);
187 }; 188 };
188 189
189 TEST_F(RtcpTest, BasicSenderReport) { 190 TEST_F(RtcpTest, BasicSenderReport) {
190 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, 191 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback,
191 base::Unretained(&mock_frame_sender_)), 192 base::Unretained(&mock_frame_sender_)),
192 base::Bind(&MockFrameSender::OnReceivedRtt, 193 base::Bind(&MockFrameSender::OnReceivedRtt,
193 base::Unretained(&mock_frame_sender_)), 194 base::Unretained(&mock_frame_sender_)),
194 RtcpLogMessageCallback(), 195 RtcpLogMessageCallback(),
195 testing_clock_, 196 testing_clock_.get(),
196 &sender_to_receiver_, 197 &sender_to_receiver_,
197 kSenderSsrc, 198 kSenderSsrc,
198 kReceiverSsrc); 199 kReceiverSsrc);
199 sender_to_receiver_.set_rtcp_receiver(&rtcp); 200 sender_to_receiver_.set_rtcp_receiver(&rtcp);
200 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0, 1, 1); 201 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0, 1, 1);
201 } 202 }
202 203
203 TEST_F(RtcpTest, BasicReceiverReport) { 204 TEST_F(RtcpTest, BasicReceiverReport) {
204 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, 205 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback,
205 base::Unretained(&mock_frame_sender_)), 206 base::Unretained(&mock_frame_sender_)),
206 base::Bind(&MockFrameSender::OnReceivedRtt, 207 base::Bind(&MockFrameSender::OnReceivedRtt,
207 base::Unretained(&mock_frame_sender_)), 208 base::Unretained(&mock_frame_sender_)),
208 RtcpLogMessageCallback(), 209 RtcpLogMessageCallback(),
209 testing_clock_, 210 testing_clock_.get(),
210 &receiver_to_sender_, 211 &receiver_to_sender_,
211 kSenderSsrc, 212 kSenderSsrc,
212 kReceiverSsrc); 213 kReceiverSsrc);
213 receiver_to_sender_.set_rtcp_receiver(&rtcp); 214 receiver_to_sender_.set_rtcp_receiver(&rtcp);
214 rtcp.SendRtcpFromRtpReceiver(NULL, base::TimeDelta(), NULL, &stats_); 215 rtcp.SendRtcpFromRtpReceiver(NULL, base::TimeDelta(), NULL, &stats_);
215 } 216 }
216 217
217 TEST_F(RtcpTest, BasicCast) { 218 TEST_F(RtcpTest, BasicCast) {
218 EXPECT_CALL(mock_frame_sender_, OnReceivedCastFeedback(_)).Times(1); 219 EXPECT_CALL(mock_frame_sender_, OnReceivedCastFeedback(_)).Times(1);
219 220
220 // Media sender. 221 // Media sender.
221 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback, 222 Rtcp rtcp(base::Bind(&MockFrameSender::OnReceivedCastFeedback,
222 base::Unretained(&mock_frame_sender_)), 223 base::Unretained(&mock_frame_sender_)),
223 base::Bind(&MockFrameSender::OnReceivedRtt, 224 base::Bind(&MockFrameSender::OnReceivedRtt,
224 base::Unretained(&mock_frame_sender_)), 225 base::Unretained(&mock_frame_sender_)),
225 RtcpLogMessageCallback(), 226 RtcpLogMessageCallback(),
226 testing_clock_, 227 testing_clock_.get(),
227 &receiver_to_sender_, 228 &receiver_to_sender_,
228 kSenderSsrc, 229 kSenderSsrc,
229 kSenderSsrc); 230 kSenderSsrc);
230 receiver_to_sender_.set_rtcp_receiver(&rtcp); 231 receiver_to_sender_.set_rtcp_receiver(&rtcp);
231 RtcpCastMessage cast_message(kSenderSsrc); 232 RtcpCastMessage cast_message(kSenderSsrc);
232 cast_message.ack_frame_id = kAckFrameId; 233 cast_message.ack_frame_id = kAckFrameId;
233 PacketIdSet missing_packets; 234 PacketIdSet missing_packets;
234 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; 235 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets;
235 236
236 missing_packets.insert(kLostPacketId1); 237 missing_packets.insert(kLostPacketId1);
237 missing_packets.insert(kLostPacketId2); 238 missing_packets.insert(kLostPacketId2);
238 missing_packets.insert(kLostPacketId3); 239 missing_packets.insert(kLostPacketId3);
239 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = 240 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] =
240 missing_packets; 241 missing_packets;
241 rtcp.SendRtcpFromRtpReceiver(&cast_message, base::TimeDelta(), NULL, NULL); 242 rtcp.SendRtcpFromRtpReceiver(&cast_message, base::TimeDelta(), NULL, NULL);
242 } 243 }
243 244
244 TEST_F(RtcpTest, RttReducedSizeRtcp) { 245 TEST_F(RtcpTest, RttReducedSizeRtcp) {
245 // Media receiver. 246 // Media receiver.
246 Rtcp rtcp_receiver(RtcpCastMessageCallback(), 247 Rtcp rtcp_receiver(RtcpCastMessageCallback(),
247 RtcpRttCallback(), 248 RtcpRttCallback(),
248 RtcpLogMessageCallback(), 249 RtcpLogMessageCallback(),
249 testing_clock_, 250 testing_clock_.get(),
250 &receiver_to_sender_, 251 &receiver_to_sender_,
251 kReceiverSsrc, 252 kReceiverSsrc,
252 kSenderSsrc); 253 kSenderSsrc);
253 254
254 // Media sender. 255 // Media sender.
255 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, 256 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback,
256 base::Unretained(&mock_frame_sender_)), 257 base::Unretained(&mock_frame_sender_)),
257 base::Bind(&MockFrameSender::OnReceivedRtt, 258 base::Bind(&MockFrameSender::OnReceivedRtt,
258 base::Unretained(&mock_frame_sender_)), 259 base::Unretained(&mock_frame_sender_)),
259 RtcpLogMessageCallback(), 260 RtcpLogMessageCallback(),
260 testing_clock_, 261 testing_clock_.get(),
261 &sender_to_receiver_, 262 &sender_to_receiver_,
262 kSenderSsrc, 263 kSenderSsrc,
263 kReceiverSsrc); 264 kReceiverSsrc);
264 265
265 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); 266 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver);
266 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); 267 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender);
267 268
268 base::TimeDelta rtt; 269 base::TimeDelta rtt;
269 base::TimeDelta avg_rtt; 270 base::TimeDelta avg_rtt;
270 base::TimeDelta min_rtt; 271 base::TimeDelta min_rtt;
(...skipping 18 matching lines...) Expand all
289 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2); 290 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2);
290 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2); 291 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2);
291 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2); 292 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2);
292 } 293 }
293 294
294 TEST_F(RtcpTest, Rtt) { 295 TEST_F(RtcpTest, Rtt) {
295 // Media receiver. 296 // Media receiver.
296 Rtcp rtcp_receiver(RtcpCastMessageCallback(), 297 Rtcp rtcp_receiver(RtcpCastMessageCallback(),
297 RtcpRttCallback(), 298 RtcpRttCallback(),
298 RtcpLogMessageCallback(), 299 RtcpLogMessageCallback(),
299 testing_clock_, 300 testing_clock_.get(),
300 &receiver_to_sender_, 301 &receiver_to_sender_,
301 kReceiverSsrc, 302 kReceiverSsrc,
302 kSenderSsrc); 303 kSenderSsrc);
303 304
304 // Media sender. 305 // Media sender.
305 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, 306 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback,
306 base::Unretained(&mock_frame_sender_)), 307 base::Unretained(&mock_frame_sender_)),
307 base::Bind(&MockFrameSender::OnReceivedRtt, 308 base::Bind(&MockFrameSender::OnReceivedRtt,
308 base::Unretained(&mock_frame_sender_)), 309 base::Unretained(&mock_frame_sender_)),
309 RtcpLogMessageCallback(), 310 RtcpLogMessageCallback(),
310 testing_clock_, 311 testing_clock_.get(),
311 &sender_to_receiver_, 312 &sender_to_receiver_,
312 kSenderSsrc, 313 kSenderSsrc,
313 kReceiverSsrc); 314 kReceiverSsrc);
314 315
315 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); 316 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender);
316 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); 317 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver);
317 318
318 base::TimeDelta rtt; 319 base::TimeDelta rtt;
319 base::TimeDelta avg_rtt; 320 base::TimeDelta avg_rtt;
320 base::TimeDelta min_rtt; 321 base::TimeDelta min_rtt;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 2); 377 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 2);
377 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 2); 378 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 2);
378 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2); 379 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2);
379 } 380 }
380 381
381 TEST_F(RtcpTest, RttWithPacketLoss) { 382 TEST_F(RtcpTest, RttWithPacketLoss) {
382 // Media receiver. 383 // Media receiver.
383 Rtcp rtcp_receiver(RtcpCastMessageCallback(), 384 Rtcp rtcp_receiver(RtcpCastMessageCallback(),
384 RtcpRttCallback(), 385 RtcpRttCallback(),
385 RtcpLogMessageCallback(), 386 RtcpLogMessageCallback(),
386 testing_clock_, 387 testing_clock_.get(),
387 &receiver_to_sender_, 388 &receiver_to_sender_,
388 kReceiverSsrc, 389 kReceiverSsrc,
389 kSenderSsrc); 390 kSenderSsrc);
390 391
391 // Media sender. 392 // Media sender.
392 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback, 393 Rtcp rtcp_sender(base::Bind(&MockFrameSender::OnReceivedCastFeedback,
393 base::Unretained(&mock_frame_sender_)), 394 base::Unretained(&mock_frame_sender_)),
394 base::Bind(&MockFrameSender::OnReceivedRtt, 395 base::Bind(&MockFrameSender::OnReceivedRtt,
395 base::Unretained(&mock_frame_sender_)), 396 base::Unretained(&mock_frame_sender_)),
396 RtcpLogMessageCallback(), 397 RtcpLogMessageCallback(),
397 testing_clock_, 398 testing_clock_.get(),
398 &sender_to_receiver_, 399 &sender_to_receiver_,
399 kSenderSsrc, 400 kSenderSsrc,
400 kReceiverSsrc); 401 kReceiverSsrc);
401 402
402 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); 403 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender);
403 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); 404 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver);
404 405
405 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, base::TimeDelta(), NULL, &stats_); 406 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, base::TimeDelta(), NULL, &stats_);
406 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0, 1, 1); 407 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0, 1, 1);
407 RunTasks(33); 408 RunTasks(33);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); 471 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3);
471 EXPECT_EQ(input_time, out_3); // Verify inverse. 472 EXPECT_EQ(input_time, out_3); // Verify inverse.
472 473
473 // Verify delta. 474 // Verify delta.
474 EXPECT_EQ((out_3 - out_2), time_delta); 475 EXPECT_EQ((out_3 - out_2), time_delta);
475 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); 476 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1);
476 } 477 }
477 478
478 } // namespace cast 479 } // namespace cast
479 } // namespace media 480 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698