(Auto)update libjingle 68891947-> 68893961

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6383 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/base/videoengine_unittest.h b/talk/media/base/videoengine_unittest.h
index 54b5500..382fb77 100644
--- a/talk/media/base/videoengine_unittest.h
+++ b/talk/media/base/videoengine_unittest.h
@@ -792,14 +792,45 @@
     EXPECT_FRAME_WAIT(3, codec.width, codec.height, kTimeout);
     EXPECT_EQ(2, renderer_.num_set_sizes());
   }
+  void SendReceiveManyAndGetStats(const cricket::VideoCodec& codec,
+                                  int duration_sec, int fps) {
+    EXPECT_TRUE(SetOneCodec(codec));
+    EXPECT_TRUE(SetSend(true));
+    EXPECT_TRUE(channel_->SetRender(true));
+    EXPECT_EQ(0, renderer_.num_rendered_frames());
+    for (int i = 0; i < duration_sec; ++i) {
+      for (int frame = 1; frame <= fps; ++frame) {
+        EXPECT_TRUE(WaitAndSendFrame(1000 / fps));
+        EXPECT_FRAME_WAIT(frame + i * fps, codec.width, codec.height, kTimeout);
+      }
+      cricket::VideoMediaInfo info;
+      EXPECT_TRUE(channel_->GetStats(cricket::StatsOptions(), &info));
+      // For webrtc, |framerate_sent| and |framerate_rcvd| depend on periodic
+      // callbacks (1 sec).
+      // Received |fraction_lost| and |packets_lost| are from sent RTCP packet.
+      // One sent packet needed (sent about once per second).
+      // |framerate_input|, |framerate_decoded| and |framerate_output| are using
+      // RateTracker. RateTracker needs to be called twice (with >1 second in
+      // b/w calls) before a framerate is calculated.
+      // Therefore insert frames (and call GetStats each sec) for a few seconds
+      // before testing stats.
+    }
+    talk_base::scoped_ptr<const talk_base::Buffer> p(GetRtpPacket(0));
+    EXPECT_EQ(codec.id, GetPayloadType(p.get()));
+  }
+
   // Test that stats work properly for a 1-1 call.
   void GetStats() {
-    SendAndReceive(DefaultCodec());
+    const int kDurationSec = 3;
+    const int kFps = 10;
+    SendReceiveManyAndGetStats(DefaultCodec(), kDurationSec, kFps);
+
     cricket::VideoMediaInfo info;
     EXPECT_TRUE(channel_->GetStats(cricket::StatsOptions(), &info));
 
     ASSERT_EQ(1U, info.senders.size());
     // TODO(whyuan): bytes_sent and bytes_rcvd are different. Are both payload?
+    // For webrtc, bytes_sent does not include the RTP header length.
     EXPECT_GT(info.senders[0].bytes_sent, 0);
     EXPECT_EQ(NumRtpPackets(), info.senders[0].packets_sent);
     EXPECT_EQ(0.0, info.senders[0].fraction_lost);
@@ -819,7 +850,8 @@
     EXPECT_EQ(NumRtpPackets(), info.receivers[0].packets_rcvd);
     EXPECT_EQ(0.0, info.receivers[0].fraction_lost);
     EXPECT_EQ(0, info.receivers[0].packets_lost);
-    EXPECT_EQ(0, info.receivers[0].packets_concealed);
+    // TODO(asapersson): Not set for webrtc. Handle missing stats.
+    // EXPECT_EQ(0, info.receivers[0].packets_concealed);
     EXPECT_EQ(0, info.receivers[0].firs_sent);
     EXPECT_EQ(0, info.receivers[0].plis_sent);
     EXPECT_EQ(0, info.receivers[0].nacks_sent);
@@ -860,16 +892,11 @@
 
     ASSERT_EQ(1U, info.senders.size());
     // TODO(whyuan): bytes_sent and bytes_rcvd are different. Are both payload?
+    // For webrtc, bytes_sent does not include the RTP header length.
     EXPECT_GT(info.senders[0].bytes_sent, 0);
     EXPECT_EQ(NumRtpPackets(), info.senders[0].packets_sent);
-    EXPECT_EQ(0.0, info.senders[0].fraction_lost);
-    EXPECT_EQ(0, info.senders[0].firs_rcvd);
-    EXPECT_EQ(0, info.senders[0].plis_rcvd);
-    EXPECT_EQ(0, info.senders[0].nacks_rcvd);
     EXPECT_EQ(DefaultCodec().width, info.senders[0].send_frame_width);
     EXPECT_EQ(DefaultCodec().height, info.senders[0].send_frame_height);
-    EXPECT_GT(info.senders[0].framerate_input, 0);
-    EXPECT_GT(info.senders[0].framerate_sent, 0);
 
     ASSERT_EQ(2U, info.receivers.size());
     for (size_t i = 0; i < info.receivers.size(); ++i) {
@@ -877,17 +904,8 @@
       EXPECT_EQ(i + 1, info.receivers[i].ssrcs()[0]);
       EXPECT_EQ(NumRtpBytes(), info.receivers[i].bytes_rcvd);
       EXPECT_EQ(NumRtpPackets(), info.receivers[i].packets_rcvd);
-      EXPECT_EQ(0.0, info.receivers[i].fraction_lost);
-      EXPECT_EQ(0, info.receivers[i].packets_lost);
-      EXPECT_EQ(0, info.receivers[i].packets_concealed);
-      EXPECT_EQ(0, info.receivers[i].firs_sent);
-      EXPECT_EQ(0, info.receivers[i].plis_sent);
-      EXPECT_EQ(0, info.receivers[i].nacks_sent);
       EXPECT_EQ(DefaultCodec().width, info.receivers[i].frame_width);
       EXPECT_EQ(DefaultCodec().height, info.receivers[i].frame_height);
-      EXPECT_GT(info.receivers[i].framerate_rcvd, 0);
-      EXPECT_GT(info.receivers[i].framerate_decoded, 0);
-      EXPECT_GT(info.receivers[i].framerate_output, 0);
     }
   }
   // Test that stats work properly for a conf call with multiple send streams.
diff --git a/talk/media/webrtc/webrtcvideoengine_unittest.cc b/talk/media/webrtc/webrtcvideoengine_unittest.cc
index da8e62d..da0c932 100644
--- a/talk/media/webrtc/webrtcvideoengine_unittest.cc
+++ b/talk/media/webrtc/webrtcvideoengine_unittest.cc
@@ -2323,13 +2323,19 @@
   EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout);
 }
 
-// TODO(juberti): Fix this test to tolerate missing stats.
+#ifdef USE_WEBRTC_DEV_BRANCH
+TEST_F(WebRtcVideoMediaChannelTest, GetStats) {
+#else
 TEST_F(WebRtcVideoMediaChannelTest, DISABLED_GetStats) {
+#endif
   Base::GetStats();
 }
 
-// TODO(juberti): Fix this test to tolerate missing stats.
+#ifdef USE_WEBRTC_DEV_BRANCH
+TEST_F(WebRtcVideoMediaChannelTest, GetStatsMultipleRecvStreams) {
+#else
 TEST_F(WebRtcVideoMediaChannelTest, DISABLED_GetStatsMultipleRecvStreams) {
+#endif
   Base::GetStatsMultipleRecvStreams();
 }