Fixes a bug in the simulation framework where the time offset is accumulating as the packet trace is repeated, causing increasingly large gaps with no packets being transmitted.

R=solenberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@5650 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/modules/remote_bitrate_estimator/test/bwe_test_framework.cc b/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
index 546ae2c..86506fb 100644
--- a/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
+++ b/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
@@ -335,6 +335,7 @@
 TraceBasedDeliveryFilter::TraceBasedDeliveryFilter(
     PacketProcessorListener* listener)
     : PacketProcessor(listener),
+      current_offset_us_(0),
       delivery_times_us_(),
       next_delivery_it_(),
       local_time_us_(-1),
@@ -345,6 +346,7 @@
     PacketProcessorListener* listener,
     const std::string& name)
     : PacketProcessor(listener),
+      current_offset_us_(0),
       delivery_times_us_(),
       next_delivery_it_(),
       local_time_us_(-1),
@@ -409,8 +411,9 @@
       // When the trace wraps we allow two packets to be sent back-to-back.
       for (TimeList::iterator it = delivery_times_us_.begin();
            it != delivery_times_us_.end(); ++it) {
-        *it += local_time_us_;
+        *it += local_time_us_ - current_offset_us_;
       }
+      current_offset_us_ += local_time_us_ - current_offset_us_;
       next_delivery_it_ = delivery_times_us_.begin();
     }
   }
diff --git a/modules/remote_bitrate_estimator/test/bwe_test_framework.h b/modules/remote_bitrate_estimator/test/bwe_test_framework.h
index ddddd74..f5bd326 100644
--- a/modules/remote_bitrate_estimator/test/bwe_test_framework.h
+++ b/modules/remote_bitrate_estimator/test/bwe_test_framework.h
@@ -312,6 +312,7 @@
   void ProceedToNextSlot();
 
   typedef std::vector<int64_t> TimeList;
+  int64_t current_offset_us_;
   TimeList delivery_times_us_;
   TimeList::const_iterator next_delivery_it_;
   int64_t local_time_us_;
diff --git a/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc b/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
index 1ef421a..31bb27e 100644
--- a/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
+++ b/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
@@ -709,12 +709,12 @@
   TestChoke(&filter, 100, 100, 6);
 }
 
-TEST_F(BweTestFramework_ChokeFilterTest, ShortTraceWrap) {
-  // According to the input file 10 packets should be transmitted within
-  // 140 milliseconds (at the wrapping point two packets are sent back to back).
+TEST_F(BweTestFramework_ChokeFilterTest, ShortTraceTwoWraps) {
+  // According to the input file 19 packets should be transmitted within
+  // 280 milliseconds (at the wrapping point two packets are sent back to back).
   TraceBasedDeliveryFilter filter(NULL);
   ASSERT_TRUE(filter.Init(test::ResourcePath("synthetic-trace", "rx")));
-  TestChoke(&filter, 140, 100, 10);
+  TestChoke(&filter, 280, 100, 19);
 }
 
 void TestVideoSender(VideoSender* sender, int64_t run_for_ms,