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

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

Issue 281453003: Cast: Simplify code path for RTCP sender report (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged Created 6 years, 7 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 | « media/cast/rtcp/rtcp.cc ('k') | media/cast/rtp_timestamp_helper.h » ('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 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 <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/cast_environment.h" 9 #include "media/cast/cast_environment.h"
10 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" 10 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h"
11 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" 11 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h"
12 #include "media/cast/rtcp/rtcp.h" 12 #include "media/cast/rtcp/rtcp.h"
13 #include "media/cast/rtcp/test_rtcp_packet_builder.h" 13 #include "media/cast/rtcp/test_rtcp_packet_builder.h"
14 #include "media/cast/test/fake_single_thread_task_runner.h" 14 #include "media/cast/test/fake_single_thread_task_runner.h"
15 #include "media/cast/transport/cast_transport_config.h" 15 #include "media/cast/transport/cast_transport_config.h"
16 #include "media/cast/transport/cast_transport_sender_impl.h" 16 #include "media/cast/transport/cast_transport_sender_impl.h"
17 #include "media/cast/transport/pacing/paced_sender.h" 17 #include "media/cast/transport/pacing/paced_sender.h"
18 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
19 19
20 namespace media { 20 namespace media {
21 namespace cast { 21 namespace cast {
22 22
23 using testing::_; 23 using testing::_;
24 24
25 static const uint32 kSenderSsrc = 0x10203; 25 static const uint32 kSenderSsrc = 0x10203;
26 static const uint32 kReceiverSsrc = 0x40506; 26 static const uint32 kReceiverSsrc = 0x40506;
27 static const std::string kCName("test@10.1.1.1"); 27 static const std::string kCName("test@10.1.1.1");
28 static const uint32 kRtcpIntervalMs = 500; 28 static const uint32 kRtcpIntervalMs = 500;
29 static const int64 kStartMillisecond = INT64_C(12345678900000);
30 static const int64 kAddedDelay = 123; 29 static const int64 kAddedDelay = 123;
31 static const int64 kAddedShortDelay = 100; 30 static const int64 kAddedShortDelay = 100;
32 31
33 class RtcpTestPacketSender : public transport::PacketSender { 32 class RtcpTestPacketSender : public transport::PacketSender {
34 public: 33 public:
35 explicit RtcpTestPacketSender(base::SimpleTestTickClock* testing_clock) 34 explicit RtcpTestPacketSender(base::SimpleTestTickClock* testing_clock)
36 : drop_packets_(false), 35 : drop_packets_(false),
37 short_delay_(false), 36 short_delay_(false),
38 rtcp_receiver_(NULL), 37 rtcp_receiver_(NULL),
39 testing_clock_(testing_clock) {} 38 testing_clock_(testing_clock) {}
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 protected: 150 protected:
152 RtcpTest() 151 RtcpTest()
153 : testing_clock_(new base::SimpleTestTickClock()), 152 : testing_clock_(new base::SimpleTestTickClock()),
154 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), 153 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
155 cast_environment_(new CastEnvironment( 154 cast_environment_(new CastEnvironment(
156 scoped_ptr<base::TickClock>(testing_clock_).Pass(), 155 scoped_ptr<base::TickClock>(testing_clock_).Pass(),
157 task_runner_, 156 task_runner_,
158 task_runner_, 157 task_runner_,
159 task_runner_)), 158 task_runner_)),
160 sender_to_receiver_(testing_clock_), 159 sender_to_receiver_(testing_clock_),
161 receiver_to_sender_(cast_environment_, testing_clock_), 160 receiver_to_sender_(cast_environment_, testing_clock_) {
162 rtp_sender_stats_(kVideoFrequency) { 161 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
163 testing_clock_->Advance(
164 base::TimeDelta::FromMilliseconds(kStartMillisecond));
165 net::IPEndPoint dummy_endpoint; 162 net::IPEndPoint dummy_endpoint;
166 transport_sender_.reset(new transport::CastTransportSenderImpl( 163 transport_sender_.reset(new transport::CastTransportSenderImpl(
167 NULL, 164 NULL,
168 testing_clock_, 165 testing_clock_,
169 dummy_endpoint, 166 dummy_endpoint,
170 base::Bind(&UpdateCastTransportStatus), 167 base::Bind(&UpdateCastTransportStatus),
171 transport::BulkRawEventsCallback(), 168 transport::BulkRawEventsCallback(),
172 base::TimeDelta(), 169 base::TimeDelta(),
173 task_runner_, 170 task_runner_,
174 &sender_to_receiver_)); 171 &sender_to_receiver_));
172 transport::CastTransportAudioConfig config;
173 config.rtp.config.ssrc = kSenderSsrc;
174 config.rtp.max_outstanding_frames = 1;
175 transport_sender_->InitializeAudio(config);
175 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(0); 176 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(0);
176 } 177 }
177 178
178 virtual ~RtcpTest() {} 179 virtual ~RtcpTest() {}
179 180
180 static void UpdateCastTransportStatus(transport::CastTransportStatus status) { 181 static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
181 bool result = (status == transport::TRANSPORT_AUDIO_INITIALIZED || 182 bool result = (status == transport::TRANSPORT_AUDIO_INITIALIZED ||
182 status == transport::TRANSPORT_VIDEO_INITIALIZED); 183 status == transport::TRANSPORT_VIDEO_INITIALIZED);
183 EXPECT_TRUE(result); 184 EXPECT_TRUE(result);
184 } 185 }
185 186
186 void RunTasks(int during_ms) { 187 void RunTasks(int during_ms) {
187 for (int i = 0; i < during_ms; ++i) { 188 for (int i = 0; i < during_ms; ++i) {
188 // Call process the timers every 1 ms. 189 // Call process the timers every 1 ms.
189 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(1)); 190 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(1));
190 task_runner_->RunTasks(); 191 task_runner_->RunTasks();
191 } 192 }
192 } 193 }
193 194
194 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. 195 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
195 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 196 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
196 scoped_refptr<CastEnvironment> cast_environment_; 197 scoped_refptr<CastEnvironment> cast_environment_;
197 RtcpTestPacketSender sender_to_receiver_; 198 RtcpTestPacketSender sender_to_receiver_;
198 scoped_ptr<transport::CastTransportSenderImpl> transport_sender_; 199 scoped_ptr<transport::CastTransportSenderImpl> transport_sender_;
199 LocalRtcpTransport receiver_to_sender_; 200 LocalRtcpTransport receiver_to_sender_;
200 MockRtcpSenderFeedback mock_sender_feedback_; 201 MockRtcpSenderFeedback mock_sender_feedback_;
201 RtpSenderStatistics rtp_sender_stats_;
202 202
203 DISALLOW_COPY_AND_ASSIGN(RtcpTest); 203 DISALLOW_COPY_AND_ASSIGN(RtcpTest);
204 }; 204 };
205 205
206 TEST_F(RtcpTest, TimeToSend) { 206 TEST_F(RtcpTest, TimeToSend) {
207 base::TimeTicks start_time; 207 base::TimeTicks start_time = testing_clock_->NowTicks();
208 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond);
209 Rtcp rtcp(cast_environment_, 208 Rtcp rtcp(cast_environment_,
210 &mock_sender_feedback_, 209 &mock_sender_feedback_,
211 transport_sender_.get(), 210 transport_sender_.get(),
212 &receiver_to_sender_, 211 &receiver_to_sender_,
213 NULL, 212 NULL,
214 kRtcpCompound, 213 kRtcpCompound,
215 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 214 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
216 kSenderSsrc, 215 kSenderSsrc,
217 kReceiverSsrc, 216 kReceiverSsrc,
218 kCName, 217 kCName,
(...skipping 14 matching lines...) Expand all
233 transport_sender_.get(), 232 transport_sender_.get(),
234 NULL, 233 NULL,
235 NULL, 234 NULL,
236 kRtcpCompound, 235 kRtcpCompound,
237 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 236 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
238 kSenderSsrc, 237 kSenderSsrc,
239 kReceiverSsrc, 238 kReceiverSsrc,
240 kCName, 239 kCName,
241 true); 240 true);
242 sender_to_receiver_.set_rtcp_receiver(&rtcp); 241 sender_to_receiver_.set_rtcp_receiver(&rtcp);
243 rtcp.SendRtcpFromRtpSender(rtp_sender_stats_.sender_info()); 242 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0);
244 } 243 }
245 244
246 TEST_F(RtcpTest, BasicReceiverReport) { 245 TEST_F(RtcpTest, BasicReceiverReport) {
247 Rtcp rtcp(cast_environment_, 246 Rtcp rtcp(cast_environment_,
248 &mock_sender_feedback_, 247 &mock_sender_feedback_,
249 NULL, 248 NULL,
250 &receiver_to_sender_, 249 &receiver_to_sender_,
251 NULL, 250 NULL,
252 kRtcpCompound, 251 kRtcpCompound,
253 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 252 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); 317 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver);
319 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); 318 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender);
320 319
321 base::TimeDelta rtt; 320 base::TimeDelta rtt;
322 base::TimeDelta avg_rtt; 321 base::TimeDelta avg_rtt;
323 base::TimeDelta min_rtt; 322 base::TimeDelta min_rtt;
324 base::TimeDelta max_rtt; 323 base::TimeDelta max_rtt;
325 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 324 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
326 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 325 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
327 326
328 rtcp_sender.SendRtcpFromRtpSender(rtp_sender_stats_.sender_info()); 327 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 1);
329 RunTasks(33); 328 RunTasks(33);
330 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); 329 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
331 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 330 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
332 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 331 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
333 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 2); 332 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 2);
334 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2); 333 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2);
335 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2); 334 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2);
336 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2); 335 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2);
337 rtcp_sender.SendRtcpFromRtpSender(rtp_sender_stats_.sender_info()); 336 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 2);
338 RunTasks(33); 337 RunTasks(33);
339 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 338 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
340 339
341 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 2); 340 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 2);
342 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2); 341 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2);
343 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2); 342 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2);
344 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2); 343 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2);
345 } 344 }
346 345
347 TEST_F(RtcpTest, Rtt) { 346 TEST_F(RtcpTest, Rtt) {
(...skipping 26 matching lines...) Expand all
374 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); 373 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender);
375 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); 374 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver);
376 375
377 base::TimeDelta rtt; 376 base::TimeDelta rtt;
378 base::TimeDelta avg_rtt; 377 base::TimeDelta avg_rtt;
379 base::TimeDelta min_rtt; 378 base::TimeDelta min_rtt;
380 base::TimeDelta max_rtt; 379 base::TimeDelta max_rtt;
381 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 380 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
382 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 381 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
383 382
384 rtcp_sender.SendRtcpFromRtpSender(rtp_sender_stats_.sender_info()); 383 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 1);
385 RunTasks(33); 384 RunTasks(33);
386 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); 385 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
387 386
388 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 387 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
389 RunTasks(33); 388 RunTasks(33);
390 389
391 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 390 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
392 RunTasks(33); 391 RunTasks(33);
393 392
394 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 2); 393 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 2);
395 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2); 394 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2);
396 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2); 395 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2);
397 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2); 396 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2);
398 397
399 rtcp_sender.SendRtcpFromRtpSender(rtp_sender_stats_.sender_info()); 398 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 2);
400 RunTasks(33); 399 RunTasks(33);
401 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 400 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
402 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 2); 401 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 2);
403 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2); 402 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 2);
404 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2); 403 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 2);
405 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2); 404 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2);
406 405
407 receiver_to_sender_.set_short_delay(); 406 receiver_to_sender_.set_short_delay();
408 sender_to_receiver_.set_short_delay(); 407 sender_to_receiver_.set_short_delay();
409 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); 408 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
410 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 409 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
411 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 2); 410 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 2);
412 EXPECT_NEAR( 411 EXPECT_NEAR(
413 (kAddedShortDelay + 3 * kAddedDelay) / 2, avg_rtt.InMilliseconds(), 2); 412 (kAddedShortDelay + 3 * kAddedDelay) / 2, avg_rtt.InMilliseconds(), 2);
414 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 2); 413 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 2);
415 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2); 414 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2);
416 415
417 rtcp_sender.SendRtcpFromRtpSender(rtp_sender_stats_.sender_info()); 416 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 3);
418 RunTasks(33); 417 RunTasks(33);
419 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 418 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
420 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); 419 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1);
421 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, 420 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2,
422 avg_rtt.InMilliseconds(), 421 avg_rtt.InMilliseconds(),
423 1); 422 1);
424 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 2); 423 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 2);
425 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2); 424 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 2);
426 425
427 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); 426 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
(...skipping 11 matching lines...) Expand all
439 438
440 TEST_F(RtcpTest, RttWithPacketLoss) { 439 TEST_F(RtcpTest, RttWithPacketLoss) {
441 // Media receiver. 440 // Media receiver.
442 Rtcp rtcp_receiver(cast_environment_, 441 Rtcp rtcp_receiver(cast_environment_,
443 &mock_sender_feedback_, 442 &mock_sender_feedback_,
444 NULL, 443 NULL,
445 &receiver_to_sender_, 444 &receiver_to_sender_,
446 NULL, 445 NULL,
447 kRtcpReducedSize, 446 kRtcpReducedSize,
448 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 447 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
448 kReceiverSsrc,
449 kSenderSsrc, 449 kSenderSsrc,
450 kReceiverSsrc,
451 kCName, 450 kCName,
452 true); 451 true);
453 452
454 // Media sender. 453 // Media sender.
455 Rtcp rtcp_sender(cast_environment_, 454 Rtcp rtcp_sender(cast_environment_,
456 &mock_sender_feedback_, 455 &mock_sender_feedback_,
457 transport_sender_.get(), 456 transport_sender_.get(),
458 NULL, 457 NULL,
459 NULL, 458 NULL,
460 kRtcpReducedSize, 459 kRtcpReducedSize,
461 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), 460 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs),
461 kSenderSsrc,
462 kReceiverSsrc, 462 kReceiverSsrc,
463 kSenderSsrc,
464 kCName, 463 kCName,
465 true); 464 true);
466 465
467 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); 466 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender);
468 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); 467 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver);
469 468
470 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); 469 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
471 rtcp_sender.SendRtcpFromRtpSender(rtp_sender_stats_.sender_info()); 470 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0);
472 RunTasks(33); 471 RunTasks(33);
473 472
474 base::TimeDelta rtt; 473 base::TimeDelta rtt;
475 base::TimeDelta avg_rtt; 474 base::TimeDelta avg_rtt;
476 base::TimeDelta min_rtt; 475 base::TimeDelta min_rtt;
477 base::TimeDelta max_rtt; 476 base::TimeDelta max_rtt;
478 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 477 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
479 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 478 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
480 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); 479 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1);
481 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); 480 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1);
482 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); 481 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1);
483 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); 482 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1);
484 483
485 receiver_to_sender_.set_short_delay(); 484 receiver_to_sender_.set_short_delay();
486 sender_to_receiver_.set_short_delay(); 485 sender_to_receiver_.set_short_delay();
487 receiver_to_sender_.set_drop_packets(true); 486 receiver_to_sender_.set_drop_packets(true);
488 487
489 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); 488 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL);
490 rtcp_sender.SendRtcpFromRtpSender(rtp_sender_stats_.sender_info()); 489 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 1);
491 RunTasks(33); 490 RunTasks(33);
492 491
493 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); 492 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt));
494 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 2); 493 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 2);
495 } 494 }
496 495
497 TEST_F(RtcpTest, NtpAndTime) { 496 TEST_F(RtcpTest, NtpAndTime) {
498 const int64 kSecondsbetweenYear1900and2010 = INT64_C(40176 * 24 * 60 * 60); 497 const int64 kSecondsbetweenYear1900and2010 = INT64_C(40176 * 24 * 60 * 60);
499 const int64 kSecondsbetweenYear1900and2030 = INT64_C(47481 * 24 * 60 * 60); 498 const int64 kSecondsbetweenYear1900and2030 = INT64_C(47481 * 24 * 60 * 60);
500 499
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); 625 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions);
627 rtp_timestamp = 64000; 626 rtp_timestamp = 64000;
628 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime( 627 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(
629 frequency, rtp_timestamp, &rtp_timestamp_in_ticks)); 628 frequency, rtp_timestamp, &rtp_timestamp_in_ticks));
630 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), 629 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000),
631 rtp_timestamp_in_ticks); 630 rtp_timestamp_in_ticks);
632 } 631 }
633 632
634 } // namespace cast 633 } // namespace cast
635 } // namespace media 634 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp.cc ('k') | media/cast/rtp_timestamp_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698