Wire up statistics in video receive stream of new API

This CL includes Call tests that test both send and receive sides.

BUG=2235
R=mflodman@webrtc.org, pbos@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/8049004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5499 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video/send_statistics_proxy_unittest.cc b/webrtc/video/send_statistics_proxy_unittest.cc
index 6e92192..ed74a4f 100644
--- a/webrtc/video/send_statistics_proxy_unittest.cc
+++ b/webrtc/video/send_statistics_proxy_unittest.cc
@@ -19,9 +19,8 @@
 
 namespace webrtc {
 
-class SendStatisticsProxyTest
-    : public ::testing::Test,
-      protected SendStatisticsProxy::StreamStatsProvider {
+class SendStatisticsProxyTest : public ::testing::Test,
+                                protected SendStatisticsProxy::StatsProvider {
  public:
   SendStatisticsProxyTest() : avg_delay_ms_(0), max_delay_ms_(0) {}
   virtual ~SendStatisticsProxyTest() {}
@@ -49,6 +48,45 @@
 
   virtual std::string GetCName() { return cname_; }
 
+  void ExpectEqual(VideoSendStream::Stats one, VideoSendStream::Stats other) {
+    EXPECT_EQ(one.avg_delay_ms, other.avg_delay_ms);
+    EXPECT_EQ(one.input_frame_rate, other.input_frame_rate);
+    EXPECT_EQ(one.encode_frame_rate, other.encode_frame_rate);
+    EXPECT_EQ(one.avg_delay_ms, other.avg_delay_ms);
+    EXPECT_EQ(one.max_delay_ms, other.max_delay_ms);
+    EXPECT_EQ(one.c_name, other.c_name);
+
+    EXPECT_EQ(one.substreams.size(), other.substreams.size());
+    for (std::map<uint32_t, StreamStats>::const_iterator it =
+             one.substreams.begin();
+         it != one.substreams.end();
+         ++it) {
+      std::map<uint32_t, StreamStats>::const_iterator corresponding_it =
+          other.substreams.find(it->first);
+      ASSERT_TRUE(corresponding_it != other.substreams.end());
+      const StreamStats& a = it->second;
+      const StreamStats& b = corresponding_it->second;
+
+      EXPECT_EQ(a.key_frames, b.key_frames);
+      EXPECT_EQ(a.delta_frames, b.delta_frames);
+      EXPECT_EQ(a.bitrate_bps, b.bitrate_bps);
+
+      EXPECT_EQ(a.rtp_stats.bytes, b.rtp_stats.bytes);
+      EXPECT_EQ(a.rtp_stats.header_bytes, b.rtp_stats.header_bytes);
+      EXPECT_EQ(a.rtp_stats.padding_bytes, b.rtp_stats.padding_bytes);
+      EXPECT_EQ(a.rtp_stats.packets, b.rtp_stats.packets);
+      EXPECT_EQ(a.rtp_stats.retransmitted_packets,
+                b.rtp_stats.retransmitted_packets);
+      EXPECT_EQ(a.rtp_stats.fec_packets, b.rtp_stats.fec_packets);
+
+      EXPECT_EQ(a.rtcp_stats.fraction_lost, b.rtcp_stats.fraction_lost);
+      EXPECT_EQ(a.rtcp_stats.cumulative_lost, b.rtcp_stats.cumulative_lost);
+      EXPECT_EQ(a.rtcp_stats.extended_max_sequence_number,
+                b.rtcp_stats.extended_max_sequence_number);
+      EXPECT_EQ(a.rtcp_stats.jitter, b.rtcp_stats.jitter);
+    }
+  }
+
   scoped_ptr<SendStatisticsProxy> statistics_proxy_;
   VideoSendStream::Config config_;
   int avg_delay_ms_;
@@ -76,7 +114,7 @@
   }
 
   VideoSendStream::Stats stats = statistics_proxy_->GetStats();
-  EXPECT_EQ(expected_, stats);
+  ExpectEqual(expected_, stats);
 }
 
 TEST_F(SendStatisticsProxyTest, FrameRates) {
@@ -109,7 +147,7 @@
   }
 
   VideoSendStream::Stats stats = statistics_proxy_->GetStats();
-  EXPECT_EQ(expected_, stats);
+  ExpectEqual(expected_, stats);
 }
 
 TEST_F(SendStatisticsProxyTest, DataCounters) {
@@ -131,7 +169,7 @@
   }
 
   VideoSendStream::Stats stats = statistics_proxy_->GetStats();
-  EXPECT_EQ(expected_, stats);
+  ExpectEqual(expected_, stats);
 }
 
 TEST_F(SendStatisticsProxyTest, Bitrate) {
@@ -147,7 +185,7 @@
   }
 
   VideoSendStream::Stats stats = statistics_proxy_->GetStats();
-  EXPECT_EQ(expected_, stats);
+  ExpectEqual(expected_, stats);
 }
 
 TEST_F(SendStatisticsProxyTest, StreamStats) {