| 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" |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 : Rtcp(cast_environment, | 137 : Rtcp(cast_environment, |
| 138 sender_feedback, | 138 sender_feedback, |
| 139 transport_sender, | 139 transport_sender, |
| 140 paced_packet_sender, | 140 paced_packet_sender, |
| 141 rtp_receiver_statistics, | 141 rtp_receiver_statistics, |
| 142 rtcp_mode, | 142 rtcp_mode, |
| 143 rtcp_interval, | 143 rtcp_interval, |
| 144 local_ssrc, | 144 local_ssrc, |
| 145 remote_ssrc, | 145 remote_ssrc, |
| 146 c_name, | 146 c_name, |
| 147 true) {} | 147 AUDIO_EVENT) {} |
| 148 | 148 |
| 149 using Rtcp::OnReceivedNtp; | 149 using Rtcp::OnReceivedNtp; |
| 150 using Rtcp::OnReceivedLipSyncInfo; | 150 using Rtcp::OnReceivedLipSyncInfo; |
| 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_(new test::FakeSingleThreadTaskRunner(testing_clock_)), |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 Rtcp rtcp(cast_environment_, | 212 Rtcp rtcp(cast_environment_, |
| 213 &mock_sender_feedback_, | 213 &mock_sender_feedback_, |
| 214 transport_sender_.get(), | 214 transport_sender_.get(), |
| 215 &receiver_to_sender_, | 215 &receiver_to_sender_, |
| 216 NULL, | 216 NULL, |
| 217 kRtcpCompound, | 217 kRtcpCompound, |
| 218 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 218 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 219 kSenderSsrc, | 219 kSenderSsrc, |
| 220 kReceiverSsrc, | 220 kReceiverSsrc, |
| 221 kCName, | 221 kCName, |
| 222 true); | 222 AUDIO_EVENT); |
| 223 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 223 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
| 224 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); | 224 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); |
| 225 EXPECT_GE( | 225 EXPECT_GE( |
| 226 start_time + base::TimeDelta::FromMilliseconds(kRtcpIntervalMs * 3 / 2), | 226 start_time + base::TimeDelta::FromMilliseconds(kRtcpIntervalMs * 3 / 2), |
| 227 rtcp.TimeToSendNextRtcpReport()); | 227 rtcp.TimeToSendNextRtcpReport()); |
| 228 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; | 228 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; |
| 229 testing_clock_->Advance(delta); | 229 testing_clock_->Advance(delta); |
| 230 EXPECT_EQ(testing_clock_->NowTicks(), rtcp.TimeToSendNextRtcpReport()); | 230 EXPECT_EQ(testing_clock_->NowTicks(), rtcp.TimeToSendNextRtcpReport()); |
| 231 } | 231 } |
| 232 | 232 |
| 233 TEST_F(RtcpTest, BasicSenderReport) { | 233 TEST_F(RtcpTest, BasicSenderReport) { |
| 234 Rtcp rtcp(cast_environment_, | 234 Rtcp rtcp(cast_environment_, |
| 235 &mock_sender_feedback_, | 235 &mock_sender_feedback_, |
| 236 transport_sender_.get(), | 236 transport_sender_.get(), |
| 237 NULL, | 237 NULL, |
| 238 NULL, | 238 NULL, |
| 239 kRtcpCompound, | 239 kRtcpCompound, |
| 240 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 240 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 241 kSenderSsrc, | 241 kSenderSsrc, |
| 242 kReceiverSsrc, | 242 kReceiverSsrc, |
| 243 kCName, | 243 kCName, |
| 244 true); | 244 AUDIO_EVENT); |
| 245 sender_to_receiver_.set_rtcp_receiver(&rtcp); | 245 sender_to_receiver_.set_rtcp_receiver(&rtcp); |
| 246 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0); | 246 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0); |
| 247 } | 247 } |
| 248 | 248 |
| 249 TEST_F(RtcpTest, BasicReceiverReport) { | 249 TEST_F(RtcpTest, BasicReceiverReport) { |
| 250 Rtcp rtcp(cast_environment_, | 250 Rtcp rtcp(cast_environment_, |
| 251 &mock_sender_feedback_, | 251 &mock_sender_feedback_, |
| 252 NULL, | 252 NULL, |
| 253 &receiver_to_sender_, | 253 &receiver_to_sender_, |
| 254 NULL, | 254 NULL, |
| 255 kRtcpCompound, | 255 kRtcpCompound, |
| 256 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 256 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 257 kSenderSsrc, | 257 kSenderSsrc, |
| 258 kReceiverSsrc, | 258 kReceiverSsrc, |
| 259 kCName, | 259 kCName, |
| 260 true); | 260 AUDIO_EVENT); |
| 261 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 261 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
| 262 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); | 262 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); |
| 263 } | 263 } |
| 264 | 264 |
| 265 TEST_F(RtcpTest, BasicCast) { | 265 TEST_F(RtcpTest, BasicCast) { |
| 266 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); | 266 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); |
| 267 | 267 |
| 268 // Media receiver. | 268 // Media receiver. |
| 269 Rtcp rtcp(cast_environment_, | 269 Rtcp rtcp(cast_environment_, |
| 270 &mock_sender_feedback_, | 270 &mock_sender_feedback_, |
| 271 NULL, | 271 NULL, |
| 272 &receiver_to_sender_, | 272 &receiver_to_sender_, |
| 273 NULL, | 273 NULL, |
| 274 kRtcpReducedSize, | 274 kRtcpReducedSize, |
| 275 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 275 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 276 kSenderSsrc, | 276 kSenderSsrc, |
| 277 kSenderSsrc, | 277 kSenderSsrc, |
| 278 kCName, | 278 kCName, |
| 279 true); | 279 AUDIO_EVENT); |
| 280 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 280 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
| 281 RtcpCastMessage cast_message(kSenderSsrc); | 281 RtcpCastMessage cast_message(kSenderSsrc); |
| 282 cast_message.ack_frame_id_ = kAckFrameId; | 282 cast_message.ack_frame_id_ = kAckFrameId; |
| 283 PacketIdSet missing_packets; | 283 PacketIdSet missing_packets; |
| 284 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 284 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |
| 285 | 285 |
| 286 missing_packets.insert(kLostPacketId1); | 286 missing_packets.insert(kLostPacketId1); |
| 287 missing_packets.insert(kLostPacketId2); | 287 missing_packets.insert(kLostPacketId2); |
| 288 missing_packets.insert(kLostPacketId3); | 288 missing_packets.insert(kLostPacketId3); |
| 289 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 289 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 290 missing_packets; | 290 missing_packets; |
| 291 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); | 291 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); |
| 292 } | 292 } |
| 293 | 293 |
| 294 TEST_F(RtcpTest, RttReducedSizeRtcp) { | 294 TEST_F(RtcpTest, RttReducedSizeRtcp) { |
| 295 // Media receiver. | 295 // Media receiver. |
| 296 Rtcp rtcp_receiver(cast_environment_, | 296 Rtcp rtcp_receiver(cast_environment_, |
| 297 &mock_sender_feedback_, | 297 &mock_sender_feedback_, |
| 298 NULL, | 298 NULL, |
| 299 &receiver_to_sender_, | 299 &receiver_to_sender_, |
| 300 NULL, | 300 NULL, |
| 301 kRtcpReducedSize, | 301 kRtcpReducedSize, |
| 302 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 302 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 303 kReceiverSsrc, | 303 kReceiverSsrc, |
| 304 kSenderSsrc, | 304 kSenderSsrc, |
| 305 kCName, | 305 kCName, |
| 306 true); | 306 AUDIO_EVENT); |
| 307 | 307 |
| 308 // Media sender. | 308 // Media sender. |
| 309 Rtcp rtcp_sender(cast_environment_, | 309 Rtcp rtcp_sender(cast_environment_, |
| 310 &mock_sender_feedback_, | 310 &mock_sender_feedback_, |
| 311 transport_sender_.get(), | 311 transport_sender_.get(), |
| 312 NULL, | 312 NULL, |
| 313 NULL, | 313 NULL, |
| 314 kRtcpReducedSize, | 314 kRtcpReducedSize, |
| 315 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 315 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 316 kSenderSsrc, | 316 kSenderSsrc, |
| 317 kReceiverSsrc, | 317 kReceiverSsrc, |
| 318 kCName, | 318 kCName, |
| 319 true); | 319 AUDIO_EVENT); |
| 320 | 320 |
| 321 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 321 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
| 322 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 322 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
| 323 | 323 |
| 324 base::TimeDelta rtt; | 324 base::TimeDelta rtt; |
| 325 base::TimeDelta avg_rtt; | 325 base::TimeDelta avg_rtt; |
| 326 base::TimeDelta min_rtt; | 326 base::TimeDelta min_rtt; |
| 327 base::TimeDelta max_rtt; | 327 base::TimeDelta max_rtt; |
| 328 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 328 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 329 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 329 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 352 Rtcp rtcp_receiver(cast_environment_, | 352 Rtcp rtcp_receiver(cast_environment_, |
| 353 &mock_sender_feedback_, | 353 &mock_sender_feedback_, |
| 354 NULL, | 354 NULL, |
| 355 &receiver_to_sender_, | 355 &receiver_to_sender_, |
| 356 NULL, | 356 NULL, |
| 357 kRtcpCompound, | 357 kRtcpCompound, |
| 358 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 358 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 359 kReceiverSsrc, | 359 kReceiverSsrc, |
| 360 kSenderSsrc, | 360 kSenderSsrc, |
| 361 kCName, | 361 kCName, |
| 362 true); | 362 AUDIO_EVENT); |
| 363 | 363 |
| 364 // Media sender. | 364 // Media sender. |
| 365 Rtcp rtcp_sender(cast_environment_, | 365 Rtcp rtcp_sender(cast_environment_, |
| 366 &mock_sender_feedback_, | 366 &mock_sender_feedback_, |
| 367 transport_sender_.get(), | 367 transport_sender_.get(), |
| 368 NULL, | 368 NULL, |
| 369 NULL, | 369 NULL, |
| 370 kRtcpCompound, | 370 kRtcpCompound, |
| 371 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 371 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 372 kSenderSsrc, | 372 kSenderSsrc, |
| 373 kReceiverSsrc, | 373 kReceiverSsrc, |
| 374 kCName, | 374 kCName, |
| 375 true); | 375 AUDIO_EVENT); |
| 376 | 376 |
| 377 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 377 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
| 378 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 378 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
| 379 | 379 |
| 380 base::TimeDelta rtt; | 380 base::TimeDelta rtt; |
| 381 base::TimeDelta avg_rtt; | 381 base::TimeDelta avg_rtt; |
| 382 base::TimeDelta min_rtt; | 382 base::TimeDelta min_rtt; |
| 383 base::TimeDelta max_rtt; | 383 base::TimeDelta max_rtt; |
| 384 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 384 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 385 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 385 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 Rtcp rtcp_receiver(cast_environment_, | 445 Rtcp rtcp_receiver(cast_environment_, |
| 446 &mock_sender_feedback_, | 446 &mock_sender_feedback_, |
| 447 NULL, | 447 NULL, |
| 448 &receiver_to_sender_, | 448 &receiver_to_sender_, |
| 449 NULL, | 449 NULL, |
| 450 kRtcpReducedSize, | 450 kRtcpReducedSize, |
| 451 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 451 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 452 kReceiverSsrc, | 452 kReceiverSsrc, |
| 453 kSenderSsrc, | 453 kSenderSsrc, |
| 454 kCName, | 454 kCName, |
| 455 true); | 455 AUDIO_EVENT); |
| 456 | 456 |
| 457 // Media sender. | 457 // Media sender. |
| 458 Rtcp rtcp_sender(cast_environment_, | 458 Rtcp rtcp_sender(cast_environment_, |
| 459 &mock_sender_feedback_, | 459 &mock_sender_feedback_, |
| 460 transport_sender_.get(), | 460 transport_sender_.get(), |
| 461 NULL, | 461 NULL, |
| 462 NULL, | 462 NULL, |
| 463 kRtcpReducedSize, | 463 kRtcpReducedSize, |
| 464 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 464 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 465 kSenderSsrc, | 465 kSenderSsrc, |
| 466 kReceiverSsrc, | 466 kReceiverSsrc, |
| 467 kCName, | 467 kCName, |
| 468 true); | 468 AUDIO_EVENT); |
| 469 | 469 |
| 470 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 470 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
| 471 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 471 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
| 472 | 472 |
| 473 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); | 473 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 474 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0); | 474 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0); |
| 475 RunTasks(33); | 475 RunTasks(33); |
| 476 | 476 |
| 477 base::TimeDelta rtt; | 477 base::TimeDelta rtt; |
| 478 base::TimeDelta avg_rtt; | 478 base::TimeDelta avg_rtt; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); | 538 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); |
| 539 EXPECT_EQ(input_time, out_3); // Verify inverse. | 539 EXPECT_EQ(input_time, out_3); // Verify inverse. |
| 540 | 540 |
| 541 // Verify delta. | 541 // Verify delta. |
| 542 EXPECT_EQ((out_3 - out_2), time_delta); | 542 EXPECT_EQ((out_3 - out_2), time_delta); |
| 543 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); | 543 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); |
| 544 } | 544 } |
| 545 | 545 |
| 546 } // namespace cast | 546 } // namespace cast |
| 547 } // namespace media | 547 } // namespace media |
| OLD | NEW |