Wire up bandwidth stats to the new API and webrtcvideoengine2.

Adds stats to verify bandwidth and pacer stats.

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

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7634 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video/send_statistics_proxy_unittest.cc b/webrtc/video/send_statistics_proxy_unittest.cc
index f768452..d7750f8 100644
--- a/webrtc/video/send_statistics_proxy_unittest.cc
+++ b/webrtc/video/send_statistics_proxy_unittest.cc
@@ -44,22 +44,23 @@
   void ExpectEqual(VideoSendStream::Stats one, VideoSendStream::Stats other) {
     EXPECT_EQ(one.input_frame_rate, other.input_frame_rate);
     EXPECT_EQ(one.encode_frame_rate, other.encode_frame_rate);
+    EXPECT_EQ(one.media_bitrate_bps, other.media_bitrate_bps);
     EXPECT_EQ(one.suspended, other.suspended);
 
     EXPECT_EQ(one.substreams.size(), other.substreams.size());
-    for (std::map<uint32_t, StreamStats>::const_iterator it =
+    for (std::map<uint32_t, SsrcStats>::const_iterator it =
              one.substreams.begin();
          it != one.substreams.end();
          ++it) {
-      std::map<uint32_t, StreamStats>::const_iterator corresponding_it =
+      std::map<uint32_t, SsrcStats>::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;
+      const SsrcStats& a = it->second;
+      const SsrcStats& 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.total_bitrate_bps, b.total_bitrate_bps);
       EXPECT_EQ(a.avg_delay_ms, b.avg_delay_ms);
       EXPECT_EQ(a.max_delay_ms, b.max_delay_ms);
 
@@ -84,7 +85,7 @@
   int avg_delay_ms_;
   int max_delay_ms_;
   VideoSendStream::Stats expected_;
-  typedef std::map<uint32_t, StreamStats>::const_iterator StreamIterator;
+  typedef std::map<uint32_t, SsrcStats>::const_iterator StreamIterator;
 };
 
 TEST_F(SendStatisticsProxyTest, RtcpStatistics) {
@@ -93,7 +94,7 @@
        it != config_.rtp.ssrcs.end();
        ++it) {
     const uint32_t ssrc = *it;
-    StreamStats& ssrc_stats = expected_.substreams[ssrc];
+    SsrcStats& ssrc_stats = expected_.substreams[ssrc];
 
     // Add statistics with some arbitrary, but unique, numbers.
     uint32_t offset = ssrc * sizeof(RtcpStatistics);
@@ -107,7 +108,7 @@
        it != config_.rtp.rtx.ssrcs.end();
        ++it) {
     const uint32_t ssrc = *it;
-    StreamStats& ssrc_stats = expected_.substreams[ssrc];
+    SsrcStats& ssrc_stats = expected_.substreams[ssrc];
 
     // Add statistics with some arbitrary, but unique, numbers.
     uint32_t offset = ssrc * sizeof(RtcpStatistics);
@@ -121,17 +122,25 @@
   ExpectEqual(expected_, stats);
 }
 
-TEST_F(SendStatisticsProxyTest, FrameRates) {
+TEST_F(SendStatisticsProxyTest, CaptureFramerate) {
   const int capture_fps = 31;
-  const int encode_fps = 29;
 
   ViECaptureObserver* capture_observer = statistics_proxy_.get();
   capture_observer->CapturedFrameRate(0, capture_fps);
-  ViEEncoderObserver* encoder_observer = statistics_proxy_.get();
-  encoder_observer->OutgoingRate(0, encode_fps, 0);
 
   VideoSendStream::Stats stats = statistics_proxy_->GetStats();
   EXPECT_EQ(capture_fps, stats.input_frame_rate);
+}
+
+TEST_F(SendStatisticsProxyTest, EncodedBitrateAndFramerate) {
+  const int media_bitrate_bps = 500;
+  const int encode_fps = 29;
+
+  ViEEncoderObserver* encoder_observer = statistics_proxy_.get();
+  encoder_observer->OutgoingRate(0, encode_fps, media_bitrate_bps);
+
+  VideoSendStream::Stats stats = statistics_proxy_->GetStats();
+  EXPECT_EQ(media_bitrate_bps, stats.media_bitrate_bps);
   EXPECT_EQ(encode_fps, stats.encode_frame_rate);
 }
 
@@ -156,8 +165,8 @@
        ++it) {
     const uint32_t ssrc = *it;
     // Add statistics with some arbitrary, but unique, numbers.
-    StreamStats& stats = expected_.substreams[ssrc];
-    uint32_t offset = ssrc * sizeof(StreamStats);
+    SsrcStats& stats = expected_.substreams[ssrc];
+    uint32_t offset = ssrc * sizeof(SsrcStats);
     stats.key_frames = offset;
     stats.delta_frames = offset + 1;
     observer->FrameCountUpdated(kVideoFrameKey, stats.key_frames, ssrc);
@@ -168,8 +177,8 @@
        ++it) {
     const uint32_t ssrc = *it;
     // Add statistics with some arbitrary, but unique, numbers.
-    StreamStats& stats = expected_.substreams[ssrc];
-    uint32_t offset = ssrc * sizeof(StreamStats);
+    SsrcStats& stats = expected_.substreams[ssrc];
+    uint32_t offset = ssrc * sizeof(SsrcStats);
     stats.key_frames = offset;
     stats.delta_frames = offset + 1;
     observer->FrameCountUpdated(kVideoFrameKey, stats.key_frames, ssrc);
@@ -223,21 +232,27 @@
        it != config_.rtp.ssrcs.end();
        ++it) {
     const uint32_t ssrc = *it;
-    BitrateStatistics bitrate;
+    BitrateStatistics total;
+    BitrateStatistics retransmit;
     // Use ssrc as bitrate_bps to get a unique value for each stream.
-    bitrate.bitrate_bps = ssrc;
-    observer->Notify(bitrate, ssrc);
-    expected_.substreams[ssrc].bitrate_bps = ssrc;
+    total.bitrate_bps = ssrc;
+    retransmit.bitrate_bps = ssrc + 1;
+    observer->Notify(total, retransmit, ssrc);
+    expected_.substreams[ssrc].total_bitrate_bps = total.bitrate_bps;
+    expected_.substreams[ssrc].retransmit_bitrate_bps = retransmit.bitrate_bps;
   }
   for (std::vector<uint32_t>::const_iterator it = config_.rtp.rtx.ssrcs.begin();
        it != config_.rtp.rtx.ssrcs.end();
        ++it) {
     const uint32_t ssrc = *it;
-    BitrateStatistics bitrate;
+    BitrateStatistics total;
+    BitrateStatistics retransmit;
     // Use ssrc as bitrate_bps to get a unique value for each stream.
-    bitrate.bitrate_bps = ssrc;
-    observer->Notify(bitrate, ssrc);
-    expected_.substreams[ssrc].bitrate_bps = ssrc;
+    total.bitrate_bps = ssrc;
+    retransmit.bitrate_bps = ssrc + 1;
+    observer->Notify(total, retransmit, ssrc);
+    expected_.substreams[ssrc].total_bitrate_bps = total.bitrate_bps;
+    expected_.substreams[ssrc].retransmit_bitrate_bps = retransmit.bitrate_bps;
   }
 
   VideoSendStream::Stats stats = statistics_proxy_->GetStats();
@@ -292,9 +307,10 @@
   rtp_callback->DataCountersUpdated(rtp_stats, exluded_ssrc);
 
   // From BitrateStatisticsObserver.
-  BitrateStatistics bitrate;
+  BitrateStatistics total;
+  BitrateStatistics retransmit;
   BitrateStatisticsObserver* bitrate_observer = statistics_proxy_.get();
-  bitrate_observer->Notify(bitrate, exluded_ssrc);
+  bitrate_observer->Notify(total, retransmit, exluded_ssrc);
 
   // From FrameCountObserver.
   FrameCountObserver* fps_observer = statistics_proxy_.get();