Index: webrtc/video/send_statistics_proxy_unittest.cc |
diff --git a/webrtc/video/send_statistics_proxy_unittest.cc b/webrtc/video/send_statistics_proxy_unittest.cc |
index cf54190d1397c438c0df40dcfc7cedc81d81b8dd..c1120132dad373e7cb1a4c01f7959f39e53c055e 100644 |
--- a/webrtc/video/send_statistics_proxy_unittest.cc |
+++ b/webrtc/video/send_statistics_proxy_unittest.cc |
@@ -16,10 +16,16 @@ |
#include <vector> |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "webrtc/system_wrappers/include/metrics.h" |
#include "webrtc/test/histogram.h" |
namespace webrtc { |
+static const uint32_t kFirstSsrc = 17; |
+static const uint32_t kSecondSsrc = 42; |
+static const uint32_t kFirstRtxSsrc = 18; |
+static const uint32_t kSecondRtxSsrc = 43; |
+ |
class SendStatisticsProxyTest : public ::testing::Test { |
public: |
SendStatisticsProxyTest() |
@@ -37,10 +43,10 @@ class SendStatisticsProxyTest : public ::testing::Test { |
VideoSendStream::Config GetTestConfig() { |
VideoSendStream::Config config(nullptr); |
- config.rtp.ssrcs.push_back(17); |
- config.rtp.ssrcs.push_back(42); |
- config.rtp.rtx.ssrcs.push_back(18); |
- config.rtp.rtx.ssrcs.push_back(43); |
+ config.rtp.ssrcs.push_back(kFirstSsrc); |
+ config.rtp.ssrcs.push_back(kSecondSsrc); |
+ config.rtp.rtx.ssrcs.push_back(kFirstRtxSsrc); |
+ config.rtp.rtx.ssrcs.push_back(kSecondRtxSsrc); |
return config; |
} |
@@ -86,8 +92,8 @@ class SendStatisticsProxyTest : public ::testing::Test { |
} |
} |
- rtc::scoped_ptr<SendStatisticsProxy> statistics_proxy_; |
SimulatedClock fake_clock_; |
+ rtc::scoped_ptr<SendStatisticsProxy> statistics_proxy_; |
VideoSendStream::Config config_; |
int avg_delay_ms_; |
int max_delay_ms_; |
@@ -434,4 +440,89 @@ TEST_F(SendStatisticsProxyTest, ClearsBitratesFromInactiveSsrcs) { |
EXPECT_EQ(0, stats.substreams[config_.rtp.ssrcs[1]].retransmit_bitrate_bps); |
} |
+TEST_F(SendStatisticsProxyTest, ResetsRtcpCountersOnContentChange) { |
+ RtcpPacketTypeCounterObserver* proxy = |
+ static_cast<RtcpPacketTypeCounterObserver*>(statistics_proxy_.get()); |
+ RtcpPacketTypeCounter counters; |
+ counters.first_packet_time_ms = fake_clock_.TimeInMilliseconds(); |
+ proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); |
+ proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); |
+ |
+ fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds); |
+ |
+ counters.nack_packets += 1 * metrics::kMinRunTimeInSeconds; |
+ counters.fir_packets += 2 * metrics::kMinRunTimeInSeconds; |
+ counters.pli_packets += 3 * metrics::kMinRunTimeInSeconds; |
+ counters.unique_nack_requests += 4 * metrics::kMinRunTimeInSeconds; |
+ counters.nack_requests += 5 * metrics::kMinRunTimeInSeconds; |
+ |
+ proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); |
+ proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); |
+ |
+ // Changing content type causes histograms to be reported. |
+ statistics_proxy_->SetContentType(VideoEncoderConfig::ContentType::kScreen); |
+ |
+ EXPECT_EQ(1, test::NumHistogramSamples( |
+ "WebRTC.Video.NackPacketsReceivedPerMinute")); |
+ EXPECT_EQ( |
+ 1, test::NumHistogramSamples("WebRTC.Video.FirPacketsReceivedPerMinute")); |
+ EXPECT_EQ( |
+ 1, test::NumHistogramSamples("WebRTC.Video.PliPacketsReceivedPerMinute")); |
+ EXPECT_EQ(1, test::NumHistogramSamples( |
+ "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); |
+ |
+ const int kRate = 60 * 2; // Packets per minute with two streams. |
+ |
+ EXPECT_EQ(1 * kRate, test::LastHistogramSample( |
+ "WebRTC.Video.NackPacketsReceivedPerMinute")); |
+ EXPECT_EQ(2 * kRate, test::LastHistogramSample( |
+ "WebRTC.Video.FirPacketsReceivedPerMinute")); |
+ EXPECT_EQ(3 * kRate, test::LastHistogramSample( |
+ "WebRTC.Video.PliPacketsReceivedPerMinute")); |
+ EXPECT_EQ(4 * 100 / 5, |
+ test::LastHistogramSample( |
+ "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); |
+ |
+ // New start time but same counter values. |
+ proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); |
+ proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); |
+ |
+ fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds); |
+ |
+ counters.nack_packets += 1 * metrics::kMinRunTimeInSeconds; |
+ counters.fir_packets += 2 * metrics::kMinRunTimeInSeconds; |
+ counters.pli_packets += 3 * metrics::kMinRunTimeInSeconds; |
+ counters.unique_nack_requests += 4 * metrics::kMinRunTimeInSeconds; |
+ counters.nack_requests += 5 * metrics::kMinRunTimeInSeconds; |
+ |
+ proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); |
+ proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); |
+ |
+ SetUp(); // Reset stats proxy also causes histograms to be reported. |
+ |
+ EXPECT_EQ(1, test::NumHistogramSamples( |
+ "WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute")); |
+ EXPECT_EQ(1, test::NumHistogramSamples( |
+ "WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute")); |
+ EXPECT_EQ(1, test::NumHistogramSamples( |
+ "WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute")); |
+ EXPECT_EQ( |
+ 1, test::NumHistogramSamples( |
+ "WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent")); |
+ |
+ EXPECT_EQ(1 * kRate, |
+ test::LastHistogramSample( |
+ "WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute")); |
+ EXPECT_EQ(2 * kRate, |
+ test::LastHistogramSample( |
+ "WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute")); |
+ EXPECT_EQ(3 * kRate, |
+ test::LastHistogramSample( |
+ "WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute")); |
+ EXPECT_EQ( |
+ 4 * 100 / 5, |
+ test::LastHistogramSample( |
+ "WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent")); |
+} |
+ |
} // namespace webrtc |