Chromium Code Reviews| 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 |