| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 } | 276 } |
| 277 | 277 |
| 278 bool IsTextureSupported() const override { return false; } | 278 bool IsTextureSupported() const override { return false; } |
| 279 | 279 |
| 280 private: | 280 private: |
| 281 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; | 281 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; |
| 282 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; | 282 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; |
| 283 int frame_counter_; | 283 int frame_counter_; |
| 284 } test; | 284 } test; |
| 285 | 285 |
| 286 RunBaseTest(&test, FakeNetworkPipe::Config()); | 286 RunBaseTest(&test); |
| 287 } | 287 } |
| 288 | 288 |
| 289 TEST_F(EndToEndTest, SendsAndReceivesH264) { | 289 TEST_F(EndToEndTest, SendsAndReceivesH264) { |
| 290 class H264Observer : public test::EndToEndTest, public VideoRenderer { | 290 class H264Observer : public test::EndToEndTest, public VideoRenderer { |
| 291 public: | 291 public: |
| 292 H264Observer() | 292 H264Observer() |
| 293 : EndToEndTest(2 * kDefaultTimeoutMs), | 293 : EndToEndTest(2 * kDefaultTimeoutMs), |
| 294 fake_encoder_(Clock::GetRealTimeClock()), | 294 fake_encoder_(Clock::GetRealTimeClock()), |
| 295 frame_counter_(0) {} | 295 frame_counter_(0) {} |
| 296 | 296 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 } | 329 } |
| 330 | 330 |
| 331 bool IsTextureSupported() const override { return false; } | 331 bool IsTextureSupported() const override { return false; } |
| 332 | 332 |
| 333 private: | 333 private: |
| 334 test::FakeH264Decoder fake_decoder_; | 334 test::FakeH264Decoder fake_decoder_; |
| 335 test::FakeH264Encoder fake_encoder_; | 335 test::FakeH264Encoder fake_encoder_; |
| 336 int frame_counter_; | 336 int frame_counter_; |
| 337 } test; | 337 } test; |
| 338 | 338 |
| 339 RunBaseTest(&test, FakeNetworkPipe::Config()); | 339 RunBaseTest(&test); |
| 340 } | 340 } |
| 341 | 341 |
| 342 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { | 342 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { |
| 343 class SyncRtcpObserver : public test::EndToEndTest { | 343 class SyncRtcpObserver : public test::EndToEndTest { |
| 344 public: | 344 public: |
| 345 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} | 345 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} |
| 346 | 346 |
| 347 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 347 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 348 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 348 RTCPUtility::RTCPParserV2 parser(packet, length, true); |
| 349 EXPECT_TRUE(parser.IsValid()); | 349 EXPECT_TRUE(parser.IsValid()); |
| 350 uint32_t ssrc = 0; | 350 uint32_t ssrc = 0; |
| 351 ssrc |= static_cast<uint32_t>(packet[4]) << 24; | 351 ssrc |= static_cast<uint32_t>(packet[4]) << 24; |
| 352 ssrc |= static_cast<uint32_t>(packet[5]) << 16; | 352 ssrc |= static_cast<uint32_t>(packet[5]) << 16; |
| 353 ssrc |= static_cast<uint32_t>(packet[6]) << 8; | 353 ssrc |= static_cast<uint32_t>(packet[6]) << 8; |
| 354 ssrc |= static_cast<uint32_t>(packet[7]) << 0; | 354 ssrc |= static_cast<uint32_t>(packet[7]) << 0; |
| 355 EXPECT_EQ(kReceiverLocalVideoSsrc, ssrc); | 355 EXPECT_EQ(kReceiverLocalVideoSsrc, ssrc); |
| 356 observation_complete_.Set(); | 356 observation_complete_.Set(); |
| 357 | 357 |
| 358 return SEND_PACKET; | 358 return SEND_PACKET; |
| 359 } | 359 } |
| 360 | 360 |
| 361 void PerformTest() override { | 361 void PerformTest() override { |
| 362 EXPECT_TRUE(Wait()) | 362 EXPECT_TRUE(Wait()) |
| 363 << "Timed out while waiting for a receiver RTCP packet to be sent."; | 363 << "Timed out while waiting for a receiver RTCP packet to be sent."; |
| 364 } | 364 } |
| 365 } test; | 365 } test; |
| 366 | 366 |
| 367 RunBaseTest(&test, FakeNetworkPipe::Config()); | 367 RunBaseTest(&test); |
| 368 } | 368 } |
| 369 | 369 |
| 370 TEST_F(EndToEndTest, ReceivesAndRetransmitsNack) { | 370 TEST_F(EndToEndTest, ReceivesAndRetransmitsNack) { |
| 371 static const int kNumberOfNacksToObserve = 2; | 371 static const int kNumberOfNacksToObserve = 2; |
| 372 static const int kLossBurstSize = 2; | 372 static const int kLossBurstSize = 2; |
| 373 static const int kPacketsBetweenLossBursts = 9; | 373 static const int kPacketsBetweenLossBursts = 9; |
| 374 class NackObserver : public test::EndToEndTest { | 374 class NackObserver : public test::EndToEndTest { |
| 375 public: | 375 public: |
| 376 NackObserver() | 376 NackObserver() |
| 377 : EndToEndTest(kLongTimeoutMs), | 377 : EndToEndTest(kLongTimeoutMs), |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 } | 447 } |
| 448 | 448 |
| 449 rtc::CriticalSection crit_; | 449 rtc::CriticalSection crit_; |
| 450 std::set<uint16_t> dropped_packets_; | 450 std::set<uint16_t> dropped_packets_; |
| 451 std::set<uint16_t> retransmitted_packets_; | 451 std::set<uint16_t> retransmitted_packets_; |
| 452 uint64_t sent_rtp_packets_; | 452 uint64_t sent_rtp_packets_; |
| 453 int packets_left_to_drop_; | 453 int packets_left_to_drop_; |
| 454 int nacks_left_ GUARDED_BY(&crit_); | 454 int nacks_left_ GUARDED_BY(&crit_); |
| 455 } test; | 455 } test; |
| 456 | 456 |
| 457 RunBaseTest(&test, FakeNetworkPipe::Config()); | 457 RunBaseTest(&test); |
| 458 } | 458 } |
| 459 | 459 |
| 460 TEST_F(EndToEndTest, CanReceiveFec) { | 460 TEST_F(EndToEndTest, CanReceiveFec) { |
| 461 class FecRenderObserver : public test::EndToEndTest, public VideoRenderer { | 461 class FecRenderObserver : public test::EndToEndTest, public VideoRenderer { |
| 462 public: | 462 public: |
| 463 FecRenderObserver() | 463 FecRenderObserver() |
| 464 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} | 464 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} |
| 465 | 465 |
| 466 private: | 466 private: |
| 467 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 467 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 void PerformTest() override { | 548 void PerformTest() override { |
| 549 EXPECT_TRUE(Wait()) | 549 EXPECT_TRUE(Wait()) |
| 550 << "Timed out waiting for dropped frames frames to be rendered."; | 550 << "Timed out waiting for dropped frames frames to be rendered."; |
| 551 } | 551 } |
| 552 | 552 |
| 553 rtc::CriticalSection crit_; | 553 rtc::CriticalSection crit_; |
| 554 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_); | 554 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_); |
| 555 std::set<uint32_t> protected_timestamps_ GUARDED_BY(crit_); | 555 std::set<uint32_t> protected_timestamps_ GUARDED_BY(crit_); |
| 556 } test; | 556 } test; |
| 557 | 557 |
| 558 RunBaseTest(&test, FakeNetworkPipe::Config()); | 558 RunBaseTest(&test); |
| 559 } | 559 } |
| 560 | 560 |
| 561 // Flacky on all platforms. See webrtc:4328. | 561 // Flacky on all platforms. See webrtc:4328. |
| 562 TEST_F(EndToEndTest, DISABLED_ReceivedFecPacketsNotNacked) { | 562 TEST_F(EndToEndTest, DISABLED_ReceivedFecPacketsNotNacked) { |
| 563 class FecNackObserver : public test::EndToEndTest { | 563 class FecNackObserver : public test::EndToEndTest { |
| 564 public: | 564 public: |
| 565 FecNackObserver() | 565 FecNackObserver() |
| 566 : EndToEndTest(kDefaultTimeoutMs), | 566 : EndToEndTest(kDefaultTimeoutMs), |
| 567 state_(kFirstPacket), | 567 state_(kFirstPacket), |
| 568 fec_sequence_number_(0), | 568 fec_sequence_number_(0), |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 if (!nacks.empty() && | 630 if (!nacks.empty() && |
| 631 IsNewerSequenceNumber(nacks.back(), fec_sequence_number_)) { | 631 IsNewerSequenceNumber(nacks.back(), fec_sequence_number_)) { |
| 632 EXPECT_TRUE(std::find( | 632 EXPECT_TRUE(std::find( |
| 633 nacks.begin(), nacks.end(), fec_sequence_number_) == nacks.end()); | 633 nacks.begin(), nacks.end(), fec_sequence_number_) == nacks.end()); |
| 634 observation_complete_.Set(); | 634 observation_complete_.Set(); |
| 635 } | 635 } |
| 636 } | 636 } |
| 637 return SEND_PACKET; | 637 return SEND_PACKET; |
| 638 } | 638 } |
| 639 | 639 |
| 640 test::PacketTransport* CreateSendTransport(Call* sender_call) override { |
| 641 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
| 642 // Configure some network delay. |
| 643 const int kNetworkDelayMs = 50; |
| 644 FakeNetworkPipe::Config config; |
| 645 config.queue_delay_ms = kNetworkDelayMs; |
| 646 return new test::PacketTransport(sender_call, this, |
| 647 test::PacketTransport::kSender, config); |
| 648 } |
| 649 |
| 640 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate | 650 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate |
| 641 // is 10 kbps. | 651 // is 10 kbps. |
| 642 Call::Config GetSenderCallConfig() override { | 652 Call::Config GetSenderCallConfig() override { |
| 643 Call::Config config; | 653 Call::Config config; |
| 644 const int kMinBitrateBps = 30000; | 654 const int kMinBitrateBps = 30000; |
| 645 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; | 655 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; |
| 646 return config; | 656 return config; |
| 647 } | 657 } |
| 648 | 658 |
| 649 void ModifyVideoConfigs( | 659 void ModifyVideoConfigs( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 670 kDropAllMediaPacketsUntilFec, | 680 kDropAllMediaPacketsUntilFec, |
| 671 kVerifyFecPacketNotInNackList, | 681 kVerifyFecPacketNotInNackList, |
| 672 } state_; | 682 } state_; |
| 673 | 683 |
| 674 rtc::CriticalSection crit_; | 684 rtc::CriticalSection crit_; |
| 675 uint16_t fec_sequence_number_ GUARDED_BY(&crit_); | 685 uint16_t fec_sequence_number_ GUARDED_BY(&crit_); |
| 676 bool has_last_sequence_number_; | 686 bool has_last_sequence_number_; |
| 677 uint16_t last_sequence_number_; | 687 uint16_t last_sequence_number_; |
| 678 } test; | 688 } test; |
| 679 | 689 |
| 680 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. | 690 RunBaseTest(&test); |
| 681 // Configure some network delay. | |
| 682 const int kNetworkDelayMs = 50; | |
| 683 FakeNetworkPipe::Config config; | |
| 684 config.queue_delay_ms = kNetworkDelayMs; | |
| 685 RunBaseTest(&test, config); | |
| 686 } | 691 } |
| 687 | 692 |
| 688 // This test drops second RTP packet with a marker bit set, makes sure it's | 693 // This test drops second RTP packet with a marker bit set, makes sure it's |
| 689 // retransmitted and renders. Retransmission SSRCs are also checked. | 694 // retransmitted and renders. Retransmission SSRCs are also checked. |
| 690 void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) { | 695 void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) { |
| 691 // Must be set high enough to allow the bitrate probing to finish. | 696 // Must be set high enough to allow the bitrate probing to finish. |
| 692 static const int kMinProbePackets = 30; | 697 static const int kMinProbePackets = 30; |
| 693 static const int kDroppedFrameNumber = kMinProbePackets + 1; | 698 static const int kDroppedFrameNumber = kMinProbePackets + 1; |
| 694 class RetransmissionObserver : public test::EndToEndTest, | 699 class RetransmissionObserver : public test::EndToEndTest, |
| 695 public I420FrameCallback { | 700 public I420FrameCallback { |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 rtc::CriticalSection crit_; | 789 rtc::CriticalSection crit_; |
| 785 const int payload_type_; | 790 const int payload_type_; |
| 786 const uint32_t retransmission_ssrc_; | 791 const uint32_t retransmission_ssrc_; |
| 787 const int retransmission_payload_type_; | 792 const int retransmission_payload_type_; |
| 788 int marker_bits_observed_; | 793 int marker_bits_observed_; |
| 789 int num_packets_observed_; | 794 int num_packets_observed_; |
| 790 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); | 795 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); |
| 791 bool frame_retransmitted_; | 796 bool frame_retransmitted_; |
| 792 } test(use_rtx, use_red); | 797 } test(use_rtx, use_red); |
| 793 | 798 |
| 794 RunBaseTest(&test, FakeNetworkPipe::Config()); | 799 RunBaseTest(&test); |
| 795 } | 800 } |
| 796 | 801 |
| 797 TEST_F(EndToEndTest, DecodesRetransmittedFrame) { | 802 TEST_F(EndToEndTest, DecodesRetransmittedFrame) { |
| 798 DecodesRetransmittedFrame(false, false); | 803 DecodesRetransmittedFrame(false, false); |
| 799 } | 804 } |
| 800 | 805 |
| 801 TEST_F(EndToEndTest, DecodesRetransmittedFrameOverRtx) { | 806 TEST_F(EndToEndTest, DecodesRetransmittedFrameOverRtx) { |
| 802 DecodesRetransmittedFrame(true, false); | 807 DecodesRetransmittedFrame(true, false); |
| 803 } | 808 } |
| 804 | 809 |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 994 } | 999 } |
| 995 | 1000 |
| 996 rtc::CriticalSection crit_; | 1001 rtc::CriticalSection crit_; |
| 997 int rtp_history_ms_; | 1002 int rtp_history_ms_; |
| 998 bool nack_enabled_; | 1003 bool nack_enabled_; |
| 999 uint32_t highest_dropped_timestamp_ GUARDED_BY(&crit_); | 1004 uint32_t highest_dropped_timestamp_ GUARDED_BY(&crit_); |
| 1000 int frames_to_drop_ GUARDED_BY(&crit_); | 1005 int frames_to_drop_ GUARDED_BY(&crit_); |
| 1001 bool received_pli_ GUARDED_BY(&crit_); | 1006 bool received_pli_ GUARDED_BY(&crit_); |
| 1002 } test(rtp_history_ms); | 1007 } test(rtp_history_ms); |
| 1003 | 1008 |
| 1004 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1009 RunBaseTest(&test); |
| 1005 } | 1010 } |
| 1006 | 1011 |
| 1007 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithNack) { | 1012 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithNack) { |
| 1008 ReceivesPliAndRecovers(1000); | 1013 ReceivesPliAndRecovers(1000); |
| 1009 } | 1014 } |
| 1010 | 1015 |
| 1011 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithoutNack) { | 1016 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithoutNack) { |
| 1012 ReceivesPliAndRecovers(0); | 1017 ReceivesPliAndRecovers(0); |
| 1013 } | 1018 } |
| 1014 | 1019 |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 << (rtcp_mode_ == RtcpMode::kCompound | 1147 << (rtcp_mode_ == RtcpMode::kCompound |
| 1143 ? "Timed out before observing enough compound packets." | 1148 ? "Timed out before observing enough compound packets." |
| 1144 : "Timed out before receiving a non-compound RTCP packet."); | 1149 : "Timed out before receiving a non-compound RTCP packet."); |
| 1145 } | 1150 } |
| 1146 | 1151 |
| 1147 RtcpMode rtcp_mode_; | 1152 RtcpMode rtcp_mode_; |
| 1148 int sent_rtp_; | 1153 int sent_rtp_; |
| 1149 int sent_rtcp_; | 1154 int sent_rtcp_; |
| 1150 } test(rtcp_mode); | 1155 } test(rtcp_mode); |
| 1151 | 1156 |
| 1152 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1157 RunBaseTest(&test); |
| 1153 } | 1158 } |
| 1154 | 1159 |
| 1155 TEST_F(EndToEndTest, UsesRtcpCompoundMode) { | 1160 TEST_F(EndToEndTest, UsesRtcpCompoundMode) { |
| 1156 RespectsRtcpMode(RtcpMode::kCompound); | 1161 RespectsRtcpMode(RtcpMode::kCompound); |
| 1157 } | 1162 } |
| 1158 | 1163 |
| 1159 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { | 1164 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { |
| 1160 RespectsRtcpMode(RtcpMode::kReducedSize); | 1165 RespectsRtcpMode(RtcpMode::kReducedSize); |
| 1161 } | 1166 } |
| 1162 | 1167 |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1719 observation_complete_.Set(); | 1724 observation_complete_.Set(); |
| 1720 return SEND_PACKET; | 1725 return SEND_PACKET; |
| 1721 } | 1726 } |
| 1722 void PerformTest() override { | 1727 void PerformTest() override { |
| 1723 EXPECT_TRUE(Wait()) << "Timed out while waiting for a " | 1728 EXPECT_TRUE(Wait()) << "Timed out while waiting for a " |
| 1724 "receiver RTCP REMB packet to be " | 1729 "receiver RTCP REMB packet to be " |
| 1725 "sent."; | 1730 "sent."; |
| 1726 } | 1731 } |
| 1727 } test; | 1732 } test; |
| 1728 | 1733 |
| 1729 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1734 RunBaseTest(&test); |
| 1730 } | 1735 } |
| 1731 | 1736 |
| 1732 TEST_F(EndToEndTest, VerifyBandwidthStats) { | 1737 TEST_F(EndToEndTest, VerifyBandwidthStats) { |
| 1733 class RtcpObserver : public test::EndToEndTest { | 1738 class RtcpObserver : public test::EndToEndTest { |
| 1734 public: | 1739 public: |
| 1735 RtcpObserver() | 1740 RtcpObserver() |
| 1736 : EndToEndTest(kDefaultTimeoutMs), | 1741 : EndToEndTest(kDefaultTimeoutMs), |
| 1737 sender_call_(nullptr), | 1742 sender_call_(nullptr), |
| 1738 receiver_call_(nullptr), | 1743 receiver_call_(nullptr), |
| 1739 has_seen_pacer_delay_(false) {} | 1744 has_seen_pacer_delay_(false) {} |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1759 EXPECT_TRUE(Wait()) << "Timed out while waiting for " | 1764 EXPECT_TRUE(Wait()) << "Timed out while waiting for " |
| 1760 "non-zero bandwidth stats."; | 1765 "non-zero bandwidth stats."; |
| 1761 } | 1766 } |
| 1762 | 1767 |
| 1763 private: | 1768 private: |
| 1764 Call* sender_call_; | 1769 Call* sender_call_; |
| 1765 Call* receiver_call_; | 1770 Call* receiver_call_; |
| 1766 bool has_seen_pacer_delay_; | 1771 bool has_seen_pacer_delay_; |
| 1767 } test; | 1772 } test; |
| 1768 | 1773 |
| 1769 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1774 RunBaseTest(&test); |
| 1770 } | 1775 } |
| 1771 | 1776 |
| 1772 TEST_F(EndToEndTest, VerifyNackStats) { | 1777 TEST_F(EndToEndTest, VerifyNackStats) { |
| 1773 static const int kPacketNumberToDrop = 200; | 1778 static const int kPacketNumberToDrop = 200; |
| 1774 class NackObserver : public test::EndToEndTest { | 1779 class NackObserver : public test::EndToEndTest { |
| 1775 public: | 1780 public: |
| 1776 NackObserver() | 1781 NackObserver() |
| 1777 : EndToEndTest(kLongTimeoutMs), | 1782 : EndToEndTest(kLongTimeoutMs), |
| 1778 sent_rtp_packets_(0), | 1783 sent_rtp_packets_(0), |
| 1779 dropped_rtp_packet_(0), | 1784 dropped_rtp_packet_(0), |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1863 rtc::CriticalSection crit_; | 1868 rtc::CriticalSection crit_; |
| 1864 uint64_t sent_rtp_packets_; | 1869 uint64_t sent_rtp_packets_; |
| 1865 uint16_t dropped_rtp_packet_ GUARDED_BY(&crit_); | 1870 uint16_t dropped_rtp_packet_ GUARDED_BY(&crit_); |
| 1866 bool dropped_rtp_packet_requested_ GUARDED_BY(&crit_); | 1871 bool dropped_rtp_packet_requested_ GUARDED_BY(&crit_); |
| 1867 std::vector<VideoReceiveStream*> receive_streams_; | 1872 std::vector<VideoReceiveStream*> receive_streams_; |
| 1868 VideoSendStream* send_stream_; | 1873 VideoSendStream* send_stream_; |
| 1869 int64_t start_runtime_ms_; | 1874 int64_t start_runtime_ms_; |
| 1870 } test; | 1875 } test; |
| 1871 | 1876 |
| 1872 test::ClearHistograms(); | 1877 test::ClearHistograms(); |
| 1873 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1878 RunBaseTest(&test); |
| 1874 | 1879 |
| 1875 EXPECT_EQ(1, test::NumHistogramSamples( | 1880 EXPECT_EQ(1, test::NumHistogramSamples( |
| 1876 "WebRTC.Video.UniqueNackRequestsSentInPercent")); | 1881 "WebRTC.Video.UniqueNackRequestsSentInPercent")); |
| 1877 EXPECT_EQ(1, test::NumHistogramSamples( | 1882 EXPECT_EQ(1, test::NumHistogramSamples( |
| 1878 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); | 1883 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); |
| 1879 EXPECT_GT(test::LastHistogramSample( | 1884 EXPECT_GT(test::LastHistogramSample( |
| 1880 "WebRTC.Video.NackPacketsSentPerMinute"), 0); | 1885 "WebRTC.Video.NackPacketsSentPerMinute"), 0); |
| 1881 EXPECT_GT(test::LastHistogramSample( | 1886 EXPECT_GT(test::LastHistogramSample( |
| 1882 "WebRTC.Video.NackPacketsReceivedPerMinute"), 0); | 1887 "WebRTC.Video.NackPacketsReceivedPerMinute"), 0); |
| 1883 } | 1888 } |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1959 | 1964 |
| 1960 const bool use_rtx_; | 1965 const bool use_rtx_; |
| 1961 const bool use_red_; | 1966 const bool use_red_; |
| 1962 const bool screenshare_; | 1967 const bool screenshare_; |
| 1963 Call* sender_call_; | 1968 Call* sender_call_; |
| 1964 Call* receiver_call_; | 1969 Call* receiver_call_; |
| 1965 int64_t start_runtime_ms_; | 1970 int64_t start_runtime_ms_; |
| 1966 } test(use_rtx, use_red, screenshare); | 1971 } test(use_rtx, use_red, screenshare); |
| 1967 | 1972 |
| 1968 test::ClearHistograms(); | 1973 test::ClearHistograms(); |
| 1969 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1974 RunBaseTest(&test); |
| 1970 | 1975 |
| 1971 // Delete the call for Call stats to be reported. | 1976 // Delete the call for Call stats to be reported. |
| 1972 sender_call_.reset(); | 1977 sender_call_.reset(); |
| 1973 receiver_call_.reset(); | 1978 receiver_call_.reset(); |
| 1974 | 1979 |
| 1975 std::string video_prefix = | 1980 std::string video_prefix = |
| 1976 screenshare ? "WebRTC.Video.Screenshare." : "WebRTC.Video."; | 1981 screenshare ? "WebRTC.Video.Screenshare." : "WebRTC.Video."; |
| 1977 | 1982 |
| 1978 // Verify that stats have been updated once. | 1983 // Verify that stats have been updated once. |
| 1979 EXPECT_EQ( | 1984 EXPECT_EQ( |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2181 } | 2186 } |
| 2182 | 2187 |
| 2183 rtc::CriticalSection crit_; | 2188 rtc::CriticalSection crit_; |
| 2184 bool enable_rrtr_; | 2189 bool enable_rrtr_; |
| 2185 int sent_rtcp_sr_; | 2190 int sent_rtcp_sr_; |
| 2186 int sent_rtcp_rr_ GUARDED_BY(&crit_); | 2191 int sent_rtcp_rr_ GUARDED_BY(&crit_); |
| 2187 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); | 2192 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); |
| 2188 int sent_rtcp_dlrr_; | 2193 int sent_rtcp_dlrr_; |
| 2189 } test(enable_rrtr); | 2194 } test(enable_rrtr); |
| 2190 | 2195 |
| 2191 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2196 RunBaseTest(&test); |
| 2192 } | 2197 } |
| 2193 | 2198 |
| 2194 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, | 2199 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, |
| 2195 bool send_single_ssrc_first) { | 2200 bool send_single_ssrc_first) { |
| 2196 class SendsSetSsrcs : public test::EndToEndTest { | 2201 class SendsSetSsrcs : public test::EndToEndTest { |
| 2197 public: | 2202 public: |
| 2198 SendsSetSsrcs(const uint32_t* ssrcs, | 2203 SendsSetSsrcs(const uint32_t* ssrcs, |
| 2199 size_t num_ssrcs, | 2204 size_t num_ssrcs, |
| 2200 bool send_single_ssrc_first) | 2205 bool send_single_ssrc_first) |
| 2201 : EndToEndTest(kDefaultTimeoutMs), | 2206 : EndToEndTest(kDefaultTimeoutMs), |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2280 const size_t num_ssrcs_; | 2285 const size_t num_ssrcs_; |
| 2281 const bool send_single_ssrc_first_; | 2286 const bool send_single_ssrc_first_; |
| 2282 | 2287 |
| 2283 size_t ssrcs_to_observe_; | 2288 size_t ssrcs_to_observe_; |
| 2284 bool expect_single_ssrc_; | 2289 bool expect_single_ssrc_; |
| 2285 | 2290 |
| 2286 VideoSendStream* send_stream_; | 2291 VideoSendStream* send_stream_; |
| 2287 VideoEncoderConfig video_encoder_config_all_streams_; | 2292 VideoEncoderConfig video_encoder_config_all_streams_; |
| 2288 } test(kVideoSendSsrcs, num_ssrcs, send_single_ssrc_first); | 2293 } test(kVideoSendSsrcs, num_ssrcs, send_single_ssrc_first); |
| 2289 | 2294 |
| 2290 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2295 RunBaseTest(&test); |
| 2291 } | 2296 } |
| 2292 | 2297 |
| 2293 TEST_F(EndToEndTest, ReportsSetEncoderRates) { | 2298 TEST_F(EndToEndTest, ReportsSetEncoderRates) { |
| 2294 class EncoderRateStatsTest : public test::EndToEndTest, | 2299 class EncoderRateStatsTest : public test::EndToEndTest, |
| 2295 public test::FakeEncoder { | 2300 public test::FakeEncoder { |
| 2296 public: | 2301 public: |
| 2297 EncoderRateStatsTest() | 2302 EncoderRateStatsTest() |
| 2298 : EndToEndTest(kDefaultTimeoutMs), | 2303 : EndToEndTest(kDefaultTimeoutMs), |
| 2299 FakeEncoder(Clock::GetRealTimeClock()), | 2304 FakeEncoder(Clock::GetRealTimeClock()), |
| 2300 send_stream_(nullptr), | 2305 send_stream_(nullptr), |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2341 FAIL() | 2346 FAIL() |
| 2342 << "Timed out waiting for stats reporting the currently set bitrate."; | 2347 << "Timed out waiting for stats reporting the currently set bitrate."; |
| 2343 } | 2348 } |
| 2344 | 2349 |
| 2345 private: | 2350 private: |
| 2346 rtc::CriticalSection crit_; | 2351 rtc::CriticalSection crit_; |
| 2347 VideoSendStream* send_stream_; | 2352 VideoSendStream* send_stream_; |
| 2348 uint32_t bitrate_kbps_ GUARDED_BY(crit_); | 2353 uint32_t bitrate_kbps_ GUARDED_BY(crit_); |
| 2349 } test; | 2354 } test; |
| 2350 | 2355 |
| 2351 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2356 RunBaseTest(&test); |
| 2352 } | 2357 } |
| 2353 | 2358 |
| 2354 TEST_F(EndToEndTest, GetStats) { | 2359 TEST_F(EndToEndTest, GetStats) { |
| 2355 static const int kStartBitrateBps = 3000000; | 2360 static const int kStartBitrateBps = 3000000; |
| 2356 static const int kExpectedRenderDelayMs = 20; | 2361 static const int kExpectedRenderDelayMs = 20; |
| 2357 class StatsObserver : public test::EndToEndTest, public I420FrameCallback { | 2362 class StatsObserver : public test::EndToEndTest, public I420FrameCallback { |
| 2358 public: | 2363 public: |
| 2359 StatsObserver() | 2364 StatsObserver() |
| 2360 : EndToEndTest(kLongTimeoutMs), | 2365 : EndToEndTest(kLongTimeoutMs), |
| 2361 send_stream_(nullptr), | 2366 send_stream_(nullptr), |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2521 bool AllStatsFilled(const std::map<std::string, bool>& stats_map) { | 2526 bool AllStatsFilled(const std::map<std::string, bool>& stats_map) { |
| 2522 for (std::map<std::string, bool>::const_iterator it = stats_map.begin(); | 2527 for (std::map<std::string, bool>::const_iterator it = stats_map.begin(); |
| 2523 it != stats_map.end(); | 2528 it != stats_map.end(); |
| 2524 ++it) { | 2529 ++it) { |
| 2525 if (!it->second) | 2530 if (!it->second) |
| 2526 return false; | 2531 return false; |
| 2527 } | 2532 } |
| 2528 return true; | 2533 return true; |
| 2529 } | 2534 } |
| 2530 | 2535 |
| 2536 test::PacketTransport* CreateSendTransport(Call* sender_call) override { |
| 2537 FakeNetworkPipe::Config network_config; |
| 2538 network_config.loss_percent = 5; |
| 2539 return new test::PacketTransport( |
| 2540 sender_call, this, test::PacketTransport::kSender, network_config); |
| 2541 } |
| 2542 |
| 2531 Call::Config GetSenderCallConfig() override { | 2543 Call::Config GetSenderCallConfig() override { |
| 2532 Call::Config config = EndToEndTest::GetSenderCallConfig(); | 2544 Call::Config config = EndToEndTest::GetSenderCallConfig(); |
| 2533 config.bitrate_config.start_bitrate_bps = kStartBitrateBps; | 2545 config.bitrate_config.start_bitrate_bps = kStartBitrateBps; |
| 2534 return config; | 2546 return config; |
| 2535 } | 2547 } |
| 2536 | 2548 |
| 2537 void ModifyVideoConfigs( | 2549 void ModifyVideoConfigs( |
| 2538 VideoSendStream::Config* send_config, | 2550 VideoSendStream::Config* send_config, |
| 2539 std::vector<VideoReceiveStream::Config>* receive_configs, | 2551 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 2540 VideoEncoderConfig* encoder_config) override { | 2552 VideoEncoderConfig* encoder_config) override { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2607 VideoSendStream* send_stream_; | 2619 VideoSendStream* send_stream_; |
| 2608 std::map<std::string, bool> send_stats_filled_; | 2620 std::map<std::string, bool> send_stats_filled_; |
| 2609 | 2621 |
| 2610 std::vector<uint32_t> expected_receive_ssrcs_; | 2622 std::vector<uint32_t> expected_receive_ssrcs_; |
| 2611 std::set<uint32_t> expected_send_ssrcs_; | 2623 std::set<uint32_t> expected_send_ssrcs_; |
| 2612 std::string expected_cname_; | 2624 std::string expected_cname_; |
| 2613 | 2625 |
| 2614 rtc::Event check_stats_event_; | 2626 rtc::Event check_stats_event_; |
| 2615 } test; | 2627 } test; |
| 2616 | 2628 |
| 2617 FakeNetworkPipe::Config network_config; | 2629 RunBaseTest(&test); |
| 2618 network_config.loss_percent = 5; | |
| 2619 RunBaseTest(&test, network_config); | |
| 2620 } | 2630 } |
| 2621 | 2631 |
| 2622 TEST_F(EndToEndTest, ReceiverReferenceTimeReportEnabled) { | 2632 TEST_F(EndToEndTest, ReceiverReferenceTimeReportEnabled) { |
| 2623 TestXrReceiverReferenceTimeReport(true); | 2633 TestXrReceiverReferenceTimeReport(true); |
| 2624 } | 2634 } |
| 2625 | 2635 |
| 2626 TEST_F(EndToEndTest, ReceiverReferenceTimeReportDisabled) { | 2636 TEST_F(EndToEndTest, ReceiverReferenceTimeReportDisabled) { |
| 2627 TestXrReceiverReferenceTimeReport(false); | 2637 TestXrReceiverReferenceTimeReport(false); |
| 2628 } | 2638 } |
| 2629 | 2639 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 2657 | 2667 |
| 2658 void PerformTest() override { | 2668 void PerformTest() override { |
| 2659 EXPECT_TRUE(Wait()) | 2669 EXPECT_TRUE(Wait()) |
| 2660 << "Timed out while verifying number of received RTP packets."; | 2670 << "Timed out while verifying number of received RTP packets."; |
| 2661 } | 2671 } |
| 2662 | 2672 |
| 2663 VideoReceiveStream* receive_stream_; | 2673 VideoReceiveStream* receive_stream_; |
| 2664 uint32_t sent_rtp_; | 2674 uint32_t sent_rtp_; |
| 2665 } test; | 2675 } test; |
| 2666 | 2676 |
| 2667 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2677 RunBaseTest(&test); |
| 2668 } | 2678 } |
| 2669 | 2679 |
| 2670 TEST_F(EndToEndTest, SendsSetSsrc) { TestSendsSetSsrcs(1, false); } | 2680 TEST_F(EndToEndTest, SendsSetSsrc) { TestSendsSetSsrcs(1, false); } |
| 2671 | 2681 |
| 2672 TEST_F(EndToEndTest, SendsSetSimulcastSsrcs) { | 2682 TEST_F(EndToEndTest, SendsSetSimulcastSsrcs) { |
| 2673 TestSendsSetSsrcs(kNumSsrcs, false); | 2683 TestSendsSetSsrcs(kNumSsrcs, false); |
| 2674 } | 2684 } |
| 2675 | 2685 |
| 2676 TEST_F(EndToEndTest, CanSwitchToUseAllSsrcs) { | 2686 TEST_F(EndToEndTest, CanSwitchToUseAllSsrcs) { |
| 2677 TestSendsSetSsrcs(kNumSsrcs, true); | 2687 TestSendsSetSsrcs(kNumSsrcs, true); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2738 EXPECT_TRUE(Wait()) | 2748 EXPECT_TRUE(Wait()) |
| 2739 << "Timed out while waiting for redundant payloads on all SSRCs."; | 2749 << "Timed out while waiting for redundant payloads on all SSRCs."; |
| 2740 } | 2750 } |
| 2741 | 2751 |
| 2742 private: | 2752 private: |
| 2743 size_t ssrcs_to_observe_; | 2753 size_t ssrcs_to_observe_; |
| 2744 std::map<uint32_t, bool> observed_redundant_retransmission_; | 2754 std::map<uint32_t, bool> observed_redundant_retransmission_; |
| 2745 std::map<uint32_t, bool> registered_rtx_ssrc_; | 2755 std::map<uint32_t, bool> registered_rtx_ssrc_; |
| 2746 } test; | 2756 } test; |
| 2747 | 2757 |
| 2748 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2758 RunBaseTest(&test); |
| 2749 } | 2759 } |
| 2750 | 2760 |
| 2751 void EndToEndTest::TestRtpStatePreservation(bool use_rtx) { | 2761 void EndToEndTest::TestRtpStatePreservation(bool use_rtx) { |
| 2752 static const uint32_t kMaxSequenceNumberGap = 100; | 2762 static const uint32_t kMaxSequenceNumberGap = 100; |
| 2753 static const uint64_t kMaxTimestampGap = kDefaultTimeoutMs * 90; | 2763 static const uint64_t kMaxTimestampGap = kDefaultTimeoutMs * 90; |
| 2754 class RtpSequenceObserver : public test::RtpRtcpObserver { | 2764 class RtpSequenceObserver : public test::RtpRtcpObserver { |
| 2755 public: | 2765 public: |
| 2756 explicit RtpSequenceObserver(bool use_rtx) | 2766 explicit RtpSequenceObserver(bool use_rtx) |
| 2757 : test::RtpRtcpObserver(kDefaultTimeoutMs), | 2767 : test::RtpRtcpObserver(kDefaultTimeoutMs), |
| 2758 ssrcs_to_observe_(kNumSsrcs) { | 2768 ssrcs_to_observe_(kNumSsrcs) { |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3103 rtc::Event packet_event_; | 3113 rtc::Event packet_event_; |
| 3104 Call* sender_call_; | 3114 Call* sender_call_; |
| 3105 Call* receiver_call_; | 3115 Call* receiver_call_; |
| 3106 NetworkState sender_state_ GUARDED_BY(test_crit_); | 3116 NetworkState sender_state_ GUARDED_BY(test_crit_); |
| 3107 int sender_rtp_ GUARDED_BY(test_crit_); | 3117 int sender_rtp_ GUARDED_BY(test_crit_); |
| 3108 int sender_rtcp_ GUARDED_BY(test_crit_); | 3118 int sender_rtcp_ GUARDED_BY(test_crit_); |
| 3109 int receiver_rtcp_ GUARDED_BY(test_crit_); | 3119 int receiver_rtcp_ GUARDED_BY(test_crit_); |
| 3110 int down_frames_ GUARDED_BY(test_crit_); | 3120 int down_frames_ GUARDED_BY(test_crit_); |
| 3111 } test; | 3121 } test; |
| 3112 | 3122 |
| 3113 RunBaseTest(&test, FakeNetworkPipe::Config()); | 3123 RunBaseTest(&test); |
| 3114 } | 3124 } |
| 3115 | 3125 |
| 3116 TEST_F(EndToEndTest, CallReportsRttForSender) { | 3126 TEST_F(EndToEndTest, CallReportsRttForSender) { |
| 3117 static const int kSendDelayMs = 30; | 3127 static const int kSendDelayMs = 30; |
| 3118 static const int kReceiveDelayMs = 70; | 3128 static const int kReceiveDelayMs = 70; |
| 3119 | 3129 |
| 3120 CreateCalls(Call::Config(), Call::Config()); | 3130 CreateCalls(Call::Config(), Call::Config()); |
| 3121 | 3131 |
| 3122 FakeNetworkPipe::Config config; | 3132 FakeNetworkPipe::Config config; |
| 3123 config.queue_delay_ms = kSendDelayMs; | 3133 config.queue_delay_ms = kSendDelayMs; |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3310 "packets with transport sequence number."; | 3320 "packets with transport sequence number."; |
| 3311 } | 3321 } |
| 3312 | 3322 |
| 3313 private: | 3323 private: |
| 3314 bool video_observed_; | 3324 bool video_observed_; |
| 3315 bool audio_observed_; | 3325 bool audio_observed_; |
| 3316 SequenceNumberUnwrapper unwrapper_; | 3326 SequenceNumberUnwrapper unwrapper_; |
| 3317 std::set<int64_t> received_packet_ids_; | 3327 std::set<int64_t> received_packet_ids_; |
| 3318 } test; | 3328 } test; |
| 3319 | 3329 |
| 3320 RunBaseTest(&test, FakeNetworkPipe::Config()); | 3330 RunBaseTest(&test); |
| 3321 } | 3331 } |
| 3322 } // namespace webrtc | 3332 } // namespace webrtc |
| OLD | NEW |