1df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org/* 2df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 3df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org * 4df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org * Use of this source code is governed by a BSD-style license 5df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org * that can be found in the LICENSE file in the root of the source 6df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org * tree. An additional intellectual property rights grant can be found 7df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org * in the file PATENTS. All contributing project authors may 8df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org */ 10df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 1149d62206ededc5905d6121d42fdcce8ed665b2c0kjellander@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 12df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" 13df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org#include "webrtc/modules/remote_bitrate_estimator/test/bwe_test.h" 14df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 15df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 1651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgusing std::string; 1751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 18df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.orgnamespace webrtc { 19df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.orgnamespace testing { 20df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.orgnamespace bwe { 21df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org#if BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 2251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgBweTestConfig::EstimatorConfig CreateEstimatorConfig( 2351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org int flow_id, bool plot_delay, bool plot_estimate) { 24b9d0acb4017586521b5a11d8b73ad8c733958a53stefan@webrtc.org static const AbsoluteSendTimeRemoteBitrateEstimatorFactory factory = 25df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org AbsoluteSendTimeRemoteBitrateEstimatorFactory(); 26df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 2751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org return BweTestConfig::EstimatorConfig("AST", flow_id, &factory, kAimdControl, 2851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org plot_delay, plot_estimate); 29df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org} 30df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 31caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.orgBweTestConfig MakeAdaptiveBweTestConfig() { 3251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org BweTestConfig result; 3351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org result.estimator_configs.push_back(CreateEstimatorConfig(0, true, true)); 34df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org return result; 35df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org} 36df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 3751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgBweTestConfig MakeMultiFlowBweTestConfig(int flow_count) { 3851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org BweTestConfig result; 3951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org for (int i = 0; i < flow_count; ++i) { 4051ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org result.estimator_configs.push_back(CreateEstimatorConfig(i, false, true)); 4151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 42df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org return result; 43df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org} 44df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 45df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org// This test fixture is used to instantiate tests running with adaptive video 46df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org// senders. 4751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgclass BweSimulation : public BweTest, 4851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org public ::testing::TestWithParam<BweTestConfig> { 49df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org public: 50df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org BweSimulation() : BweTest() {} 51df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org virtual ~BweSimulation() {} 52df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 5351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org virtual void SetUp() { 5451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org const BweTestConfig& config = GetParam(); 5551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org SetupTestFromConfig(config); 5651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 5751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 58df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org private: 59df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org DISALLOW_COPY_AND_ASSIGN(BweSimulation); 60df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org}; 61df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 62df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.orgINSTANTIATE_TEST_CASE_P(VideoSendersTest, BweSimulation, 63caa56eb9a5ef6074f59a321bdf60f2a43503f805stefan@webrtc.org ::testing::Values(MakeAdaptiveBweTestConfig())); 64df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 65df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.orgTEST_P(BweSimulation, SprintUplinkTest) { 66df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org VerboseLogging(true); 6751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 68df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org RateCounterFilter counter1(this, "sender_output"); 69de93ce079f7ee5a42592e670d9f30d880e760a25stefan@webrtc.org TraceBasedDeliveryFilter filter(this, "link_capacity"); 70df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org RateCounterFilter counter2(this, "receiver_input"); 71df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org ASSERT_TRUE(filter.Init(test::ResourcePath("sprint-uplink", "rx"))); 72df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org RunFor(60 * 1000); 73df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org} 74df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org 75df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.orgTEST_P(BweSimulation, Verizon4gDownlinkTest) { 76df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org VerboseLogging(true); 7751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 78df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org RateCounterFilter counter1(this, "sender_output"); 79de93ce079f7ee5a42592e670d9f30d880e760a25stefan@webrtc.org TraceBasedDeliveryFilter filter(this, "link_capacity"); 80df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org RateCounterFilter counter2(this, "receiver_input"); 81df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org ASSERT_TRUE(filter.Init(test::ResourcePath("verizon4g-downlink", "rx"))); 82df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org RunFor(22 * 60 * 1000); 83df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org} 84e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org 85e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.orgTEST_P(BweSimulation, Choke1000kbps500kbps1000kbps) { 86e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org VerboseLogging(true); 8751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 88e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org ChokeFilter filter(this); 89e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RateCounterFilter counter(this, "receiver_input"); 90e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetCapacity(1000); 91e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetMaxDelay(500); 92e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RunFor(60 * 1000); 93e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetCapacity(500); 94e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RunFor(60 * 1000); 95e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetCapacity(1000); 96e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RunFor(60 * 1000); 97e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org} 98e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org 99c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.orgTEST_P(BweSimulation, PacerChoke1000kbps500kbps1000kbps) { 100c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org VerboseLogging(true); 101c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org AdaptiveVideoSender source(0, NULL, 30, 300, 0, 0); 102c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org PacedVideoSender sender(this, 300, &source); 103c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org ChokeFilter filter(this); 104c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org RateCounterFilter counter(this, "receiver_input"); 105c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org filter.SetCapacity(1000); 106c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org filter.SetMaxDelay(500); 107c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org RunFor(60 * 1000); 108c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org filter.SetCapacity(500); 109c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org RunFor(60 * 1000); 110c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org filter.SetCapacity(1000); 111c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org RunFor(60 * 1000); 112c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org} 113c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org 114c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.orgTEST_P(BweSimulation, PacerChoke200kbps30kbps200kbps) { 115c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org VerboseLogging(true); 116c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org AdaptiveVideoSender source(0, NULL, 30, 300, 0, 0); 117c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org PacedVideoSender sender(this, 300, &source); 118c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org ChokeFilter filter(this); 119c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org RateCounterFilter counter(this, "receiver_input"); 120c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org filter.SetCapacity(200); 121c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org filter.SetMaxDelay(500); 122c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org RunFor(60 * 1000); 123c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org filter.SetCapacity(30); 124c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org RunFor(60 * 1000); 125c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org filter.SetCapacity(200); 126c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org RunFor(60 * 1000); 127c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org} 128c9995bc06a99f8b82a0ca0ddf5a5bb982cb0c11bstefan@webrtc.org 129e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.orgTEST_P(BweSimulation, Choke200kbps30kbps200kbps) { 130e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org VerboseLogging(true); 13151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 132e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org ChokeFilter filter(this); 133e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RateCounterFilter counter(this, "receiver_input"); 134e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetCapacity(200); 135e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetMaxDelay(500); 136e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RunFor(60 * 1000); 137e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetCapacity(30); 138e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RunFor(60 * 1000); 139e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetCapacity(200); 140e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RunFor(60 * 1000); 141e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org} 142e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org 143223aa0fbfaf246469f80acdcaedb6fe4736394f2pbos@webrtc.orgTEST_P(BweSimulation, GoogleWifiTrace3Mbps) { 144e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org VerboseLogging(true); 14551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org AdaptiveVideoSender sender(0, this, 30, 300, 0, 0); 146e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RateCounterFilter counter1(this, "sender_output"); 147e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org TraceBasedDeliveryFilter filter(this, "link_capacity"); 148e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org filter.SetMaxDelay(500); 149e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RateCounterFilter counter2(this, "receiver_input"); 150e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx"))); 151e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org RunFor(300 * 1000); 152e823012b65d4260205a91a9381fd9cdf2057d6ddstefan@webrtc.org} 15351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 15451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgclass MultiFlowBweSimulation : public BweSimulation { 15551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org public: 15651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org MultiFlowBweSimulation() : BweSimulation() {} 15751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org virtual ~MultiFlowBweSimulation() {} 15851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 15951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org private: 16051ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org DISALLOW_COPY_AND_ASSIGN(MultiFlowBweSimulation); 16151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org}; 16251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 16351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgINSTANTIATE_TEST_CASE_P(VideoSendersTest, MultiFlowBweSimulation, 16451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org ::testing::Values(MakeMultiFlowBweTestConfig(3))); 16551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 16651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.orgTEST_P(MultiFlowBweSimulation, SelfFairnessTest) { 16751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org VerboseLogging(true); 16851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org const int kAllFlowIds[] = {0, 1, 2}; 16951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org const size_t kNumFlows = sizeof(kAllFlowIds) / sizeof(kAllFlowIds[0]); 17051ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org scoped_ptr<AdaptiveVideoSender> senders[kNumFlows]; 17151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org for (size_t i = 0; i < kNumFlows; ++i) { 17251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org senders[i].reset(new AdaptiveVideoSender(kAllFlowIds[i], this, 30, 300, 0, 17351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 0)); 17451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 17551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org // Second and third flow. 17651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org ChokeFilter choke(this, CreateFlowIds(&kAllFlowIds[1], 2)); 17751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org choke.SetCapacity(1500); 17851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org // First flow. 17951ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org ChokeFilter choke2(this, CreateFlowIds(&kAllFlowIds[0], 1)); 18051ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org choke2.SetCapacity(1000); 18151ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org 18251ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org scoped_ptr<RateCounterFilter> rate_counters[kNumFlows]; 18351ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org for (size_t i = 0; i < kNumFlows; ++i) { 18451ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org rate_counters[i].reset(new RateCounterFilter( 18551ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org this, CreateFlowIds(&kAllFlowIds[i], 1), "receiver_input")); 18651ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org } 18751ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org RunFor(30 * 60 * 1000); 18851ef6b0a9d93b12a6a2d31a8ecb3b5e5dcc0cbe3stefan@webrtc.org} 189df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org#endif // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 190df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org} // namespace bwe 191df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org} // namespace testing 192df1f99ff019b1c666a15bf65e222cb2518d4e62cstefan@webrtc.org} // namespace webrtc 193