| 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/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/test/simple_test_tick_clock.h" | 6 #include "base/test/simple_test_tick_clock.h" |
| 7 #include "media/cast/cast_defines.h" | 7 #include "media/cast/cast_defines.h" |
| 8 #include "media/cast/cast_environment.h" | 8 #include "media/cast/cast_environment.h" |
| 9 #include "media/cast/rtcp/receiver_rtcp_event_subscriber.h" |
| 9 #include "media/cast/rtcp/rtcp_sender.h" | 10 #include "media/cast/rtcp/rtcp_sender.h" |
| 10 #include "media/cast/rtcp/rtcp_utility.h" | 11 #include "media/cast/rtcp/rtcp_utility.h" |
| 11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 12 #include "media/cast/rtcp/test_rtcp_packet_builder.h" |
| 12 #include "media/cast/test/fake_single_thread_task_runner.h" | 13 #include "media/cast/test/fake_single_thread_task_runner.h" |
| 13 #include "media/cast/transport/cast_transport_defines.h" | 14 #include "media/cast/transport/cast_transport_defines.h" |
| 14 #include "media/cast/transport/pacing/paced_sender.h" | 15 #include "media/cast/transport/pacing/paced_sender.h" |
| 15 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
| 16 | 17 |
| 17 namespace media { | 18 namespace media { |
| 18 namespace cast { | 19 namespace cast { |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 &rrtr, | 236 &rrtr, |
| 236 &cast_message, | 237 &cast_message, |
| 237 NULL); | 238 NULL); |
| 238 | 239 |
| 239 EXPECT_EQ(1, test_transport_.packet_count()); | 240 EXPECT_EQ(1, test_transport_.packet_count()); |
| 240 } | 241 } |
| 241 | 242 |
| 242 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { | 243 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { |
| 243 static const uint32 kTimeBaseMs = 12345678; | 244 static const uint32 kTimeBaseMs = 12345678; |
| 244 static const uint32 kTimeDelayMs = 10; | 245 static const uint32 kTimeDelayMs = 10; |
| 245 static const uint32 kDelayDeltaMs = 123; | |
| 246 | 246 |
| 247 TestRtcpPacketBuilder p; | 247 TestRtcpPacketBuilder p; |
| 248 p.AddRr(kSendingSsrc, 1); | 248 p.AddRr(kSendingSsrc, 1); |
| 249 p.AddRb(kMediaSsrc); | 249 p.AddRb(kMediaSsrc); |
| 250 p.AddSdesCname(kSendingSsrc, kCName); | 250 p.AddSdesCname(kSendingSsrc, kCName); |
| 251 p.AddXrHeader(kSendingSsrc); | 251 p.AddXrHeader(kSendingSsrc); |
| 252 p.AddXrRrtrBlock(); | 252 p.AddXrRrtrBlock(); |
| 253 p.AddCast(kSendingSsrc, kMediaSsrc); | 253 p.AddCast(kSendingSsrc, kMediaSsrc); |
| 254 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 254 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 255 | 255 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 272 cast_message.ack_frame_id_ = kAckFrameId; | 272 cast_message.ack_frame_id_ = kAckFrameId; |
| 273 PacketIdSet missing_packets; | 273 PacketIdSet missing_packets; |
| 274 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 274 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |
| 275 | 275 |
| 276 missing_packets.insert(kLostPacketId1); | 276 missing_packets.insert(kLostPacketId1); |
| 277 missing_packets.insert(kLostPacketId2); | 277 missing_packets.insert(kLostPacketId2); |
| 278 missing_packets.insert(kLostPacketId3); | 278 missing_packets.insert(kLostPacketId3); |
| 279 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 279 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 280 missing_packets; | 280 missing_packets; |
| 281 | 281 |
| 282 // Test empty Log message. | 282 ReceiverRtcpEventSubscriber event_subscriber( |
| 283 RtcpReceiverLogMessage receiver_log; | 283 500, ReceiverRtcpEventSubscriber::kVideoEventSubscriber); |
| 284 | 284 |
| 285 rtcp_sender_->SendRtcpFromRtpReceiver( | 285 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 286 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast | | 286 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast | |
| 287 RtcpSender::kRtcpReceiverLog, | 287 RtcpSender::kRtcpReceiverLog, |
| 288 &report_block, | 288 &report_block, |
| 289 &rrtr, | 289 &rrtr, |
| 290 &cast_message, | 290 &cast_message, |
| 291 &receiver_log); | 291 &event_subscriber); |
| 292 | 292 |
| 293 base::SimpleTestTickClock testing_clock; | 293 base::SimpleTestTickClock testing_clock; |
| 294 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 294 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 295 | 295 |
| 296 p.AddReceiverLog(kSendingSsrc); | 296 p.AddReceiverLog(kSendingSsrc); |
| 297 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs); | 297 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs); |
| 298 p.AddReceiverEventLog(kDelayDeltaMs, 5, 0); | 298 p.AddReceiverEventLog(0, 5, 0); |
| 299 p.AddReceiverEventLog(kLostPacketId1, 8, kTimeDelayMs); | 299 p.AddReceiverEventLog(kLostPacketId1, 8, kTimeDelayMs); |
| 300 | 300 |
| 301 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 301 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 302 | 302 |
| 303 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp); | 303 FrameEvent frame_event; |
| 304 RtcpReceiverEventLogMessage event_log; | 304 frame_event.rtp_timestamp = kRtpTimestamp; |
| 305 frame_event.type = kVideoAckSent; |
| 306 frame_event.timestamp = testing_clock.NowTicks(); |
| 307 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 308 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 305 | 309 |
| 306 event_log.type = kVideoAckSent; | 310 PacketEvent packet_event; |
| 307 event_log.event_timestamp = testing_clock.NowTicks(); | 311 packet_event.rtp_timestamp = kRtpTimestamp; |
| 308 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs); | 312 packet_event.type = kVideoPacketReceived; |
| 309 frame_log.event_log_messages_.push_back(event_log); | 313 packet_event.timestamp = testing_clock.NowTicks(); |
| 310 | 314 packet_event.packet_id = kLostPacketId1; |
| 311 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 315 event_subscriber.OnReceivePacketEvent(packet_event); |
| 312 event_log.type = kVideoPacketReceived; | |
| 313 event_log.event_timestamp = testing_clock.NowTicks(); | |
| 314 event_log.packet_id = kLostPacketId1; | |
| 315 frame_log.event_log_messages_.push_back(event_log); | |
| 316 | |
| 317 receiver_log.push_back(frame_log); | |
| 318 | 316 |
| 319 rtcp_sender_->SendRtcpFromRtpReceiver( | 317 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 320 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast | | 318 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast | |
| 321 RtcpSender::kRtcpReceiverLog, | 319 RtcpSender::kRtcpReceiverLog, |
| 322 &report_block, | 320 &report_block, |
| 323 &rrtr, | 321 &rrtr, |
| 324 &cast_message, | 322 &cast_message, |
| 325 &receiver_log); | 323 &event_subscriber); |
| 326 | 324 |
| 327 EXPECT_TRUE(receiver_log.empty()); | |
| 328 EXPECT_EQ(2, test_transport_.packet_count()); | 325 EXPECT_EQ(2, test_transport_.packet_count()); |
| 329 } | 326 } |
| 330 | 327 |
| 331 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { | 328 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { |
| 332 static const uint32 kTimeBaseMs = 12345678; | 329 static const uint32 kTimeBaseMs = 12345678; |
| 333 static const uint32 kTimeDelayMs = 10; | 330 static const uint32 kTimeDelayMs = 10; |
| 334 static const uint32 kDelayDeltaMs = 123; | |
| 335 | 331 |
| 336 TestRtcpPacketBuilder p; | 332 TestRtcpPacketBuilder p; |
| 337 p.AddRr(kSendingSsrc, 1); | 333 p.AddRr(kSendingSsrc, 1); |
| 338 p.AddRb(kMediaSsrc); | 334 p.AddRb(kMediaSsrc); |
| 339 p.AddSdesCname(kSendingSsrc, kCName); | 335 p.AddSdesCname(kSendingSsrc, kCName); |
| 340 | 336 |
| 341 transport::RtcpReportBlock report_block; | 337 transport::RtcpReportBlock report_block; |
| 342 // Initialize remote_ssrc to a "clearly illegal" value. | 338 // Initialize remote_ssrc to a "clearly illegal" value. |
| 343 report_block.remote_ssrc = 0xDEAD; | 339 report_block.remote_ssrc = 0xDEAD; |
| 344 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 340 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
| 345 report_block.fraction_lost = kLoss >> 24; | 341 report_block.fraction_lost = kLoss >> 24; |
| 346 report_block.cumulative_lost = kLoss; // 24 bits valid. | 342 report_block.cumulative_lost = kLoss; // 24 bits valid. |
| 347 report_block.extended_high_sequence_number = kExtendedMax; | 343 report_block.extended_high_sequence_number = kExtendedMax; |
| 348 report_block.jitter = kTestJitter; | 344 report_block.jitter = kTestJitter; |
| 349 report_block.last_sr = kLastSr; | 345 report_block.last_sr = kLastSr; |
| 350 report_block.delay_since_last_sr = kDelayLastSr; | 346 report_block.delay_since_last_sr = kDelayLastSr; |
| 351 | 347 |
| 352 base::SimpleTestTickClock testing_clock; | 348 base::SimpleTestTickClock testing_clock; |
| 353 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 349 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 354 | 350 |
| 355 p.AddReceiverLog(kSendingSsrc); | 351 p.AddReceiverLog(kSendingSsrc); |
| 356 | 352 |
| 357 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs); | 353 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs); |
| 358 p.AddReceiverEventLog(kDelayDeltaMs, 5, 0); | 354 p.AddReceiverEventLog(0, 5, 0); |
| 359 p.AddReceiverFrameLog( | 355 p.AddReceiverFrameLog( |
| 360 kRtpTimestamp + 2345, kRtcpMaxReceiverLogMessages, kTimeBaseMs); | 356 kRtpTimestamp + 2345, kRtcpMaxReceiverLogMessages, kTimeBaseMs); |
| 361 | 357 |
| 362 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { | 358 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { |
| 363 p.AddReceiverEventLog( | 359 p.AddReceiverEventLog( |
| 364 kLostPacketId1, 8, static_cast<uint16>(kTimeDelayMs * i)); | 360 kLostPacketId1, 8, static_cast<uint16>(kTimeDelayMs * i)); |
| 365 } | 361 } |
| 366 | 362 |
| 367 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 363 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 368 | 364 |
| 369 RtcpReceiverFrameLogMessage frame_1_log(kRtpTimestamp); | 365 ReceiverRtcpEventSubscriber event_subscriber( |
| 370 RtcpReceiverEventLogMessage event_log; | 366 500, ReceiverRtcpEventSubscriber::kVideoEventSubscriber); |
| 367 FrameEvent frame_event; |
| 368 frame_event.rtp_timestamp = kRtpTimestamp; |
| 369 frame_event.type = media::cast::kVideoAckSent; |
| 370 frame_event.timestamp = testing_clock.NowTicks(); |
| 371 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 371 | 372 |
| 372 event_log.type = kVideoAckSent; | 373 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { |
| 373 event_log.event_timestamp = testing_clock.NowTicks(); | 374 PacketEvent packet_event; |
| 374 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs); | 375 packet_event.rtp_timestamp = kRtpTimestamp + 2345; |
| 375 frame_1_log.event_log_messages_.push_back(event_log); | 376 packet_event.type = kVideoPacketReceived; |
| 376 | 377 packet_event.timestamp = testing_clock.NowTicks(); |
| 377 RtcpReceiverLogMessage receiver_log; | 378 packet_event.packet_id = kLostPacketId1; |
| 378 receiver_log.push_back(frame_1_log); | 379 event_subscriber.OnReceivePacketEvent(packet_event); |
| 379 | |
| 380 RtcpReceiverFrameLogMessage frame_2_log(kRtpTimestamp + 2345); | |
| 381 | |
| 382 for (int j = 0; j < 300; ++j) { | |
| 383 event_log.type = kVideoPacketReceived; | |
| 384 event_log.event_timestamp = testing_clock.NowTicks(); | |
| 385 event_log.packet_id = kLostPacketId1; | |
| 386 frame_2_log.event_log_messages_.push_back(event_log); | |
| 387 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 380 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 388 } | 381 } |
| 389 receiver_log.push_back(frame_2_log); | |
| 390 | 382 |
| 391 rtcp_sender_->SendRtcpFromRtpReceiver( | 383 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 392 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog, | 384 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog, |
| 393 &report_block, | 385 &report_block, |
| 394 NULL, | 386 NULL, |
| 395 NULL, | 387 NULL, |
| 396 &receiver_log); | 388 &event_subscriber); |
| 397 | 389 |
| 398 EXPECT_EQ(1, test_transport_.packet_count()); | 390 EXPECT_EQ(1, test_transport_.packet_count()); |
| 399 EXPECT_EQ(1u, receiver_log.size()); | |
| 400 EXPECT_EQ(300u - kRtcpMaxReceiverLogMessages, | |
| 401 receiver_log.front().event_log_messages_.size()); | |
| 402 } | 391 } |
| 403 | 392 |
| 404 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { | 393 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { |
| 405 static const uint32 kTimeBaseMs = 12345678; | 394 static const uint32 kTimeBaseMs = 12345678; |
| 406 static const uint32 kTimeDelayMs = 10; | 395 static const uint32 kTimeDelayMs = 10; |
| 407 static const uint32 kDelayDeltaMs = 123; | |
| 408 | 396 |
| 409 TestRtcpPacketBuilder p; | 397 TestRtcpPacketBuilder p; |
| 410 p.AddRr(kSendingSsrc, 1); | 398 p.AddRr(kSendingSsrc, 1); |
| 411 p.AddRb(kMediaSsrc); | 399 p.AddRb(kMediaSsrc); |
| 412 p.AddSdesCname(kSendingSsrc, kCName); | 400 p.AddSdesCname(kSendingSsrc, kCName); |
| 413 | 401 |
| 414 transport::RtcpReportBlock report_block; | 402 transport::RtcpReportBlock report_block; |
| 415 // Initialize remote_ssrc to a "clearly illegal" value. | 403 // Initialize remote_ssrc to a "clearly illegal" value. |
| 416 report_block.remote_ssrc = 0xDEAD; | 404 report_block.remote_ssrc = 0xDEAD; |
| 417 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. | 405 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. |
| 418 report_block.fraction_lost = kLoss >> 24; | 406 report_block.fraction_lost = kLoss >> 24; |
| 419 report_block.cumulative_lost = kLoss; // 24 bits valid. | 407 report_block.cumulative_lost = kLoss; // 24 bits valid. |
| 420 report_block.extended_high_sequence_number = kExtendedMax; | 408 report_block.extended_high_sequence_number = kExtendedMax; |
| 421 report_block.jitter = kTestJitter; | 409 report_block.jitter = kTestJitter; |
| 422 report_block.last_sr = kLastSr; | 410 report_block.last_sr = kLastSr; |
| 423 report_block.delay_since_last_sr = kDelayLastSr; | 411 report_block.delay_since_last_sr = kDelayLastSr; |
| 424 | 412 |
| 425 base::SimpleTestTickClock testing_clock; | 413 base::SimpleTestTickClock testing_clock; |
| 426 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 414 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 427 | 415 |
| 428 p.AddReceiverLog(kSendingSsrc); | 416 p.AddReceiverLog(kSendingSsrc); |
| 429 | 417 |
| 430 for (int i = 0; i < 119; ++i) { | 418 for (int i = 0; i < 119; ++i) { |
| 431 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs); | 419 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs); |
| 432 p.AddReceiverEventLog(kDelayDeltaMs, 5, 0); | 420 p.AddReceiverEventLog(0, 5, 0); |
| 433 } | 421 } |
| 434 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 422 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |
| 435 | 423 |
| 436 RtcpReceiverLogMessage receiver_log; | 424 ReceiverRtcpEventSubscriber event_subscriber( |
| 437 | 425 500, ReceiverRtcpEventSubscriber::kVideoEventSubscriber); |
| 438 for (int j = 0; j < 200; ++j) { | 426 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { |
| 439 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp); | 427 FrameEvent frame_event; |
| 440 RtcpReceiverEventLogMessage event_log; | 428 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i); |
| 441 | 429 frame_event.type = media::cast::kVideoAckSent; |
| 442 event_log.type = kVideoAckSent; | 430 frame_event.timestamp = testing_clock.NowTicks(); |
| 443 event_log.event_timestamp = testing_clock.NowTicks(); | 431 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 444 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs); | |
| 445 frame_log.event_log_messages_.push_back(event_log); | |
| 446 receiver_log.push_back(frame_log); | |
| 447 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 432 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 448 } | 433 } |
| 434 |
| 449 rtcp_sender_->SendRtcpFromRtpReceiver( | 435 rtcp_sender_->SendRtcpFromRtpReceiver( |
| 450 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog, | 436 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog, |
| 451 &report_block, | 437 &report_block, |
| 452 NULL, | 438 NULL, |
| 453 NULL, | 439 NULL, |
| 454 &receiver_log); | 440 &event_subscriber); |
| 455 | 441 |
| 456 EXPECT_EQ(1, test_transport_.packet_count()); | 442 EXPECT_EQ(1, test_transport_.packet_count()); |
| 457 EXPECT_EQ(81u, receiver_log.size()); | |
| 458 } | 443 } |
| 459 | 444 |
| 460 } // namespace cast | 445 } // namespace cast |
| 461 } // namespace media | 446 } // namespace media |
| OLD | NEW |