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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
118 return true; | 118 return true; |
119 } | 119 } |
120 bool need_rtp_; | 120 bool need_rtp_; |
121 bool need_rtcp_; | 121 bool need_rtcp_; |
122 rtc::CriticalSection crit_; | 122 rtc::CriticalSection crit_; |
123 }; | 123 }; |
124 | 124 |
125 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); | 125 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); |
126 void ReceivesPliAndRecovers(int rtp_history_ms); | 126 void ReceivesPliAndRecovers(int rtp_history_ms); |
127 void RespectsRtcpMode(RtcpMode rtcp_mode); | 127 void RespectsRtcpMode(RtcpMode rtcp_mode); |
128 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); | |
129 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); | 128 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); |
130 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); | 129 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); |
131 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); | 130 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); |
132 void VerifyNewVideoSendStreamsRespectNetworkState( | 131 void VerifyNewVideoSendStreamsRespectNetworkState( |
133 MediaType network_to_bring_up, | 132 MediaType network_to_bring_up, |
134 VideoEncoder* encoder, | 133 VideoEncoder* encoder, |
135 Transport* transport); | 134 Transport* transport); |
136 void VerifyNewVideoReceiveStreamsRespectNetworkState( | 135 void VerifyNewVideoReceiveStreamsRespectNetworkState( |
137 MediaType network_to_bring_up, | 136 MediaType network_to_bring_up, |
138 Transport* transport); | 137 Transport* transport); |
(...skipping 2289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2428 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); | 2427 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); |
2429 } | 2428 } |
2430 | 2429 |
2431 TEST_P(EndToEndTest, VerifyHistogramStatsWithScreenshare) { | 2430 TEST_P(EndToEndTest, VerifyHistogramStatsWithScreenshare) { |
2432 const bool kEnabledRtx = false; | 2431 const bool kEnabledRtx = false; |
2433 const bool kEnabledRed = false; | 2432 const bool kEnabledRed = false; |
2434 const bool kScreenshare = true; | 2433 const bool kScreenshare = true; |
2435 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); | 2434 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); |
2436 } | 2435 } |
2437 | 2436 |
2438 void EndToEndTest::TestXrReceiverReferenceTimeReport(bool enable_rrtr) { | |
2439 static const int kNumRtcpReportPacketsToObserve = 5; | |
2440 class RtcpXrObserver : public test::EndToEndTest { | |
2441 public: | |
2442 explicit RtcpXrObserver(bool enable_rrtr) | |
2443 : EndToEndTest(kDefaultTimeoutMs), | |
2444 enable_rrtr_(enable_rrtr), | |
2445 sent_rtcp_sr_(0), | |
2446 sent_rtcp_rr_(0), | |
2447 sent_rtcp_rrtr_(0), | |
2448 sent_rtcp_dlrr_(0) {} | |
2449 | |
2450 private: | |
2451 // Receive stream should send RR packets (and RRTR packets if enabled). | |
2452 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | |
2453 rtc::CritScope lock(&crit_); | |
2454 test::RtcpPacketParser parser; | |
2455 EXPECT_TRUE(parser.Parse(packet, length)); | |
2456 | |
2457 sent_rtcp_rr_ += parser.receiver_report()->num_packets(); | |
2458 EXPECT_EQ(0, parser.sender_report()->num_packets()); | |
2459 EXPECT_GE(1, parser.xr()->num_packets()); | |
2460 if (parser.xr()->num_packets() > 0) { | |
2461 if (parser.xr()->rrtr()) | |
2462 ++sent_rtcp_rrtr_; | |
2463 EXPECT_FALSE(parser.xr()->dlrr()); | |
2464 } | |
2465 | |
2466 return SEND_PACKET; | |
2467 } | |
2468 // Send stream should send SR packets (and DLRR packets if enabled). | |
2469 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | |
2470 rtc::CritScope lock(&crit_); | |
2471 test::RtcpPacketParser parser; | |
2472 EXPECT_TRUE(parser.Parse(packet, length)); | |
2473 | |
2474 sent_rtcp_sr_ += parser.sender_report()->num_packets(); | |
2475 EXPECT_GE(1, parser.xr()->num_packets()); | |
2476 if (parser.xr()->num_packets() > 0) { | |
2477 EXPECT_FALSE(parser.xr()->rrtr()); | |
2478 if (parser.xr()->dlrr()) | |
2479 ++sent_rtcp_dlrr_; | |
2480 } | |
2481 | |
2482 if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve && | |
2483 sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve) { | |
2484 if (enable_rrtr_) { | |
2485 EXPECT_LT(0, sent_rtcp_rrtr_); | |
2486 EXPECT_LT(0, sent_rtcp_dlrr_); | |
2487 } else { | |
2488 EXPECT_EQ(0, sent_rtcp_rrtr_); | |
2489 EXPECT_EQ(0, sent_rtcp_dlrr_); | |
2490 } | |
2491 observation_complete_.Set(); | |
2492 } | |
2493 return SEND_PACKET; | |
2494 } | |
2495 | |
2496 void ModifyVideoConfigs( | |
2497 VideoSendStream::Config* send_config, | |
2498 std::vector<VideoReceiveStream::Config>* receive_configs, | |
2499 VideoEncoderConfig* encoder_config) override { | |
2500 (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize; | |
2501 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = | |
2502 enable_rrtr_; | |
2503 } | |
2504 | |
2505 void PerformTest() override { | |
2506 EXPECT_TRUE(Wait()) | |
2507 << "Timed out while waiting for RTCP SR/RR packets to be sent."; | |
2508 } | |
2509 | |
2510 rtc::CriticalSection crit_; | |
2511 bool enable_rrtr_; | |
2512 int sent_rtcp_sr_; | |
2513 int sent_rtcp_rr_ GUARDED_BY(&crit_); | |
2514 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); | |
2515 int sent_rtcp_dlrr_; | |
2516 } test(enable_rrtr); | |
2517 | |
2518 RunBaseTest(&test); | |
2519 } | |
2520 | |
2521 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, | 2437 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, |
2522 bool send_single_ssrc_first) { | 2438 bool send_single_ssrc_first) { |
2523 class SendsSetSsrcs : public test::EndToEndTest { | 2439 class SendsSetSsrcs : public test::EndToEndTest { |
2524 public: | 2440 public: |
2525 SendsSetSsrcs(const uint32_t* ssrcs, | 2441 SendsSetSsrcs(const uint32_t* ssrcs, |
2526 size_t num_ssrcs, | 2442 size_t num_ssrcs, |
2527 bool send_single_ssrc_first) | 2443 bool send_single_ssrc_first) |
2528 : EndToEndTest(kDefaultTimeoutMs), | 2444 : EndToEndTest(kDefaultTimeoutMs), |
2529 num_ssrcs_(num_ssrcs), | 2445 num_ssrcs_(num_ssrcs), |
2530 send_single_ssrc_first_(send_single_ssrc_first), | 2446 send_single_ssrc_first_(send_single_ssrc_first), |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3057 ReceiveStreamRenderer receive_stream_renderer_; | 2973 ReceiveStreamRenderer receive_stream_renderer_; |
3058 } test; | 2974 } test; |
3059 | 2975 |
3060 // TODO(philipel): Implement statistics for the new video jitter buffer. | 2976 // TODO(philipel): Implement statistics for the new video jitter buffer. |
3061 if (GetParam() == new_jb_enabled) | 2977 if (GetParam() == new_jb_enabled) |
3062 return; | 2978 return; |
3063 | 2979 |
3064 RunBaseTest(&test); | 2980 RunBaseTest(&test); |
3065 } | 2981 } |
3066 | 2982 |
3067 TEST_P(EndToEndTest, ReceiverReferenceTimeReportEnabled) { | 2983 class RtcpXrObserver : public test::EndToEndTest { |
3068 TestXrReceiverReferenceTimeReport(true); | 2984 public: |
2985 explicit RtcpXrObserver(bool enable_rrtr) | |
2986 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), | |
2987 enable_rrtr_(enable_rrtr), | |
2988 sent_rtcp_sr_(0), | |
2989 sent_rtcp_rr_(0), | |
2990 sent_rtcp_rrtr_(0), | |
2991 sent_rtcp_target_bitrate_(false), | |
2992 sent_rtcp_dlrr_(0) {} | |
2993 | |
2994 private: | |
2995 // Receive stream should send RR packets (and RRTR packets if enabled). | |
2996 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | |
2997 rtc::CritScope lock(&crit_); | |
2998 test::RtcpPacketParser parser; | |
2999 EXPECT_TRUE(parser.Parse(packet, length)); | |
3000 | |
3001 sent_rtcp_rr_ += parser.receiver_report()->num_packets(); | |
3002 EXPECT_EQ(0, parser.sender_report()->num_packets()); | |
3003 EXPECT_GE(1, parser.xr()->num_packets()); | |
3004 if (parser.xr()->num_packets() > 0) { | |
3005 if (parser.xr()->rrtr()) | |
3006 ++sent_rtcp_rrtr_; | |
3007 EXPECT_FALSE(parser.xr()->dlrr()); | |
3008 } | |
3009 | |
3010 return SEND_PACKET; | |
3011 } | |
3012 // Send stream should send SR packets (and DLRR packets if enabled). | |
3013 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | |
3014 rtc::CritScope lock(&crit_); | |
3015 test::RtcpPacketParser parser; | |
3016 EXPECT_TRUE(parser.Parse(packet, length)); | |
3017 | |
3018 sent_rtcp_sr_ += parser.sender_report()->num_packets(); | |
3019 EXPECT_LE(parser.xr()->num_packets(), 2); // dlrr and/or target bitrate. | |
danilchap
2016/11/29 13:13:14
fyi: the check Le(1) was here because test parser
sprang_webrtc
2016/11/29 13:34:54
Acknowledged.
| |
3020 if (parser.xr()->num_packets() > 0) { | |
3021 EXPECT_FALSE(parser.xr()->rrtr()); | |
3022 if (parser.xr()->dlrr()) | |
3023 ++sent_rtcp_dlrr_; | |
3024 if (parser.xr()->target_bitrate()) | |
3025 sent_rtcp_target_bitrate_ = true; | |
3026 } | |
3027 | |
3028 if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve && | |
3029 sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve && | |
3030 sent_rtcp_target_bitrate_) { | |
3031 if (enable_rrtr_) { | |
3032 EXPECT_GT(sent_rtcp_rrtr_, 0); | |
3033 EXPECT_GT(sent_rtcp_dlrr_, 0); | |
3034 } else { | |
3035 EXPECT_EQ(sent_rtcp_rrtr_, 0); | |
3036 EXPECT_EQ(sent_rtcp_dlrr_, 0); | |
3037 } | |
3038 observation_complete_.Set(); | |
3039 } | |
3040 return SEND_PACKET; | |
3041 } | |
3042 | |
3043 void ModifyVideoConfigs( | |
3044 VideoSendStream::Config* send_config, | |
3045 std::vector<VideoReceiveStream::Config>* receive_configs, | |
3046 VideoEncoderConfig* encoder_config) override { | |
3047 (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize; | |
3048 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = | |
3049 enable_rrtr_; | |
3050 } | |
3051 | |
3052 void PerformTest() override { | |
3053 EXPECT_TRUE(Wait()) | |
3054 << "Timed out while waiting for RTCP SR/RR packets to be sent."; | |
3055 } | |
3056 | |
3057 static const int kNumRtcpReportPacketsToObserve = 10; | |
3058 | |
3059 rtc::CriticalSection crit_; | |
3060 bool enable_rrtr_; | |
3061 int sent_rtcp_sr_; | |
3062 int sent_rtcp_rr_ GUARDED_BY(&crit_); | |
3063 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); | |
3064 bool sent_rtcp_target_bitrate_ GUARDED_BY(&crit_); | |
3065 int sent_rtcp_dlrr_; | |
3066 }; | |
3067 | |
3068 TEST_P(EndToEndTest, TestExtendedReportsWithDlrr) { | |
danilchap
2016/11/29 13:13:14
WithRrtr/WithoutRrtr instead of WithDlrr to match
sprang_webrtc
2016/11/29 13:34:54
Oops, meant rrtr.
| |
3069 RtcpXrObserver test(true); | |
3070 RunBaseTest(&test); | |
3069 } | 3071 } |
3070 | 3072 |
3071 TEST_P(EndToEndTest, ReceiverReferenceTimeReportDisabled) { | 3073 TEST_P(EndToEndTest, TestExtendedReportsWithoutDlrr) { |
3072 TestXrReceiverReferenceTimeReport(false); | 3074 RtcpXrObserver test(false); |
3075 RunBaseTest(&test); | |
3073 } | 3076 } |
3074 | 3077 |
3075 TEST_P(EndToEndTest, TestReceivedRtpPacketStats) { | 3078 TEST_P(EndToEndTest, TestReceivedRtpPacketStats) { |
3076 static const size_t kNumRtpPacketsToSend = 5; | 3079 static const size_t kNumRtpPacketsToSend = 5; |
3077 class ReceivedRtpStatsObserver : public test::EndToEndTest { | 3080 class ReceivedRtpStatsObserver : public test::EndToEndTest { |
3078 public: | 3081 public: |
3079 ReceivedRtpStatsObserver() | 3082 ReceivedRtpStatsObserver() |
3080 : EndToEndTest(kDefaultTimeoutMs), | 3083 : EndToEndTest(kDefaultTimeoutMs), |
3081 receive_stream_(nullptr), | 3084 receive_stream_(nullptr), |
3082 sent_rtp_(0) {} | 3085 sent_rtp_(0) {} |
(...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4041 std::unique_ptr<VideoEncoder> encoder_; | 4044 std::unique_ptr<VideoEncoder> encoder_; |
4042 std::unique_ptr<VideoDecoder> decoder_; | 4045 std::unique_ptr<VideoDecoder> decoder_; |
4043 rtc::CriticalSection crit_; | 4046 rtc::CriticalSection crit_; |
4044 int recorded_frames_ GUARDED_BY(crit_); | 4047 int recorded_frames_ GUARDED_BY(crit_); |
4045 } test(this); | 4048 } test(this); |
4046 | 4049 |
4047 RunBaseTest(&test); | 4050 RunBaseTest(&test); |
4048 } | 4051 } |
4049 | 4052 |
4050 } // namespace webrtc | 4053 } // namespace webrtc |
OLD | NEW |