OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |