From 45846977f962cb06a8dc33b6b39bcb28c321f21d Mon Sep 17 00:00:00 2001 From: "stefan@webrtc.org" Date: Thu, 6 Mar 2014 15:46:46 +0000 Subject: [PATCH] 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@5650 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../remote_bitrate_estimator/test/bwe_test_framework.cc | 5 ++++- .../remote_bitrate_estimator/test/bwe_test_framework.h | 1 + .../test/bwe_test_framework_unittest.cc | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc index 546ae2c400..86506fb1b7 100644 --- a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc +++ b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc @@ -335,6 +335,7 @@ void ChokeFilter::RunFor(int64_t /*time_ms*/, Packets* in_out) { TraceBasedDeliveryFilter::TraceBasedDeliveryFilter( PacketProcessorListener* listener) : PacketProcessor(listener), + current_offset_us_(0), delivery_times_us_(), next_delivery_it_(), local_time_us_(-1), @@ -345,6 +346,7 @@ TraceBasedDeliveryFilter::TraceBasedDeliveryFilter( 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 @@ void TraceBasedDeliveryFilter::ProceedToNextSlot() { // 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/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.h b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.h index ddddd7499b..f5bd326a62 100644 --- a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.h +++ b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.h @@ -312,6 +312,7 @@ class TraceBasedDeliveryFilter : public PacketProcessor { void ProceedToNextSlot(); typedef std::vector TimeList; + int64_t current_offset_us_; TimeList delivery_times_us_; TimeList::const_iterator next_delivery_it_; int64_t local_time_us_; diff --git a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc index 1ef421ac43..31bb27e384 100644 --- a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc +++ b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc @@ -709,12 +709,12 @@ TEST_F(BweTestFramework_ChokeFilterTest, ShortTrace) { 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,