14b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org/* 24b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 34b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org * 44b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org * Use of this source code is governed by a BSD-style license 54b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org * that can be found in the LICENSE file in the root of the source 64b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org * tree. An additional intellectual property rights grant can be found 74b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org * in the file PATENTS. All contributing project authors may 84b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org * be found in the AUTHORS file in the root of the source tree. 94b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org */ 104b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 11caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org#include <sstream> 12caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 134b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" 14cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org#include "webrtc/modules/remote_bitrate_estimator/test/bwe_test.h" 15ef6a602db36bf9d4fc7c2f1d69b2f04a56349edfstefan@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 16caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org#include "webrtc/test/testsupport/perf_test.h" 174b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 1851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgusing std::string; 1951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 204b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.orgnamespace webrtc { 214b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.orgnamespace testing { 224b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.orgnamespace bwe { 2351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgenum Estimator { kAbsSendTime, kTransmissionOffset }; 2476dcaae0f350051ae2a9364ee92f65f9683c5b24stefan@webrtc.org 2551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgBweTestConfig::EstimatorConfig EstimatorConfigs(Estimator estimator, 2651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org int flow_id) { 27cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org static const RemoteBitrateEstimatorFactory factories[] = { 28cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RemoteBitrateEstimatorFactory(), 29cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org AbsoluteSendTimeRemoteBitrateEstimatorFactory() 30cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org }; 3151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org switch (estimator) { 3251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org case kTransmissionOffset: 33caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org return BweTestConfig::EstimatorConfig("TOF", flow_id, &factories[0], 34caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org kMimdControl, false, false); 3551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org case kAbsSendTime: 36caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org return BweTestConfig::EstimatorConfig("AST", flow_id, &factories[1], 37caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org kMimdControl, false, false); 3851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 39caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org assert(false); 40caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org return BweTestConfig::EstimatorConfig(); 41cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 424b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 4351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgstruct DefaultBweTestConfig { 4451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org BweTestConfig bwe_test_config; 4551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org size_t number_of_senders; 4651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org}; 4751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 4851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgDefaultBweTestConfig MakeBweTestConfig(uint32_t sender_count, 4951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org Estimator estimator) { 5051ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org DefaultBweTestConfig result; 5151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org result.bwe_test_config.estimator_configs.push_back( 5251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org EstimatorConfigs(estimator, 0)); 5351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org result.number_of_senders = sender_count; 54cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org return result; 55cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 564b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 5751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgclass DefaultBweTest : public BweTest, 5851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org public ::testing::TestWithParam<DefaultBweTestConfig> { 5951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org public: 6051ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org DefaultBweTest() : packet_senders_() {} 6151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org virtual ~DefaultBweTest() {} 6251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 6351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org virtual void SetUp() { 6451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org const DefaultBweTestConfig& config = GetParam(); 6551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org SetupTestFromConfig(config.bwe_test_config); 6651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org for (size_t i = 0; i < config.number_of_senders; ++i) { 6751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org packet_senders_.push_back(new VideoSender(0, this, 30, 300, 0, 0)); 6851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 6951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 7051ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 7151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org virtual void TearDown() { 72b10fcf5bca8208c5330acad5122c80a17e8226ddstefan@webrtc.org while (!packet_senders_.empty()) { 7351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org delete packet_senders_.front(); 7451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org packet_senders_.pop_front(); 7551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 7651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 7751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 7851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org protected: 7951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org std::list<PacketSender*> packet_senders_; 8051ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org}; 8151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 8251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgINSTANTIATE_TEST_CASE_P(VideoSendersTest, DefaultBweTest, 8351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org ::testing::Values(MakeBweTestConfig(1, kAbsSendTime), 8451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org MakeBweTestConfig(3, kAbsSendTime), 8551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org MakeBweTestConfig(1, kTransmissionOffset), 8651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org MakeBweTestConfig(3, kTransmissionOffset))); 874b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 8851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, UnlimitedSpeed) { 89cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org VerboseLogging(false); 90cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 91cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 924b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 9351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, DISABLED_SteadyLoss) { 94cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org LossFilter loss(this); 95cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org loss.SetLoss(20.0); 96cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 97cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 984b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 9951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, IncreasingLoss1) { 100cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org LossFilter loss(this); 101cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 0; i < 76; ++i) { 102cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org loss.SetLoss(i); 103cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(5000); 1044b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org } 105cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1064b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 10751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, SteadyDelay) { 108cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org DelayFilter delay(this); 109cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay(1000); 110cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 111cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1124b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 11351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, DISABLED_IncreasingDelay1) { 114cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org DelayFilter delay(this); 115cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 116cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 0; i < 30 * 2; ++i) { 117cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay(i); 118cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 1000); 1194b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org } 120cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 121cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1224b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 12351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, IncreasingDelay2) { 124cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org DelayFilter delay(this); 125cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RateCounterFilter counter(this); 126cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(1 * 60 * 1000); 127cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 1; i < 51; ++i) { 128cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay(10.0f * i); 129cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 1000); 1304b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org } 131cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay(0.0f); 132cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 133cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1344b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 13551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, JumpyDelay1) { 136cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org DelayFilter delay(this); 137cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 138cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 1; i < 200; ++i) { 139cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay((10 * i) % 500); 140cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(1000); 141cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay(1.0f); 142cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(1000); 143cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org } 144cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay(0.0f); 145cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 146cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1474b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 14851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, SteadyJitter) { 149cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org JitterFilter jitter(this); 150cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RateCounterFilter counter(this); 151cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org jitter.SetJitter(20); 152cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(2 * 60 * 1000); 153cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1544b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 15551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, IncreasingJitter1) { 156cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org JitterFilter jitter(this); 157cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 0; i < 2 * 60 * 2; ++i) { 158cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org jitter.SetJitter(i); 159cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 1000); 1604b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org } 161cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 162cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1634b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 16451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, IncreasingJitter2) { 165cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org JitterFilter jitter(this); 166cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(30 * 1000); 167cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 1; i < 51; ++i) { 168cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org jitter.SetJitter(10.0f * i); 169cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 1000); 1704b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org } 171cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org jitter.SetJitter(0.0f); 172cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 173cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1744b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 17551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, SteadyReorder) { 176cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org ReorderFilter reorder(this); 177cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org reorder.SetReorder(20.0); 178cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 179cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1804b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 18151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, IncreasingReorder1) { 182cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org ReorderFilter reorder(this); 183cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 0; i < 76; ++i) { 184cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org reorder.SetReorder(i); 185cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(5000); 1864b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org } 187cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1884b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 18951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, DISABLED_SteadyChoke) { 190cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org ChokeFilter choke(this); 191cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org choke.SetCapacity(140); 192cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 60 * 1000); 193cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 1944b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 19551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, DISABLED_IncreasingChoke1) { 196cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org ChokeFilter choke(this); 197cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 1200; i >= 100; i -= 100) { 198cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org choke.SetCapacity(i); 199cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(5000); 2004b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org } 201cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 2024b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 20351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, DISABLED_IncreasingChoke2) { 204cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org ChokeFilter choke(this); 205cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(60 * 1000); 206cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 1200; i >= 100; i -= 20) { 207cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org choke.SetCapacity(i); 208cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(1000); 2094b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org } 210cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 211c2b61668e22020142791964d3210f6d6da02afa1solenberg@webrtc.org 21251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, DISABLED_Multi1) { 213cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org DelayFilter delay(this); 214cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org ChokeFilter choke(this); 215cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RateCounterFilter counter(this); 216cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org choke.SetCapacity(1000); 217cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(1 * 60 * 1000); 218cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org for (int i = 1; i < 51; ++i) { 219cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay(100.0f * i); 220cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(10 * 1000); 221cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org } 222cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(500 * 1000); 223cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org delay.SetDelay(0.0f); 224cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(5 * 60 * 1000); 225cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 2264b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org 22751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(DefaultBweTest, Multi2) { 228cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org ChokeFilter choke(this); 229cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org JitterFilter jitter(this); 230cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RateCounterFilter counter(this); 231cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org choke.SetCapacity(2000); 232cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org jitter.SetJitter(120); 233cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org RunFor(5 * 60 * 1000); 234cda3cf3d646f20bb2b785c64c0091868dcc2de5csolenberg@webrtc.org} 235caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 236caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org// This test fixture is used to instantiate tests running with adaptive video 237caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org// senders. 238caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.orgclass BweFeedbackTest : public BweTest, 239caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org public ::testing::TestWithParam<BweTestConfig> { 240caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org public: 241caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org BweFeedbackTest() : BweTest() {} 242caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org virtual ~BweFeedbackTest() {} 243caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 244caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org virtual void SetUp() { 245caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org BweTestConfig config; 246caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org config.estimator_configs.push_back(EstimatorConfigs(kAbsSendTime, 0)); 247caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org SetupTestFromConfig(config); 248caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org } 249caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 250caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org void PrintResults(double max_throughput_kbps, Stats<double> throughput_kbps, 251caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org Stats<double> delay_ms) { 252caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org double utilization = throughput_kbps.GetMean() / max_throughput_kbps; 253caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org webrtc::test::PrintResult("BwePerformance", 254caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org GetTestName(), 255caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org "Utilization", 256caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org utilization * 100.0, 257caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org "%", 258caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org false); 259caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org std::stringstream ss; 260caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org ss << throughput_kbps.GetStdDev() / throughput_kbps.GetMean(); 261caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org webrtc::test::PrintResult("BwePerformance", 262caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org GetTestName(), 263caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org "Utilization var coeff", 264caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org ss.str(), 265caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org "", 266caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org false); 267caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org webrtc::test::PrintResult("BwePerformance", 268caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org GetTestName(), 269caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org "Average delay", 270caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org delay_ms.AsString(), 271caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org "ms", 272caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org false); 273caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org } 274caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 275caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org private: 276caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org DISALLOW_COPY_AND_ASSIGN(BweFeedbackTest); 277caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org}; 278caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 279caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.orgTEST_F(BweFeedbackTest, Choke1000kbps500kbps1000kbps) { 280caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 281caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org ChokeFilter filter(this); 282caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RateCounterFilter counter(this, "receiver_input"); 283caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org const int kHighCapacityKbps = 1000; 284caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org const int kLowCapacityKbps = 500; 285caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetCapacity(kHighCapacityKbps); 286caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetMaxDelay(500); 287caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RunFor(60 * 1000); 288caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetCapacity(kLowCapacityKbps); 289caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RunFor(60 * 1000); 290caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetCapacity(kHighCapacityKbps); 291caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RunFor(60 * 1000); 292caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org PrintResults((2 * kHighCapacityKbps + kLowCapacityKbps) / 3.0, 293caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org counter.GetBitrateStats(), filter.GetDelayStats()); 294caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org} 295caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 296caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.orgTEST_F(BweFeedbackTest, Choke200kbps30kbps200kbps) { 297caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 298caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org ChokeFilter filter(this); 299caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RateCounterFilter counter(this, "receiver_input"); 300caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org const int kHighCapacityKbps = 200; 301caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org const int kLowCapacityKbps = 30; 302caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetCapacity(kHighCapacityKbps); 303caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetMaxDelay(500); 304caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RunFor(60 * 1000); 305caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetCapacity(kLowCapacityKbps); 306caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RunFor(60 * 1000); 307caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetCapacity(kHighCapacityKbps); 308caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RunFor(60 * 1000); 309caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 310caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org PrintResults((2 * kHighCapacityKbps + kLowCapacityKbps) / 3.0, 311caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org counter.GetBitrateStats(), filter.GetDelayStats()); 312caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org} 313caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 314caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.orgTEST_F(BweFeedbackTest, Verizon4gDownlinkTest) { 315caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 316caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RateCounterFilter counter1(this, "sender_output"); 317caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org TraceBasedDeliveryFilter filter(this, "link_capacity"); 318caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RateCounterFilter counter2(this, "receiver_input"); 319caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org ASSERT_TRUE(filter.Init(test::ResourcePath("verizon4g-downlink", "rx"))); 320caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RunFor(22 * 60 * 1000); 321caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org PrintResults(filter.GetBitrateStats().GetMean(), counter2.GetBitrateStats(), 322caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.GetDelayStats()); 323caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org} 324caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org 325223aa0fbfaf246469f80acdcaedb6fe4736394f2pbos@webrtc.org// webrtc:3277 326223aa0fbfaf246469f80acdcaedb6fe4736394f2pbos@webrtc.orgTEST_F(BweFeedbackTest, DISABLED_GoogleWifiTrace3Mbps) { 327caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 328caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RateCounterFilter counter1(this, "sender_output"); 329caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org TraceBasedDeliveryFilter filter(this, "link_capacity"); 330caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.SetMaxDelay(500); 331caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RateCounterFilter counter2(this, "receiver_input"); 332caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx"))); 333caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org RunFor(300 * 1000); 334caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org PrintResults(filter.GetBitrateStats().GetMean(), counter2.GetBitrateStats(), 335caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org filter.GetDelayStats()); 336caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org} 3374b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org} // namespace bwe 3384b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org} // namespace testing 3394b3ff2d418644bf4ce29763db9a406fd1e16cbf5solenberg@webrtc.org} // namespace webrtc 340