| 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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 const std::string& c_name) | 133 const std::string& c_name) |
| 134 : Rtcp(cast_environment, | 134 : Rtcp(cast_environment, |
| 135 sender_feedback, | 135 sender_feedback, |
| 136 transport_sender, | 136 transport_sender, |
| 137 paced_packet_sender, | 137 paced_packet_sender, |
| 138 rtp_receiver_statistics, | 138 rtp_receiver_statistics, |
| 139 rtcp_mode, | 139 rtcp_mode, |
| 140 rtcp_interval, | 140 rtcp_interval, |
| 141 local_ssrc, | 141 local_ssrc, |
| 142 remote_ssrc, | 142 remote_ssrc, |
| 143 c_name) {} | 143 c_name, |
| 144 true) {} |
| 144 | 145 |
| 145 using Rtcp::CheckForWrapAround; | 146 using Rtcp::CheckForWrapAround; |
| 146 using Rtcp::OnReceivedLipSyncInfo; | 147 using Rtcp::OnReceivedLipSyncInfo; |
| 147 }; | 148 }; |
| 148 | 149 |
| 149 class RtcpTest : public ::testing::Test { | 150 class RtcpTest : public ::testing::Test { |
| 150 protected: | 151 protected: |
| 151 RtcpTest() | 152 RtcpTest() |
| 152 : testing_clock_(new base::SimpleTestTickClock()), | 153 : testing_clock_(new base::SimpleTestTickClock()), |
| 153 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), | 154 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); | 208 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); |
| 208 Rtcp rtcp(cast_environment_, | 209 Rtcp rtcp(cast_environment_, |
| 209 &mock_sender_feedback_, | 210 &mock_sender_feedback_, |
| 210 transport_sender_.get(), | 211 transport_sender_.get(), |
| 211 &receiver_to_sender_, | 212 &receiver_to_sender_, |
| 212 NULL, | 213 NULL, |
| 213 kRtcpCompound, | 214 kRtcpCompound, |
| 214 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 215 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 215 kSenderSsrc, | 216 kSenderSsrc, |
| 216 kReceiverSsrc, | 217 kReceiverSsrc, |
| 217 kCName); | 218 kCName, |
| 219 true); |
| 218 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 220 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
| 219 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); | 221 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); |
| 220 EXPECT_GE( | 222 EXPECT_GE( |
| 221 start_time + base::TimeDelta::FromMilliseconds(kRtcpIntervalMs * 3 / 2), | 223 start_time + base::TimeDelta::FromMilliseconds(kRtcpIntervalMs * 3 / 2), |
| 222 rtcp.TimeToSendNextRtcpReport()); | 224 rtcp.TimeToSendNextRtcpReport()); |
| 223 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; | 225 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; |
| 224 testing_clock_->Advance(delta); | 226 testing_clock_->Advance(delta); |
| 225 EXPECT_EQ(testing_clock_->NowTicks(), rtcp.TimeToSendNextRtcpReport()); | 227 EXPECT_EQ(testing_clock_->NowTicks(), rtcp.TimeToSendNextRtcpReport()); |
| 226 } | 228 } |
| 227 | 229 |
| 228 TEST_F(RtcpTest, BasicSenderReport) { | 230 TEST_F(RtcpTest, BasicSenderReport) { |
| 229 Rtcp rtcp(cast_environment_, | 231 Rtcp rtcp(cast_environment_, |
| 230 &mock_sender_feedback_, | 232 &mock_sender_feedback_, |
| 231 transport_sender_.get(), | 233 transport_sender_.get(), |
| 232 NULL, | 234 NULL, |
| 233 NULL, | 235 NULL, |
| 234 kRtcpCompound, | 236 kRtcpCompound, |
| 235 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 237 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 236 kSenderSsrc, | 238 kSenderSsrc, |
| 237 kReceiverSsrc, | 239 kReceiverSsrc, |
| 238 kCName); | 240 kCName, |
| 241 true); |
| 239 sender_to_receiver_.set_rtcp_receiver(&rtcp); | 242 sender_to_receiver_.set_rtcp_receiver(&rtcp); |
| 240 transport::RtcpSenderLogMessage empty_sender_log; | 243 transport::RtcpSenderLogMessage empty_sender_log; |
| 241 rtcp.SendRtcpFromRtpSender(empty_sender_log, rtp_sender_stats_.sender_info()); | 244 rtcp.SendRtcpFromRtpSender(empty_sender_log, rtp_sender_stats_.sender_info()); |
| 242 } | 245 } |
| 243 | 246 |
| 244 TEST_F(RtcpTest, BasicReceiverReport) { | 247 TEST_F(RtcpTest, BasicReceiverReport) { |
| 245 Rtcp rtcp(cast_environment_, | 248 Rtcp rtcp(cast_environment_, |
| 246 &mock_sender_feedback_, | 249 &mock_sender_feedback_, |
| 247 NULL, | 250 NULL, |
| 248 &receiver_to_sender_, | 251 &receiver_to_sender_, |
| 249 NULL, | 252 NULL, |
| 250 kRtcpCompound, | 253 kRtcpCompound, |
| 251 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 254 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 252 kSenderSsrc, | 255 kSenderSsrc, |
| 253 kReceiverSsrc, | 256 kReceiverSsrc, |
| 254 kCName); | 257 kCName, |
| 258 true); |
| 255 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 259 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
| 256 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); | 260 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); |
| 257 } | 261 } |
| 258 | 262 |
| 259 TEST_F(RtcpTest, BasicCast) { | 263 TEST_F(RtcpTest, BasicCast) { |
| 260 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); | 264 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); |
| 261 | 265 |
| 262 // Media receiver. | 266 // Media receiver. |
| 263 Rtcp rtcp(cast_environment_, | 267 Rtcp rtcp(cast_environment_, |
| 264 &mock_sender_feedback_, | 268 &mock_sender_feedback_, |
| 265 NULL, | 269 NULL, |
| 266 &receiver_to_sender_, | 270 &receiver_to_sender_, |
| 267 NULL, | 271 NULL, |
| 268 kRtcpReducedSize, | 272 kRtcpReducedSize, |
| 269 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 273 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 270 kSenderSsrc, | 274 kSenderSsrc, |
| 271 kSenderSsrc, | 275 kSenderSsrc, |
| 272 kCName); | 276 kCName, |
| 277 true); |
| 273 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 278 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
| 274 RtcpCastMessage cast_message(kSenderSsrc); | 279 RtcpCastMessage cast_message(kSenderSsrc); |
| 275 cast_message.ack_frame_id_ = kAckFrameId; | 280 cast_message.ack_frame_id_ = kAckFrameId; |
| 276 PacketIdSet missing_packets; | 281 PacketIdSet missing_packets; |
| 277 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 282 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |
| 278 | 283 |
| 279 missing_packets.insert(kLostPacketId1); | 284 missing_packets.insert(kLostPacketId1); |
| 280 missing_packets.insert(kLostPacketId2); | 285 missing_packets.insert(kLostPacketId2); |
| 281 missing_packets.insert(kLostPacketId3); | 286 missing_packets.insert(kLostPacketId3); |
| 282 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 287 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 283 missing_packets; | 288 missing_packets; |
| 284 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); | 289 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); |
| 285 } | 290 } |
| 286 | 291 |
| 287 TEST_F(RtcpTest, RttReducedSizeRtcp) { | 292 TEST_F(RtcpTest, RttReducedSizeRtcp) { |
| 288 // Media receiver. | 293 // Media receiver. |
| 289 Rtcp rtcp_receiver(cast_environment_, | 294 Rtcp rtcp_receiver(cast_environment_, |
| 290 &mock_sender_feedback_, | 295 &mock_sender_feedback_, |
| 291 NULL, | 296 NULL, |
| 292 &receiver_to_sender_, | 297 &receiver_to_sender_, |
| 293 NULL, | 298 NULL, |
| 294 kRtcpReducedSize, | 299 kRtcpReducedSize, |
| 295 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 300 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 296 kReceiverSsrc, | 301 kReceiverSsrc, |
| 297 kSenderSsrc, | 302 kSenderSsrc, |
| 298 kCName); | 303 kCName, |
| 304 true); |
| 299 | 305 |
| 300 // Media sender. | 306 // Media sender. |
| 301 Rtcp rtcp_sender(cast_environment_, | 307 Rtcp rtcp_sender(cast_environment_, |
| 302 &mock_sender_feedback_, | 308 &mock_sender_feedback_, |
| 303 transport_sender_.get(), | 309 transport_sender_.get(), |
| 304 NULL, | 310 NULL, |
| 305 NULL, | 311 NULL, |
| 306 kRtcpReducedSize, | 312 kRtcpReducedSize, |
| 307 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 313 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 308 kSenderSsrc, | 314 kSenderSsrc, |
| 309 kReceiverSsrc, | 315 kReceiverSsrc, |
| 310 kCName); | 316 kCName, |
| 317 true); |
| 311 | 318 |
| 312 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 319 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
| 313 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 320 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
| 314 | 321 |
| 315 base::TimeDelta rtt; | 322 base::TimeDelta rtt; |
| 316 base::TimeDelta avg_rtt; | 323 base::TimeDelta avg_rtt; |
| 317 base::TimeDelta min_rtt; | 324 base::TimeDelta min_rtt; |
| 318 base::TimeDelta max_rtt; | 325 base::TimeDelta max_rtt; |
| 319 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 326 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 320 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 327 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 345 // Media receiver. | 352 // Media receiver. |
| 346 Rtcp rtcp_receiver(cast_environment_, | 353 Rtcp rtcp_receiver(cast_environment_, |
| 347 &mock_sender_feedback_, | 354 &mock_sender_feedback_, |
| 348 NULL, | 355 NULL, |
| 349 &receiver_to_sender_, | 356 &receiver_to_sender_, |
| 350 NULL, | 357 NULL, |
| 351 kRtcpCompound, | 358 kRtcpCompound, |
| 352 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 359 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 353 kReceiverSsrc, | 360 kReceiverSsrc, |
| 354 kSenderSsrc, | 361 kSenderSsrc, |
| 355 kCName); | 362 kCName, |
| 363 true); |
| 356 | 364 |
| 357 // Media sender. | 365 // Media sender. |
| 358 Rtcp rtcp_sender(cast_environment_, | 366 Rtcp rtcp_sender(cast_environment_, |
| 359 &mock_sender_feedback_, | 367 &mock_sender_feedback_, |
| 360 transport_sender_.get(), | 368 transport_sender_.get(), |
| 361 NULL, | 369 NULL, |
| 362 NULL, | 370 NULL, |
| 363 kRtcpCompound, | 371 kRtcpCompound, |
| 364 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 372 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 365 kSenderSsrc, | 373 kSenderSsrc, |
| 366 kReceiverSsrc, | 374 kReceiverSsrc, |
| 367 kCName); | 375 kCName, |
| 376 true); |
| 368 | 377 |
| 369 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 378 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
| 370 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 379 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
| 371 | 380 |
| 372 base::TimeDelta rtt; | 381 base::TimeDelta rtt; |
| 373 base::TimeDelta avg_rtt; | 382 base::TimeDelta avg_rtt; |
| 374 base::TimeDelta min_rtt; | 383 base::TimeDelta min_rtt; |
| 375 base::TimeDelta max_rtt; | 384 base::TimeDelta max_rtt; |
| 376 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 385 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 377 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 386 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 // Media receiver. | 449 // Media receiver. |
| 441 Rtcp rtcp_receiver(cast_environment_, | 450 Rtcp rtcp_receiver(cast_environment_, |
| 442 &mock_sender_feedback_, | 451 &mock_sender_feedback_, |
| 443 NULL, | 452 NULL, |
| 444 &receiver_to_sender_, | 453 &receiver_to_sender_, |
| 445 NULL, | 454 NULL, |
| 446 kRtcpReducedSize, | 455 kRtcpReducedSize, |
| 447 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 456 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 448 kSenderSsrc, | 457 kSenderSsrc, |
| 449 kReceiverSsrc, | 458 kReceiverSsrc, |
| 450 kCName); | 459 kCName, |
| 460 true); |
| 451 | 461 |
| 452 // Media sender. | 462 // Media sender. |
| 453 Rtcp rtcp_sender(cast_environment_, | 463 Rtcp rtcp_sender(cast_environment_, |
| 454 &mock_sender_feedback_, | 464 &mock_sender_feedback_, |
| 455 transport_sender_.get(), | 465 transport_sender_.get(), |
| 456 NULL, | 466 NULL, |
| 457 NULL, | 467 NULL, |
| 458 kRtcpReducedSize, | 468 kRtcpReducedSize, |
| 459 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 469 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 460 kReceiverSsrc, | 470 kReceiverSsrc, |
| 461 kSenderSsrc, | 471 kSenderSsrc, |
| 462 kCName); | 472 kCName, |
| 473 true); |
| 463 | 474 |
| 464 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 475 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
| 465 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 476 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
| 466 | 477 |
| 467 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); | 478 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 468 transport::RtcpSenderLogMessage empty_sender_log; | 479 transport::RtcpSenderLogMessage empty_sender_log; |
| 469 rtcp_sender.SendRtcpFromRtpSender(empty_sender_log, | 480 rtcp_sender.SendRtcpFromRtpSender(empty_sender_log, |
| 470 rtp_sender_stats_.sender_info()); | 481 rtp_sender_stats_.sender_info()); |
| 471 RunTasks(33); | 482 RunTasks(33); |
| 472 | 483 |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 626 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); | 637 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); |
| 627 rtp_timestamp = 64000; | 638 rtp_timestamp = 64000; |
| 628 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime( | 639 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime( |
| 629 frequency, rtp_timestamp, &rtp_timestamp_in_ticks)); | 640 frequency, rtp_timestamp, &rtp_timestamp_in_ticks)); |
| 630 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), | 641 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), |
| 631 rtp_timestamp_in_ticks); | 642 rtp_timestamp_in_ticks); |
| 632 } | 643 } |
| 633 | 644 |
| 634 } // namespace cast | 645 } // namespace cast |
| 635 } // namespace media | 646 } // namespace media |
| OLD | NEW |