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

Unified Diff: webrtc/video/receive_statistics_proxy_unittest.cc

Issue 2873303002: Add some unit tests to ReceiveStatsticsProxy. (Closed)
Patch Set: rebase Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/video/receive_statistics_proxy_unittest.cc
diff --git a/webrtc/video/receive_statistics_proxy_unittest.cc b/webrtc/video/receive_statistics_proxy_unittest.cc
index 36f5346900dc40e3aae5667a46572b8d6d8780e8..a077e33ed87e365ca65be5c61a0130f7e042519a 100644
--- a/webrtc/video/receive_statistics_proxy_unittest.cc
+++ b/webrtc/video/receive_statistics_proxy_unittest.cc
@@ -10,6 +10,7 @@
#include "webrtc/video/receive_statistics_proxy.h"
+#include <limits>
#include <memory>
#include "webrtc/api/video/video_frame.h"
@@ -46,6 +47,18 @@ class ReceiveStatisticsProxyTest : public ::testing::Test {
return config;
}
+ void InsertFirstRtpPacket(uint32_t ssrc) {
+ StreamDataCounters counters;
+ counters.first_packet_time_ms = fake_clock_.TimeInMilliseconds();
+ statistics_proxy_->DataCountersUpdated(counters, ssrc);
+ }
+
+ VideoFrame CreateFrame(int width, int height) {
+ VideoFrame frame(I420Buffer::Create(width, height), 0, 0, kVideoRotation_0);
+ frame.set_ntp_time_ms(fake_clock_.CurrentNtpInMilliseconds());
+ return frame;
+ }
+
SimulatedClock fake_clock_;
const VideoReceiveStream::Config config_;
std::unique_ptr<ReceiveStatisticsProxy> statistics_proxy_;
@@ -331,6 +344,15 @@ TEST_F(ReceiveStatisticsProxyTest,
metrics::NumSamples("WebRTC.Video.ReceivedPacketsLostInPercent"));
}
+TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsAvSyncOffset) {
+ const int64_t kSyncOffsetMs = 22;
+ const double kFreqKhz = 90.0;
+ EXPECT_EQ(std::numeric_limits<int>::max(),
+ statistics_proxy_->GetStats().sync_offset_ms);
+ statistics_proxy_->OnSyncOffsetUpdated(kSyncOffsetMs, kFreqKhz);
+ EXPECT_EQ(kSyncOffsetMs, statistics_proxy_->GetStats().sync_offset_ms);
+}
+
TEST_F(ReceiveStatisticsProxyTest, AvSyncOffsetHistogramIsUpdated) {
const int64_t kSyncOffsetMs = 22;
const double kFreqKhz = 90.0;
@@ -512,4 +534,94 @@ TEST_F(ReceiveStatisticsProxyTest, TimingHistogramsAreUpdated) {
metrics::NumEvents("WebRTC.Video.OnewayDelayInMs", kTargetDelayMs));
}
+TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsReceivedFrameStats) {
+ const int kWidth = 160;
+ const int kHeight = 120;
+ EXPECT_EQ(0, statistics_proxy_->GetStats().width);
+ EXPECT_EQ(0, statistics_proxy_->GetStats().height);
+ EXPECT_EQ(0u, statistics_proxy_->GetStats().frames_rendered);
+
+ statistics_proxy_->OnRenderedFrame(CreateFrame(kWidth, kHeight));
+
+ EXPECT_EQ(kWidth, statistics_proxy_->GetStats().width);
+ EXPECT_EQ(kHeight, statistics_proxy_->GetStats().height);
+ EXPECT_EQ(1u, statistics_proxy_->GetStats().frames_rendered);
+}
+
+TEST_F(ReceiveStatisticsProxyTest,
+ ReceivedFrameHistogramsAreNotUpdatedForTooFewSamples) {
+ const int kWidth = 160;
+ const int kHeight = 120;
+
+ for (int i = 0; i < kMinRequiredSamples - 1; ++i)
+ statistics_proxy_->OnRenderedFrame(CreateFrame(kWidth, kHeight));
+
+ statistics_proxy_.reset();
+ EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.ReceivedWidthInPixels"));
+ EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.ReceivedHeightInPixels"));
+ EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.RenderFramesPerSecond"));
+ EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.RenderSqrtPixelsPerSecond"));
sprang_webrtc 2017/05/11 09:17:57 Should WebRTC.Video.Received(Width|Height)InPixels
åsapersson 2017/05/11 09:50:01 On line 560, 561?
sprang_webrtc 2017/05/11 10:54:58 Right, read too fast. Sorry!
+}
+
+TEST_F(ReceiveStatisticsProxyTest, ReceivedFrameHistogramsAreUpdated) {
+ const int kWidth = 160;
+ const int kHeight = 120;
+
+ for (int i = 0; i < kMinRequiredSamples; ++i)
+ statistics_proxy_->OnRenderedFrame(CreateFrame(kWidth, kHeight));
+
+ statistics_proxy_.reset();
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.ReceivedWidthInPixels"));
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.ReceivedHeightInPixels"));
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.RenderFramesPerSecond"));
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.RenderSqrtPixelsPerSecond"));
+ EXPECT_EQ(1,
+ metrics::NumEvents("WebRTC.Video.ReceivedWidthInPixels", kWidth));
+ EXPECT_EQ(1,
+ metrics::NumEvents("WebRTC.Video.ReceivedHeightInPixels", kHeight));
+}
+
+TEST_F(ReceiveStatisticsProxyTest,
+ RtcpHistogramsNotUpdatedIfMinRuntimeHasNotPassed) {
+ InsertFirstRtpPacket(kRemoteSsrc);
+ fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1);
sprang_webrtc 2017/05/11 09:17:57 nit: add parenthesis around (metrics::kMinRunTimeI
åsapersson 2017/05/11 09:50:00 Done.
+
+ RtcpPacketTypeCounter counter;
+ statistics_proxy_->RtcpPacketTypesCounterUpdated(kRemoteSsrc, counter);
+
+ statistics_proxy_.reset();
+ EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.FirPacketsSentPerMinute"));
+ EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.PliPacketsSentPerMinute"));
+ EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.NackPacketsSentPerMinute"));
+}
+
+TEST_F(ReceiveStatisticsProxyTest, RtcpHistogramsAreUpdated) {
+ InsertFirstRtpPacket(kRemoteSsrc);
+ fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000);
+
+ const uint32_t kFirPackets = 100;
+ const uint32_t kPliPackets = 200;
+ const uint32_t kNackPackets = 300;
+
+ RtcpPacketTypeCounter counter;
+ counter.fir_packets = kFirPackets;
+ counter.pli_packets = kPliPackets;
+ counter.nack_packets = kNackPackets;
+ statistics_proxy_->RtcpPacketTypesCounterUpdated(kRemoteSsrc, counter);
+
+ statistics_proxy_.reset();
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.FirPacketsSentPerMinute"));
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.PliPacketsSentPerMinute"));
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.NackPacketsSentPerMinute"));
+ EXPECT_EQ(
+ 1, metrics::NumEvents("WebRTC.Video.FirPacketsSentPerMinute",
+ kFirPackets * 60 / metrics::kMinRunTimeInSeconds));
+ EXPECT_EQ(
+ 1, metrics::NumEvents("WebRTC.Video.PliPacketsSentPerMinute",
+ kPliPackets * 60 / metrics::kMinRunTimeInSeconds));
+ EXPECT_EQ(
+ 1, metrics::NumEvents("WebRTC.Video.NackPacketsSentPerMinute",
+ kNackPackets * 60 / metrics::kMinRunTimeInSeconds));
+}
+
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698