Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc

Issue 2628563003: Propagate packet pacing information to SenTimeHistory (Closed)
Patch Set: Rebase Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 kTransportSequenceNumberExtensionId)); 348 kTransportSequenceNumberExtensionId));
349 349
350 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 350 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
351 .WillOnce(testing::Return(kTransportSequenceNumber)); 351 .WillOnce(testing::Return(kTransportSequenceNumber));
352 EXPECT_CALL(send_packet_observer_, 352 EXPECT_CALL(send_packet_observer_,
353 OnSendPacket(kTransportSequenceNumber, _, _)) 353 OnSendPacket(kTransportSequenceNumber, _, _))
354 .Times(1); 354 .Times(1);
355 EXPECT_CALL(feedback_observer_, 355 EXPECT_CALL(feedback_observer_,
356 AddPacket(kTransportSequenceNumber, 356 AddPacket(kTransportSequenceNumber,
357 sizeof(kPayloadData) + kGenericHeaderLength, 357 sizeof(kPayloadData) + kGenericHeaderLength,
358 PacketInfo::kNotAProbe)) 358 PacedPacketInfo::kNotAProbe))
359 .Times(1); 359 .Times(1);
360 360
361 SendGenericPayload(); 361 SendGenericPayload();
362 362
363 const auto& packet = transport_.last_sent_packet(); 363 const auto& packet = transport_.last_sent_packet();
364 uint16_t transport_seq_no; 364 uint16_t transport_seq_no;
365 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); 365 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no));
366 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); 366 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no);
367 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); 367 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no);
368 } 368 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 443 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
444 kAllowRetransmission, 444 kAllowRetransmission,
445 RtpPacketSender::kNormalPriority)); 445 RtpPacketSender::kNormalPriority));
446 446
447 EXPECT_EQ(0, transport_.packets_sent()); 447 EXPECT_EQ(0, transport_.packets_sent());
448 448
449 const int kStoredTimeInMs = 100; 449 const int kStoredTimeInMs = 100;
450 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 450 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
451 451
452 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, 452 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false,
453 PacketInfo::kNotAProbe); 453 PacedPacketInfo::kNotAProbe);
454 454
455 // Process send bucket. Packet should now be sent. 455 // Process send bucket. Packet should now be sent.
456 EXPECT_EQ(1, transport_.packets_sent()); 456 EXPECT_EQ(1, transport_.packets_sent());
457 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); 457 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
458 458
459 webrtc::RTPHeader rtp_header; 459 webrtc::RTPHeader rtp_header;
460 transport_.last_sent_packet().GetHeader(&rtp_header); 460 transport_.last_sent_packet().GetHeader(&rtp_header);
461 461
462 // Verify transmission time offset. 462 // Verify transmission time offset.
463 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 463 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
(...skipping 30 matching lines...) Expand all
494 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 494 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
495 kSsrc, kSeqNum, _, _, _)); 495 kSsrc, kSeqNum, _, _, _));
496 496
497 const int kStoredTimeInMs = 100; 497 const int kStoredTimeInMs = 100;
498 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 498 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
499 499
500 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum)); 500 EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum));
501 EXPECT_EQ(0, transport_.packets_sent()); 501 EXPECT_EQ(0, transport_.packets_sent());
502 502
503 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, 503 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false,
504 PacketInfo::kNotAProbe); 504 PacedPacketInfo::kNotAProbe);
505 505
506 // Process send bucket. Packet should now be sent. 506 // Process send bucket. Packet should now be sent.
507 EXPECT_EQ(1, transport_.packets_sent()); 507 EXPECT_EQ(1, transport_.packets_sent());
508 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); 508 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
509 509
510 webrtc::RTPHeader rtp_header; 510 webrtc::RTPHeader rtp_header;
511 transport_.last_sent_packet().GetHeader(&rtp_header); 511 transport_.last_sent_packet().GetHeader(&rtp_header);
512 512
513 // Verify transmission time offset. 513 // Verify transmission time offset.
514 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 514 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 553 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
554 kAllowRetransmission, 554 kAllowRetransmission,
555 RtpPacketSender::kNormalPriority)); 555 RtpPacketSender::kNormalPriority));
556 556
557 int total_packets_sent = 0; 557 int total_packets_sent = 0;
558 EXPECT_EQ(total_packets_sent, transport_.packets_sent()); 558 EXPECT_EQ(total_packets_sent, transport_.packets_sent());
559 559
560 const int kStoredTimeInMs = 100; 560 const int kStoredTimeInMs = 100;
561 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 561 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
562 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false, 562 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false,
563 PacketInfo::kNotAProbe); 563 PacedPacketInfo::kNotAProbe);
564 // Packet should now be sent. This test doesn't verify the regular video 564 // Packet should now be sent. This test doesn't verify the regular video
565 // packet, since it is tested in another test. 565 // packet, since it is tested in another test.
566 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); 566 EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
567 timestamp += 90 * kStoredTimeInMs; 567 timestamp += 90 * kStoredTimeInMs;
568 568
569 // Send padding 4 times, waiting 50 ms between each. 569 // Send padding 4 times, waiting 50 ms between each.
570 for (int i = 0; i < 4; ++i) { 570 for (int i = 0; i < 4; ++i) {
571 const int kPaddingPeriodMs = 50; 571 const int kPaddingPeriodMs = 50;
572 const size_t kPaddingBytes = 100; 572 const size_t kPaddingBytes = 100;
573 const size_t kMaxPaddingLength = 224; // Value taken from rtp_sender.cc. 573 const size_t kMaxPaddingLength = 224; // Value taken from rtp_sender.cc.
574 // Padding will be forced to full packets. 574 // Padding will be forced to full packets.
575 EXPECT_EQ(kMaxPaddingLength, rtp_sender_->TimeToSendPadding( 575 EXPECT_EQ(kMaxPaddingLength,
576 kPaddingBytes, PacketInfo::kNotAProbe)); 576 rtp_sender_->TimeToSendPadding(kPaddingBytes,
577 PacedPacketInfo::kNotAProbe));
577 578
578 // Process send bucket. Padding should now be sent. 579 // Process send bucket. Padding should now be sent.
579 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); 580 EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
580 EXPECT_EQ(kMaxPaddingLength + rtp_header_len, 581 EXPECT_EQ(kMaxPaddingLength + rtp_header_len,
581 transport_.last_sent_packet().size()); 582 transport_.last_sent_packet().size());
582 583
583 transport_.last_sent_packet().GetHeader(&rtp_header); 584 transport_.last_sent_packet().GetHeader(&rtp_header);
584 EXPECT_EQ(kMaxPaddingLength, rtp_header.paddingLength); 585 EXPECT_EQ(kMaxPaddingLength, rtp_header.paddingLength);
585 586
586 // Verify sequence number and timestamp. The timestamp should be the same 587 // Verify sequence number and timestamp. The timestamp should be the same
(...skipping 17 matching lines...) Expand all
604 605
605 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 606 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
606 kSsrc, seq_num, _, _, _)); 607 kSsrc, seq_num, _, _, _));
607 608
608 // Packet should be stored in a send bucket. 609 // Packet should be stored in a send bucket.
609 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), 610 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
610 kAllowRetransmission, 611 kAllowRetransmission,
611 RtpPacketSender::kNormalPriority)); 612 RtpPacketSender::kNormalPriority));
612 613
613 rtp_sender_->TimeToSendPacket(kSsrc, seq_num, capture_time_ms, false, 614 rtp_sender_->TimeToSendPacket(kSsrc, seq_num, capture_time_ms, false,
614 PacketInfo::kNotAProbe); 615 PacedPacketInfo::kNotAProbe);
615 // Process send bucket. 616 // Process send bucket.
616 EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); 617 EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
617 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); 618 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
618 transport_.last_sent_packet().GetHeader(&rtp_header); 619 transport_.last_sent_packet().GetHeader(&rtp_header);
619 620
620 // Verify sequence number and timestamp. 621 // Verify sequence number and timestamp.
621 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 622 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
622 EXPECT_EQ(timestamp, rtp_header.timestamp); 623 EXPECT_EQ(timestamp, rtp_header.timestamp);
623 // Verify transmission time offset. This packet is sent without delay. 624 // Verify transmission time offset. This packet is sent without delay.
624 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 625 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
(...skipping 13 matching lines...) Expand all
638 .Times(1); 639 .Times(1);
639 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 640 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
640 .WillOnce(testing::Return(kTransportSequenceNumber)); 641 .WillOnce(testing::Return(kTransportSequenceNumber));
641 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) 642 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
642 .Times(1); 643 .Times(1);
643 644
644 SendGenericPayload(); // Packet passed to pacer. 645 SendGenericPayload(); // Packet passed to pacer.
645 const bool kIsRetransmit = false; 646 const bool kIsRetransmit = false;
646 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, 647 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
647 fake_clock_.TimeInMilliseconds(), kIsRetransmit, 648 fake_clock_.TimeInMilliseconds(), kIsRetransmit,
648 PacketInfo::kNotAProbe); 649 PacedPacketInfo::kNotAProbe);
649 EXPECT_EQ(1, transport_.packets_sent()); 650 EXPECT_EQ(1, transport_.packets_sent());
650 } 651 }
651 652
652 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { 653 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) {
653 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 654 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
654 kRtpExtensionTransportSequenceNumber, 655 kRtpExtensionTransportSequenceNumber,
655 kTransportSequenceNumberExtensionId)); 656 kTransportSequenceNumberExtensionId));
656 rtp_sender_->SetStorePacketsStatus(true, 10); 657 rtp_sender_->SetStorePacketsStatus(true, 10);
657 658
658 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); 659 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
659 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 660 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
660 .WillOnce(testing::Return(kTransportSequenceNumber)); 661 .WillOnce(testing::Return(kTransportSequenceNumber));
661 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) 662 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
662 .Times(1); 663 .Times(1);
663 664
664 SendGenericPayload(); // Packet passed to pacer. 665 SendGenericPayload(); // Packet passed to pacer.
665 const bool kIsRetransmit = true; 666 const bool kIsRetransmit = true;
666 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, 667 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
667 fake_clock_.TimeInMilliseconds(), kIsRetransmit, 668 fake_clock_.TimeInMilliseconds(), kIsRetransmit,
668 PacketInfo::kNotAProbe); 669 PacedPacketInfo::kNotAProbe);
669 EXPECT_EQ(1, transport_.packets_sent()); 670 EXPECT_EQ(1, transport_.packets_sent());
670 } 671 }
671 672
672 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { 673 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) {
673 rtp_sender_.reset(new RTPSender( 674 rtp_sender_.reset(new RTPSender(
674 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, 675 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr,
675 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, 676 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr,
676 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_, 677 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_,
677 nullptr)); 678 nullptr));
678 rtp_sender_->SetSequenceNumber(kSeqNum); 679 rtp_sender_->SetSequenceNumber(kSeqNum);
679 rtp_sender_->SetSSRC(kSsrc); 680 rtp_sender_->SetSSRC(kSsrc);
680 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 681 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
681 kRtpExtensionTransportSequenceNumber, 682 kRtpExtensionTransportSequenceNumber,
682 kTransportSequenceNumberExtensionId)); 683 kTransportSequenceNumberExtensionId));
683 rtp_sender_->SetSequenceNumber(kSeqNum); 684 rtp_sender_->SetSequenceNumber(kSeqNum);
684 rtp_sender_->SetStorePacketsStatus(true, 10); 685 rtp_sender_->SetStorePacketsStatus(true, 10);
685 686
686 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); 687 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
687 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) 688 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
688 .Times(1); 689 .Times(1);
689 690
690 SendGenericPayload(); // Packet passed to pacer. 691 SendGenericPayload(); // Packet passed to pacer.
691 const bool kIsRetransmit = false; 692 const bool kIsRetransmit = false;
692 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, 693 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
693 fake_clock_.TimeInMilliseconds(), kIsRetransmit, 694 fake_clock_.TimeInMilliseconds(), kIsRetransmit,
694 PacketInfo::kNotAProbe); 695 PacedPacketInfo::kNotAProbe);
695 EXPECT_EQ(1, transport_.packets_sent()); 696 EXPECT_EQ(1, transport_.packets_sent());
696 } 697 }
697 698
698 TEST_F(RtpSenderTest, SendRedundantPayloads) { 699 TEST_F(RtpSenderTest, SendRedundantPayloads) {
699 MockTransport transport; 700 MockTransport transport;
700 rtp_sender_.reset(new RTPSender( 701 rtp_sender_.reset(new RTPSender(
701 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, 702 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr,
702 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, 703 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr,
703 &retransmission_rate_limiter_, nullptr)); 704 &retransmission_rate_limiter_, nullptr));
704 rtp_sender_->SetSequenceNumber(kSeqNum); 705 rtp_sender_->SetSequenceNumber(kSeqNum);
(...skipping 22 matching lines...) Expand all
727 EXPECT_CALL(mock_rtc_event_log_, 728 EXPECT_CALL(mock_rtc_event_log_,
728 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 729 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
729 .Times(kNumPayloadSizes); 730 .Times(kNumPayloadSizes);
730 731
731 // Send 10 packets of increasing size. 732 // Send 10 packets of increasing size.
732 for (size_t i = 0; i < kNumPayloadSizes; ++i) { 733 for (size_t i = 0; i < kNumPayloadSizes; ++i) {
733 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 734 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
734 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); 735 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true));
735 SendPacket(capture_time_ms, kPayloadSizes[i]); 736 SendPacket(capture_time_ms, kPayloadSizes[i]);
736 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false, 737 rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false,
737 PacketInfo::kNotAProbe); 738 PacedPacketInfo::kNotAProbe);
738 fake_clock_.AdvanceTimeMilliseconds(33); 739 fake_clock_.AdvanceTimeMilliseconds(33);
739 } 740 }
740 741
741 EXPECT_CALL(mock_rtc_event_log_, 742 EXPECT_CALL(mock_rtc_event_log_,
742 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 743 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
743 .Times(::testing::AtLeast(4)); 744 .Times(::testing::AtLeast(4));
744 745
745 // The amount of padding to send it too small to send a payload packet. 746 // The amount of padding to send it too small to send a payload packet.
746 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) 747 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _))
747 .WillOnce(testing::Return(true)); 748 .WillOnce(testing::Return(true));
748 EXPECT_EQ(kMaxPaddingSize, 749 EXPECT_EQ(kMaxPaddingSize,
749 rtp_sender_->TimeToSendPadding(49, PacketInfo::kNotAProbe)); 750 rtp_sender_->TimeToSendPadding(49, PacedPacketInfo::kNotAProbe));
750 751
751 EXPECT_CALL(transport, 752 EXPECT_CALL(transport,
752 SendRtp(_, kPayloadSizes[0] + rtp_header_len + kRtxHeaderSize, _)) 753 SendRtp(_, kPayloadSizes[0] + rtp_header_len + kRtxHeaderSize, _))
753 .WillOnce(testing::Return(true)); 754 .WillOnce(testing::Return(true));
754 EXPECT_EQ(kPayloadSizes[0], 755 EXPECT_EQ(kPayloadSizes[0],
755 rtp_sender_->TimeToSendPadding(500, PacketInfo::kNotAProbe)); 756 rtp_sender_->TimeToSendPadding(500, PacedPacketInfo::kNotAProbe));
756 757
757 EXPECT_CALL(transport, SendRtp(_, kPayloadSizes[kNumPayloadSizes - 1] + 758 EXPECT_CALL(transport, SendRtp(_, kPayloadSizes[kNumPayloadSizes - 1] +
758 rtp_header_len + kRtxHeaderSize, 759 rtp_header_len + kRtxHeaderSize,
759 _)) 760 _))
760 .WillOnce(testing::Return(true)); 761 .WillOnce(testing::Return(true));
761 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) 762 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _))
762 .WillOnce(testing::Return(true)); 763 .WillOnce(testing::Return(true));
763 EXPECT_EQ(kPayloadSizes[kNumPayloadSizes - 1] + kMaxPaddingSize, 764 EXPECT_EQ(kPayloadSizes[kNumPayloadSizes - 1] + kMaxPaddingSize,
764 rtp_sender_->TimeToSendPadding(999, PacketInfo::kNotAProbe)); 765 rtp_sender_->TimeToSendPadding(999, PacedPacketInfo::kNotAProbe));
765 } 766 }
766 767
767 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { 768 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) {
768 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 769 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
769 const uint8_t payload_type = 127; 770 const uint8_t payload_type = 127;
770 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 771 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
771 0, 1500)); 772 0, 1500));
772 uint8_t payload[] = {47, 11, 32, 93, 89}; 773 uint8_t payload[] = {47, 11, 32, 93, 89};
773 774
774 // Send keyframe 775 // Send keyframe
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
1148 expected.transmitted.payload_bytes = 12; 1149 expected.transmitted.payload_bytes = 12;
1149 expected.transmitted.header_bytes = 24; 1150 expected.transmitted.header_bytes = 24;
1150 expected.transmitted.packets = 2; 1151 expected.transmitted.packets = 2;
1151 expected.retransmitted.payload_bytes = 6; 1152 expected.retransmitted.payload_bytes = 6;
1152 expected.retransmitted.header_bytes = 12; 1153 expected.retransmitted.header_bytes = 12;
1153 expected.retransmitted.padding_bytes = 0; 1154 expected.retransmitted.padding_bytes = 0;
1154 expected.retransmitted.packets = 1; 1155 expected.retransmitted.packets = 1;
1155 callback.Matches(ssrc, expected); 1156 callback.Matches(ssrc, expected);
1156 1157
1157 // Send padding. 1158 // Send padding.
1158 rtp_sender_->TimeToSendPadding(kMaxPaddingSize, PacketInfo::kNotAProbe); 1159 rtp_sender_->TimeToSendPadding(kMaxPaddingSize, PacedPacketInfo::kNotAProbe);
1159 expected.transmitted.payload_bytes = 12; 1160 expected.transmitted.payload_bytes = 12;
1160 expected.transmitted.header_bytes = 36; 1161 expected.transmitted.header_bytes = 36;
1161 expected.transmitted.padding_bytes = kMaxPaddingSize; 1162 expected.transmitted.padding_bytes = kMaxPaddingSize;
1162 expected.transmitted.packets = 3; 1163 expected.transmitted.packets = 3;
1163 callback.Matches(ssrc, expected); 1164 callback.Matches(ssrc, expected);
1164 1165
1165 // Send ULPFEC. 1166 // Send ULPFEC.
1166 rtp_sender_->SetUlpfecConfig(kRedPayloadType, kUlpfecPayloadType); 1167 rtp_sender_->SetUlpfecConfig(kRedPayloadType, kUlpfecPayloadType);
1167 FecProtectionParams fec_params; 1168 FecProtectionParams fec_params;
1168 fec_params.fec_mask_type = kFecMaskRandom; 1169 fec_params.fec_mask_type = kFecMaskRandom;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 1277
1277 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, 1278 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000,
1278 0, 1500)); 1279 0, 1500));
1279 uint8_t payload[] = {47, 11, 32, 93, 89}; 1280 uint8_t payload[] = {47, 11, 32, 93, 89};
1280 1281
1281 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1282 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1282 kVideoFrameKey, kPayloadType, 1234, 4321, payload, 1283 kVideoFrameKey, kPayloadType, 1234, 4321, payload,
1283 sizeof(payload), nullptr, nullptr, nullptr)); 1284 sizeof(payload), nullptr, nullptr, nullptr));
1284 1285
1285 // Will send 2 full-size padding packets. 1286 // Will send 2 full-size padding packets.
1286 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); 1287 rtp_sender_->TimeToSendPadding(1, PacedPacketInfo::kNotAProbe);
1287 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); 1288 rtp_sender_->TimeToSendPadding(1, PacedPacketInfo::kNotAProbe);
1288 1289
1289 StreamDataCounters rtp_stats; 1290 StreamDataCounters rtp_stats;
1290 StreamDataCounters rtx_stats; 1291 StreamDataCounters rtx_stats;
1291 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); 1292 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats);
1292 1293
1293 // Payload + 1-byte generic header. 1294 // Payload + 1-byte generic header.
1294 EXPECT_GT(rtp_stats.first_packet_time_ms, -1); 1295 EXPECT_GT(rtp_stats.first_packet_time_ms, -1);
1295 EXPECT_EQ(rtp_stats.transmitted.payload_bytes, sizeof(payload) + 1); 1296 EXPECT_EQ(rtp_stats.transmitted.payload_bytes, sizeof(payload) + 1);
1296 EXPECT_EQ(rtp_stats.transmitted.header_bytes, 12u); 1297 EXPECT_EQ(rtp_stats.transmitted.header_bytes, 12u);
1297 EXPECT_EQ(rtp_stats.transmitted.padding_bytes, 0u); 1298 EXPECT_EQ(rtp_stats.transmitted.padding_bytes, 0u);
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); 1477 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer));
1477 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1478 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1478 kRtpExtensionTransportSequenceNumber, 1479 kRtpExtensionTransportSequenceNumber,
1479 kTransportSequenceNumberExtensionId)); 1480 kTransportSequenceNumberExtensionId));
1480 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 1481 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
1481 .WillOnce(testing::Return(kTransportSequenceNumber)); 1482 .WillOnce(testing::Return(kTransportSequenceNumber));
1482 EXPECT_CALL(feedback_observer_, 1483 EXPECT_CALL(feedback_observer_,
1483 AddPacket(kTransportSequenceNumber, 1484 AddPacket(kTransportSequenceNumber,
1484 sizeof(kPayloadData) + kGenericHeaderLength + 1485 sizeof(kPayloadData) + kGenericHeaderLength +
1485 kRtpOverheadBytesPerPacket, 1486 kRtpOverheadBytesPerPacket,
1486 PacketInfo::kNotAProbe)) 1487 PacedPacketInfo::kNotAProbe))
1487 .Times(1); 1488 .Times(1);
1488 EXPECT_CALL(mock_overhead_observer, 1489 EXPECT_CALL(mock_overhead_observer,
1489 OnOverheadChanged(kRtpOverheadBytesPerPacket)) 1490 OnOverheadChanged(kRtpOverheadBytesPerPacket))
1490 .Times(1); 1491 .Times(1);
1491 SendGenericPayload(); 1492 SendGenericPayload();
1492 } 1493 }
1493 1494
1494 TEST_F(RtpSenderTest, SendAudioPadding) { 1495 TEST_F(RtpSenderTest, SendAudioPadding) {
1495 MockTransport transport; 1496 MockTransport transport;
1496 const bool kEnableAudio = true; 1497 const bool kEnableAudio = true;
1497 rtp_sender_.reset(new RTPSender( 1498 rtp_sender_.reset(new RTPSender(
1498 kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr, 1499 kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr,
1499 nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, 1500 nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_,
1500 nullptr, &retransmission_rate_limiter_, nullptr)); 1501 nullptr, &retransmission_rate_limiter_, nullptr));
1501 rtp_sender_->SetSendPayloadType(kPayload); 1502 rtp_sender_->SetSendPayloadType(kPayload);
1502 rtp_sender_->SetSequenceNumber(kSeqNum); 1503 rtp_sender_->SetSequenceNumber(kSeqNum);
1503 rtp_sender_->SetTimestampOffset(0); 1504 rtp_sender_->SetTimestampOffset(0);
1504 rtp_sender_->SetSSRC(kSsrc); 1505 rtp_sender_->SetSSRC(kSsrc);
1505 1506
1506 const size_t kPaddingSize = 59; 1507 const size_t kPaddingSize = 59;
1507 EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _)) 1508 EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _))
1508 .WillOnce(testing::Return(true)); 1509 .WillOnce(testing::Return(true));
1509 EXPECT_EQ(kPaddingSize, rtp_sender_->TimeToSendPadding( 1510 EXPECT_EQ(kPaddingSize,
1510 kPaddingSize, PacketInfo::kNotAProbe)); 1511 rtp_sender_->TimeToSendPadding(kPaddingSize,
1512 PacedPacketInfo::kNotAProbe));
1511 1513
1512 // Requested padding size is too small, will send a larger one. 1514 // Requested padding size is too small, will send a larger one.
1513 const size_t kMinPaddingSize = 50; 1515 const size_t kMinPaddingSize = 50;
1514 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) 1516 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _))
1515 .WillOnce(testing::Return(true)); 1517 .WillOnce(testing::Return(true));
1516 EXPECT_EQ(kMinPaddingSize, rtp_sender_->TimeToSendPadding( 1518 EXPECT_EQ(kMinPaddingSize,
1517 kMinPaddingSize - 5, PacketInfo::kNotAProbe)); 1519 rtp_sender_->TimeToSendPadding(kMinPaddingSize - 5,
1520 PacedPacketInfo::kNotAProbe));
1518 } 1521 }
1519 } // namespace webrtc 1522 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | webrtc/tools/event_log_visualizer/analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698