| 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 66856a70ade72fff3c42b9a486f607e075b4c9fb..74186f040c1420fd19b13c9eba26e893e3c11b6f 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/system_wrappers/include/metrics.h" | 
| #include "webrtc/system_wrappers/include/metrics_default.h" | 
| #include "webrtc/test/gtest.h" | 
|  | 
| @@ -112,6 +113,64 @@ TEST_F(ReceiveStatisticsProxyTest, LifetimeHistogramIsUpdated) { | 
| kTimeSec)); | 
| } | 
|  | 
| +TEST_F(ReceiveStatisticsProxyTest, PacketLossHistogramIsUpdated) { | 
| +  const uint32_t kCumLost1 = 1; | 
| +  const uint32_t kExtSeqNum1 = 10; | 
| +  const uint32_t kCumLost2 = 2; | 
| +  const uint32_t kExtSeqNum2 = 20; | 
| + | 
| +  // One report block received. | 
| +  RtcpStatistics rtcp_stats1; | 
| +  rtcp_stats1.cumulative_lost = kCumLost1; | 
| +  rtcp_stats1.extended_max_sequence_number = kExtSeqNum1; | 
| +  statistics_proxy_->StatisticsUpdated(rtcp_stats1, kRemoteSsrc); | 
| + | 
| +  // Two report blocks received. | 
| +  RtcpStatistics rtcp_stats2; | 
| +  rtcp_stats2.cumulative_lost = kCumLost2; | 
| +  rtcp_stats2.extended_max_sequence_number = kExtSeqNum2; | 
| +  statistics_proxy_->StatisticsUpdated(rtcp_stats2, kRemoteSsrc); | 
| + | 
| +  // Two received report blocks but min run time has not passed. | 
| +  fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1); | 
| +  SetUp();  // Reset stat proxy causes histograms to be updated. | 
| +  EXPECT_EQ(0, | 
| +            metrics::NumSamples("WebRTC.Video.ReceivedPacketsLostInPercent")); | 
| + | 
| +  // Two report blocks received. | 
| +  statistics_proxy_->StatisticsUpdated(rtcp_stats1, kRemoteSsrc); | 
| +  statistics_proxy_->StatisticsUpdated(rtcp_stats2, kRemoteSsrc); | 
| + | 
| +  // Two received report blocks and min run time has passed. | 
| +  fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); | 
| +  SetUp(); | 
| +  EXPECT_EQ(1, | 
| +            metrics::NumSamples("WebRTC.Video.ReceivedPacketsLostInPercent")); | 
| +  EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.ReceivedPacketsLostInPercent", | 
| +                                  (kCumLost2 - kCumLost1) * 100 / | 
| +                                      (kExtSeqNum2 - kExtSeqNum1))); | 
| +} | 
| + | 
| +TEST_F(ReceiveStatisticsProxyTest, | 
| +       PacketLossHistogramIsNotUpdatedIfLessThanTwoReportBlocksAreReceived) { | 
| +  RtcpStatistics rtcp_stats1; | 
| +  rtcp_stats1.cumulative_lost = 1; | 
| +  rtcp_stats1.extended_max_sequence_number = 10; | 
| + | 
| +  // Min run time has passed but no received report block. | 
| +  fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); | 
| +  SetUp();  // Reset stat proxy causes histograms to be updated. | 
| +  EXPECT_EQ(0, | 
| +            metrics::NumSamples("WebRTC.Video.ReceivedPacketsLostInPercent")); | 
| + | 
| +  // Min run time has passed but only one received report block. | 
| +  statistics_proxy_->StatisticsUpdated(rtcp_stats1, kRemoteSsrc); | 
| +  fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); | 
| +  SetUp(); | 
| +  EXPECT_EQ(0, | 
| +            metrics::NumSamples("WebRTC.Video.ReceivedPacketsLostInPercent")); | 
| +} | 
| + | 
| TEST_F(ReceiveStatisticsProxyTest, AvSyncOffsetHistogramIsUpdated) { | 
| const int64_t kSyncOffsetMs = 22; | 
| const double kFreqKhz = 90.0; | 
|  |