| 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 74186f040c1420fd19b13c9eba26e893e3c11b6f..dc944d59e3b70eca876d195e5c1447421b95c56e 100644
|
| --- a/webrtc/video/receive_statistics_proxy_unittest.cc
|
| +++ b/webrtc/video/receive_statistics_proxy_unittest.cc
|
| @@ -12,6 +12,7 @@
|
|
|
| #include <memory>
|
|
|
| +#include "webrtc/modules/video_coding/include/video_codec_interface.h"
|
| #include "webrtc/system_wrappers/include/metrics.h"
|
| #include "webrtc/system_wrappers/include/metrics_default.h"
|
| #include "webrtc/test/gtest.h"
|
| @@ -66,6 +67,13 @@ TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsIncomingPayloadType) {
|
| EXPECT_EQ(kPayloadType, statistics_proxy_->GetStats().current_payload_type);
|
| }
|
|
|
| +TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsDecoderImplementationName) {
|
| + const char* kName = "decoderName";
|
| + statistics_proxy_->OnDecoderImplementationName(kName);
|
| + EXPECT_STREQ(
|
| + kName, statistics_proxy_->GetStats().decoder_implementation_name.c_str());
|
| +}
|
| +
|
| TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsIncomingRate) {
|
| const int kFramerate = 28;
|
| const int kBitrateBps = 311000;
|
| @@ -96,12 +104,80 @@ TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsDecodeTimingStats) {
|
| EXPECT_EQ(kRenderDelayMs, stats.render_delay_ms);
|
| }
|
|
|
| +TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsRtcpPacketTypeCounts) {
|
| + const uint32_t kFirPackets = 33;
|
| + const uint32_t kPliPackets = 44;
|
| + const uint32_t kNackPackets = 55;
|
| + RtcpPacketTypeCounter counter;
|
| + counter.fir_packets = kFirPackets;
|
| + counter.pli_packets = kPliPackets;
|
| + counter.nack_packets = kNackPackets;
|
| + statistics_proxy_->RtcpPacketTypesCounterUpdated(kRemoteSsrc, counter);
|
| + VideoReceiveStream::Stats stats = statistics_proxy_->GetStats();
|
| + EXPECT_EQ(kFirPackets, stats.rtcp_packet_type_counts.fir_packets);
|
| + EXPECT_EQ(kPliPackets, stats.rtcp_packet_type_counts.pli_packets);
|
| + EXPECT_EQ(kNackPackets, stats.rtcp_packet_type_counts.nack_packets);
|
| +}
|
| +
|
| +TEST_F(ReceiveStatisticsProxyTest,
|
| + GetStatsReportsNoRtcpPacketTypeCountsForUnknownSsrc) {
|
| + RtcpPacketTypeCounter counter;
|
| + counter.fir_packets = 33;
|
| + statistics_proxy_->RtcpPacketTypesCounterUpdated(kRemoteSsrc + 1, counter);
|
| + EXPECT_EQ(0u,
|
| + statistics_proxy_->GetStats().rtcp_packet_type_counts.fir_packets);
|
| +}
|
| +
|
| +TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsFrameCounts) {
|
| + const int kKeyFrames = 3;
|
| + const int kDeltaFrames = 22;
|
| + FrameCounts frame_counts;
|
| + frame_counts.key_frames = kKeyFrames;
|
| + frame_counts.delta_frames = kDeltaFrames;
|
| + statistics_proxy_->OnFrameCountsUpdated(frame_counts);
|
| + VideoReceiveStream::Stats stats = statistics_proxy_->GetStats();
|
| + EXPECT_EQ(kKeyFrames, stats.frame_counts.key_frames);
|
| + EXPECT_EQ(kDeltaFrames, stats.frame_counts.delta_frames);
|
| +}
|
| +
|
| TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsDiscardedPackets) {
|
| const int kDiscardedPackets = 12;
|
| statistics_proxy_->OnDiscardedPacketsUpdated(kDiscardedPackets);
|
| EXPECT_EQ(kDiscardedPackets, statistics_proxy_->GetStats().discarded_packets);
|
| }
|
|
|
| +TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsRtcpStats) {
|
| + const uint8_t kFracLost = 0;
|
| + const uint32_t kCumLost = 1;
|
| + const uint32_t kExtSeqNum = 10;
|
| + const uint32_t kJitter = 4;
|
| +
|
| + RtcpStatistics rtcp_stats;
|
| + rtcp_stats.fraction_lost = kFracLost;
|
| + rtcp_stats.cumulative_lost = kCumLost;
|
| + rtcp_stats.extended_max_sequence_number = kExtSeqNum;
|
| + rtcp_stats.jitter = kJitter;
|
| + statistics_proxy_->StatisticsUpdated(rtcp_stats, kRemoteSsrc);
|
| +
|
| + VideoReceiveStream::Stats stats = statistics_proxy_->GetStats();
|
| + EXPECT_EQ(kFracLost, stats.rtcp_stats.fraction_lost);
|
| + EXPECT_EQ(kCumLost, stats.rtcp_stats.cumulative_lost);
|
| + EXPECT_EQ(kExtSeqNum, stats.rtcp_stats.extended_max_sequence_number);
|
| + EXPECT_EQ(kJitter, stats.rtcp_stats.jitter);
|
| +}
|
| +
|
| +TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsCName) {
|
| + const char* kName = "cName";
|
| + statistics_proxy_->CNameChanged(kName, kRemoteSsrc);
|
| + EXPECT_STREQ(kName, statistics_proxy_->GetStats().c_name.c_str());
|
| +}
|
| +
|
| +TEST_F(ReceiveStatisticsProxyTest, GetStatsReportsNoCNameForUnknownSsrc) {
|
| + const char* kName = "cName";
|
| + statistics_proxy_->CNameChanged(kName, kRemoteSsrc + 1);
|
| + EXPECT_STREQ("", statistics_proxy_->GetStats().c_name.c_str());
|
| +}
|
| +
|
| TEST_F(ReceiveStatisticsProxyTest, LifetimeHistogramIsUpdated) {
|
| const int64_t kTimeSec = 3;
|
| fake_clock_.AdvanceTimeMilliseconds(kTimeSec * 1000);
|
| @@ -202,4 +278,44 @@ TEST_F(ReceiveStatisticsProxyTest, RtpToNtpFrequencyOffsetHistogramIsUpdated) {
|
| EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.RtpToNtpFreqOffsetInKhz", 3));
|
| }
|
|
|
| +TEST_F(ReceiveStatisticsProxyTest, Vp8QpHistogramIsUpdated) {
|
| + const int kQp = 22;
|
| + EncodedImage encoded_image;
|
| + encoded_image.qp_ = kQp;
|
| + CodecSpecificInfo codec_info;
|
| + codec_info.codecType = kVideoCodecVP8;
|
| +
|
| + for (int i = 0; i < kMinRequiredSamples; ++i)
|
| + statistics_proxy_->OnPreDecode(encoded_image, &codec_info);
|
| +
|
| + statistics_proxy_.reset();
|
| + EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Decoded.Vp8.Qp"));
|
| + EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Decoded.Vp8.Qp", kQp));
|
| +}
|
| +
|
| +TEST_F(ReceiveStatisticsProxyTest, Vp8QpHistogramIsNotUpdatedForTooFewSamples) {
|
| + EncodedImage encoded_image;
|
| + encoded_image.qp_ = 22;
|
| + CodecSpecificInfo codec_info;
|
| + codec_info.codecType = kVideoCodecVP8;
|
| +
|
| + for (int i = 0; i < kMinRequiredSamples - 1; ++i)
|
| + statistics_proxy_->OnPreDecode(encoded_image, &codec_info);
|
| +
|
| + statistics_proxy_.reset();
|
| + EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.Decoded.Vp8.Qp"));
|
| +}
|
| +
|
| +TEST_F(ReceiveStatisticsProxyTest, Vp8QpHistogramIsNotUpdatedIfNoQpValue) {
|
| + EncodedImage encoded_image;
|
| + CodecSpecificInfo codec_info;
|
| + codec_info.codecType = kVideoCodecVP8;
|
| +
|
| + for (int i = 0; i < kMinRequiredSamples; ++i)
|
| + statistics_proxy_->OnPreDecode(encoded_image, &codec_info);
|
| +
|
| + statistics_proxy_.reset();
|
| + EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.Decoded.Vp8.Qp"));
|
| +}
|
| +
|
| } // namespace webrtc
|
|
|