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 "base/test/simple_test_tick_clock.h" | 5 #include "base/test/simple_test_tick_clock.h" |
6 #include "media/cast/cast_defines.h" | 6 #include "media/cast/cast_defines.h" |
7 #include "media/cast/pacing/paced_sender.h" | 7 #include "media/cast/pacing/paced_sender.h" |
8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" | 8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" |
9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" | 9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" |
10 #include "media/cast/rtcp/rtcp.h" | 10 #include "media/cast/rtcp/rtcp.h" |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 EXPECT_CALL(mock_sender_feedback_, OnReceivedNackRequest(_)).Times(0); | 106 EXPECT_CALL(mock_sender_feedback_, OnReceivedNackRequest(_)).Times(0); |
107 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(0); | 107 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(0); |
108 } | 108 } |
109 | 109 |
110 base::SimpleTestTickClock testing_clock_; | 110 base::SimpleTestTickClock testing_clock_; |
111 LocalRtcpTransport transport_; | 111 LocalRtcpTransport transport_; |
112 MockRtcpSenderFeedback mock_sender_feedback_; | 112 MockRtcpSenderFeedback mock_sender_feedback_; |
113 }; | 113 }; |
114 | 114 |
115 TEST_F(RtcpTest, TimeToSend) { | 115 TEST_F(RtcpTest, TimeToSend) { |
116 base::TimeTicks start_time = | 116 base::TimeTicks start_time; |
117 base::TimeTicks::FromInternalValue(kStartMillisecond * 1000); | 117 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); |
118 Rtcp rtcp(&testing_clock_, | 118 Rtcp rtcp(&testing_clock_, |
119 &mock_sender_feedback_, | 119 &mock_sender_feedback_, |
120 &transport_, | 120 &transport_, |
121 NULL, | 121 NULL, |
122 NULL, | 122 NULL, |
123 kRtcpCompound, | 123 kRtcpCompound, |
124 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 124 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
125 true, // Media sender. | 125 true, // Media sender. |
126 kSenderSsrc, | 126 kSenderSsrc, |
127 kCName); | 127 kCName); |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 1); | 286 1); |
287 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); | 287 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
288 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 288 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
289 rtcp_sender.SendRtcpReport(kSenderSsrc); | 289 rtcp_sender.SendRtcpReport(kSenderSsrc); |
290 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 290 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
291 | 291 |
292 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); | 292 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
293 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, | 293 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, |
294 avg_rtt.InMilliseconds(), | 294 avg_rtt.InMilliseconds(), |
295 1); | 295 1); |
296 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); | 296 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
297 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 297 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
298 } | 298 } |
299 | 299 |
300 TEST_F(RtcpTest, NtpAndTime) { | 300 TEST_F(RtcpTest, NtpAndTime) { |
301 RtcpPeer rtcp_peer(&testing_clock_, | 301 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60); |
302 &mock_sender_feedback_, | 302 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60); |
303 NULL, | 303 |
304 NULL, | 304 uint32 ntp_seconds_1 = 0; |
305 NULL, | 305 uint32 ntp_fractions_1 = 0; |
306 kRtcpReducedSize, | 306 base::TimeTicks input_time = base::TimeTicks::Now(); |
307 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 307 ConvertTimeTicksToNtp(input_time, &ntp_seconds_1, &ntp_fractions_1); |
308 false, | 308 |
309 kReceiverSsrc, | 309 // Verify absolute value. |
310 kCName); | 310 EXPECT_GT(ntp_seconds_1, kSecondsbetweenYear1900and2010); |
311 uint32 ntp_seconds = 0; | 311 EXPECT_LT(ntp_seconds_1, kSecondsbetweenYear1900and2030); |
312 uint32 ntp_fractions = 0; | 312 |
313 base::TimeTicks input_time = base::TimeTicks::FromInternalValue( | 313 base::TimeTicks out_1 = ConvertNtpToTimeTicks(ntp_seconds_1, ntp_fractions_1); |
314 12345678901000LL + kNtpEpochDeltaMicroseconds); | 314 EXPECT_EQ(input_time, out_1); // Verify inverse. |
315 ConvertTimeToNtp(input_time, &ntp_seconds, &ntp_fractions); | 315 |
316 EXPECT_EQ(12345678u, ntp_seconds); | 316 base::TimeDelta time_delta = base::TimeDelta::FromMilliseconds(1100); |
317 EXPECT_EQ(input_time, | 317 input_time += time_delta; |
318 ConvertNtpToTime(ntp_seconds, ntp_fractions)); | 318 |
| 319 uint32 ntp_seconds_2 = 0; |
| 320 uint32 ntp_fractions_2 = 0; |
| 321 |
| 322 ConvertTimeTicksToNtp(input_time, &ntp_seconds_2, &ntp_fractions_2); |
| 323 base::TimeTicks out_2 = ConvertNtpToTimeTicks(ntp_seconds_2, ntp_fractions_2); |
| 324 EXPECT_EQ(input_time, out_2); // Verify inverse. |
| 325 |
| 326 // Verify delta. |
| 327 EXPECT_EQ((out_2 - out_1), time_delta); |
| 328 EXPECT_EQ((ntp_seconds_2 - ntp_seconds_1), GG_UINT32_C(1)); |
| 329 EXPECT_NEAR((ntp_fractions_2 - ntp_fractions_1), 0xffffffff / 10, 1); |
319 } | 330 } |
320 | 331 |
321 TEST_F(RtcpTest, WrapAround) { | 332 TEST_F(RtcpTest, WrapAround) { |
322 RtcpPeer rtcp_peer(&testing_clock_, | 333 RtcpPeer rtcp_peer(&testing_clock_, |
323 &mock_sender_feedback_, | 334 &mock_sender_feedback_, |
324 NULL, | 335 NULL, |
325 NULL, | 336 NULL, |
326 NULL, | 337 NULL, |
327 kRtcpReducedSize, | 338 kRtcpReducedSize, |
328 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 339 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 int frequency = 32000; | 371 int frequency = 32000; |
361 uint32 rtp_timestamp = 64000; | 372 uint32 rtp_timestamp = 64000; |
362 base::TimeTicks rtp_timestamp_in_ticks; | 373 base::TimeTicks rtp_timestamp_in_ticks; |
363 | 374 |
364 // Test fail before we get a OnReceivedLipSyncInfo. | 375 // Test fail before we get a OnReceivedLipSyncInfo. |
365 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 376 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
366 &rtp_timestamp_in_ticks)); | 377 &rtp_timestamp_in_ticks)); |
367 | 378 |
368 uint32 ntp_seconds = 0; | 379 uint32 ntp_seconds = 0; |
369 uint32 ntp_fractions = 0; | 380 uint32 ntp_fractions = 0; |
370 base::TimeTicks input_time = base::TimeTicks::FromInternalValue( | 381 uint64 input_time_us = 12345678901000LL; |
371 12345678901000LL + kNtpEpochDeltaMicroseconds); | 382 base::TimeTicks input_time; |
| 383 input_time += base::TimeDelta::FromMicroseconds(input_time_us); |
372 | 384 |
373 // Test exact match. | 385 // Test exact match. |
374 ConvertTimeToNtp(input_time, &ntp_seconds, &ntp_fractions); | 386 ConvertTimeTicksToNtp(input_time, &ntp_seconds, &ntp_fractions); |
375 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); | 387 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); |
376 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 388 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
377 &rtp_timestamp_in_ticks)); | 389 &rtp_timestamp_in_ticks)); |
378 EXPECT_EQ(input_time, rtp_timestamp_in_ticks); | 390 EXPECT_EQ(input_time, rtp_timestamp_in_ticks); |
379 | 391 |
380 // Test older rtp_timestamp. | 392 // Test older rtp_timestamp. |
381 rtp_timestamp = 32000; | 393 rtp_timestamp = 32000; |
382 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 394 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
383 &rtp_timestamp_in_ticks)); | 395 &rtp_timestamp_in_ticks)); |
384 EXPECT_EQ(input_time - base::TimeDelta::FromMilliseconds(1000), | 396 EXPECT_EQ(input_time - base::TimeDelta::FromMilliseconds(1000), |
385 rtp_timestamp_in_ticks); | 397 rtp_timestamp_in_ticks); |
386 | 398 |
387 // Test older rtp_timestamp with wrap. | 399 // Test older rtp_timestamp with wrap. |
388 rtp_timestamp = 4294903296u; | 400 rtp_timestamp = 4294903296u; |
389 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 401 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
390 &rtp_timestamp_in_ticks)); | 402 &rtp_timestamp_in_ticks)); |
391 EXPECT_EQ(input_time - base::TimeDelta::FromMilliseconds(4000), | 403 EXPECT_EQ(input_time - base::TimeDelta::FromMilliseconds(4000), |
392 rtp_timestamp_in_ticks); | 404 rtp_timestamp_in_ticks); |
393 | 405 |
394 // Test newer rtp_timestamp. | 406 // Test newer rtp_timestamp. |
395 rtp_timestamp = 128000; | 407 rtp_timestamp = 128000; |
396 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 408 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
397 &rtp_timestamp_in_ticks)); | 409 &rtp_timestamp_in_ticks)); |
398 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(2000), | 410 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(2000), |
399 rtp_timestamp_in_ticks); | 411 rtp_timestamp_in_ticks); |
400 | 412 |
401 // Test newer rtp_timestamp with wrap. | 413 // Test newer rtp_timestamp with wrap. |
402 rtp_timestamp = 4294903296u; | 414 rtp_timestamp = 4294903296u; |
403 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); | 415 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); |
404 rtp_timestamp = 64000; | 416 rtp_timestamp = 64000; |
405 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 417 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
406 &rtp_timestamp_in_ticks)); | 418 &rtp_timestamp_in_ticks)); |
407 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), | 419 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), |
408 rtp_timestamp_in_ticks); | 420 rtp_timestamp_in_ticks); |
409 } | 421 } |
410 | 422 |
411 } // namespace cast | 423 } // namespace cast |
412 } // namespace media | 424 } // namespace media |
OLD | NEW |