stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license |
| 5 | * that can be found in the LICENSE file in the root of the source |
| 6 | * tree. An additional intellectual property rights grant can be found |
| 7 | * in the file PATENTS. All contributing project authors may |
| 8 | * be found in the AUTHORS file in the root of the source tree. |
| 9 | */ |
| 10 | |
kwiberg | 92931b1 | 2016-03-01 05:32:29 -0800 | [diff] [blame] | 11 | #include <memory> |
| 12 | |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 13 | #include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" |
| 14 | #include "webrtc/modules/remote_bitrate_estimator/test/bwe_test.h" |
stefan@webrtc.org | 14b0279 | 2015-02-16 12:02:20 +0000 | [diff] [blame] | 15 | #include "webrtc/modules/remote_bitrate_estimator/test/packet_receiver.h" |
| 16 | #include "webrtc/modules/remote_bitrate_estimator/test/packet_sender.h" |
Edward Lemur | c20978e | 2017-07-06 19:44:34 +0200 | [diff] [blame] | 17 | #include "webrtc/rtc_base/constructormagic.h" |
kwiberg | ac9f876 | 2016-09-30 22:29:43 -0700 | [diff] [blame] | 18 | #include "webrtc/test/gtest.h" |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 19 | #include "webrtc/test/testsupport/fileutils.h" |
| 20 | |
| 21 | namespace webrtc { |
| 22 | namespace testing { |
| 23 | namespace bwe { |
terelius | 3dcfd64 | 2016-10-07 00:39:56 -0700 | [diff] [blame] | 24 | |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 25 | // This test fixture is used to instantiate tests running with adaptive video |
| 26 | // senders. |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 27 | class BweSimulation : public BweTest, |
stefan@webrtc.org | 027e113 | 2015-02-10 09:48:35 +0000 | [diff] [blame] | 28 | public ::testing::TestWithParam<BandwidthEstimatorType> { |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 29 | public: |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 30 | BweSimulation() |
| 31 | : BweTest(), random_(Clock::GetRealTimeClock()->TimeInMicroseconds()) {} |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 32 | virtual ~BweSimulation() {} |
| 33 | |
stefan@webrtc.org | 027e113 | 2015-02-10 09:48:35 +0000 | [diff] [blame] | 34 | protected: |
Stefan Holmer | 53d0dc3 | 2015-05-07 15:04:19 +0200 | [diff] [blame] | 35 | void SetUp() override { |
| 36 | BweTest::SetUp(); |
| 37 | VerboseLogging(true); |
| 38 | } |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 39 | |
terelius | 84e78f9 | 2015-12-10 01:50:55 -0800 | [diff] [blame] | 40 | Random random_; |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 41 | |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 42 | private: |
henrikg | 3c089d7 | 2015-09-16 05:37:44 -0700 | [diff] [blame] | 43 | RTC_DISALLOW_COPY_AND_ASSIGN(BweSimulation); |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 44 | }; |
| 45 | |
stefan@webrtc.org | 027e113 | 2015-02-10 09:48:35 +0000 | [diff] [blame] | 46 | INSTANTIATE_TEST_CASE_P(VideoSendersTest, |
| 47 | BweSimulation, |
| 48 | ::testing::Values(kRembEstimator, |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 49 | kSendSideEstimator, |
gnish | 6dcdf10 | 2017-06-05 06:01:26 -0700 | [diff] [blame] | 50 | kNadaEstimator, |
| 51 | kBbrEstimator)); |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 52 | |
| 53 | TEST_P(BweSimulation, SprintUplinkTest) { |
stefan@webrtc.org | f88bee6 | 2015-01-30 14:36:37 +0000 | [diff] [blame] | 54 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 55 | VideoSender sender(&uplink_, &source, GetParam()); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 56 | RateCounterFilter counter1(&uplink_, 0, "sender_output", |
| 57 | bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 58 | TraceBasedDeliveryFilter filter(&uplink_, 0, "link_capacity"); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 59 | RateCounterFilter counter2(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 60 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 61 | ASSERT_TRUE(filter.Init(test::ResourcePath("sprint-uplink", "rx"))); |
| 62 | RunFor(60 * 1000); |
| 63 | } |
| 64 | |
| 65 | TEST_P(BweSimulation, Verizon4gDownlinkTest) { |
stefan@webrtc.org | f88bee6 | 2015-01-30 14:36:37 +0000 | [diff] [blame] | 66 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 67 | VideoSender sender(&downlink_, &source, GetParam()); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 68 | RateCounterFilter counter1(&downlink_, 0, "sender_output", |
oprypin | 8e58d65 | 2017-03-21 07:52:41 -0700 | [diff] [blame] | 69 | std::string() + bwe_names[GetParam()] + "_up"); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 70 | TraceBasedDeliveryFilter filter(&downlink_, 0, "link_capacity"); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 71 | RateCounterFilter counter2(&downlink_, 0, "Receiver", |
oprypin | 8e58d65 | 2017-03-21 07:52:41 -0700 | [diff] [blame] | 72 | std::string() + bwe_names[GetParam()] + "_down"); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 73 | PacketReceiver receiver(&downlink_, 0, GetParam(), true, true); |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 74 | ASSERT_TRUE(filter.Init(test::ResourcePath("verizon4g-downlink", "rx"))); |
| 75 | RunFor(22 * 60 * 1000); |
| 76 | } |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 77 | |
stefan@webrtc.org | 7663684 | 2015-02-17 16:03:45 +0000 | [diff] [blame] | 78 | TEST_P(BweSimulation, Choke1000kbps500kbps1000kbpsBiDirectional) { |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 79 | const int kFlowIds[] = {0, 1}; |
| 80 | const size_t kNumFlows = sizeof(kFlowIds) / sizeof(kFlowIds[0]); |
| 81 | |
| 82 | AdaptiveVideoSource source(kFlowIds[0], 30, 300, 0, 0); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 83 | VideoSender sender(&uplink_, &source, GetParam()); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 84 | ChokeFilter choke(&uplink_, kFlowIds[0]); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 85 | RateCounterFilter counter(&uplink_, kFlowIds[0], "Receiver_0", |
| 86 | bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 87 | PacketReceiver receiver(&uplink_, kFlowIds[0], GetParam(), true, false); |
| 88 | |
| 89 | AdaptiveVideoSource source2(kFlowIds[1], 30, 300, 0, 0); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 90 | VideoSender sender2(&downlink_, &source2, GetParam()); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 91 | ChokeFilter choke2(&downlink_, kFlowIds[1]); |
| 92 | DelayFilter delay(&downlink_, CreateFlowIds(kFlowIds, kNumFlows)); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 93 | RateCounterFilter counter2(&downlink_, kFlowIds[1], "Receiver_1", |
| 94 | bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 95 | PacketReceiver receiver2(&downlink_, kFlowIds[1], GetParam(), true, false); |
| 96 | |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 97 | choke2.set_capacity_kbps(500); |
| 98 | delay.SetOneWayDelayMs(0); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 99 | |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 100 | choke.set_capacity_kbps(1000); |
| 101 | choke.set_max_delay_ms(500); |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 102 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 103 | choke.set_capacity_kbps(500); |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 104 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 105 | choke.set_capacity_kbps(1000); |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 106 | RunFor(60 * 1000); |
| 107 | } |
| 108 | |
stefan@webrtc.org | 7663684 | 2015-02-17 16:03:45 +0000 | [diff] [blame] | 109 | TEST_P(BweSimulation, Choke1000kbps500kbps1000kbps) { |
stefan@webrtc.org | 7663684 | 2015-02-17 16:03:45 +0000 | [diff] [blame] | 110 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 111 | VideoSender sender(&uplink_, &source, GetParam()); |
stefan@webrtc.org | 7663684 | 2015-02-17 16:03:45 +0000 | [diff] [blame] | 112 | ChokeFilter choke(&uplink_, 0); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 113 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
stefan@webrtc.org | 7663684 | 2015-02-17 16:03:45 +0000 | [diff] [blame] | 114 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, false); |
| 115 | |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 116 | choke.set_capacity_kbps(1000); |
| 117 | choke.set_max_delay_ms(500); |
stefan@webrtc.org | 7663684 | 2015-02-17 16:03:45 +0000 | [diff] [blame] | 118 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 119 | choke.set_capacity_kbps(500); |
stefan@webrtc.org | 7663684 | 2015-02-17 16:03:45 +0000 | [diff] [blame] | 120 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 121 | choke.set_capacity_kbps(1000); |
stefan@webrtc.org | 7663684 | 2015-02-17 16:03:45 +0000 | [diff] [blame] | 122 | RunFor(60 * 1000); |
| 123 | } |
| 124 | |
gnish | a36165c | 2017-08-20 09:19:58 -0700 | [diff] [blame] | 125 | TEST_P(BweSimulation, SimulationsCompiled) { |
| 126 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
| 127 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
| 128 | int zero = 0; |
| 129 | // CreateFlowIds() doesn't support passing int as a flow id, so we pass |
| 130 | // pointer instead. |
| 131 | DelayFilter delay(&uplink_, CreateFlowIds(&zero, 1)); |
| 132 | delay.SetOneWayDelayMs(100); |
| 133 | ChokeFilter filter(&uplink_, 0); |
| 134 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
| 135 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
| 136 | filter.set_max_delay_ms(500); |
| 137 | filter.set_capacity_kbps(1000); |
| 138 | RunFor(60 * 1000); |
| 139 | filter.set_capacity_kbps(500); |
| 140 | RunFor(50 * 1000); |
| 141 | filter.set_capacity_kbps(1000); |
| 142 | RunFor(60 * 1000); |
| 143 | filter.set_capacity_kbps(200); |
| 144 | RunFor(60 * 1000); |
| 145 | filter.set_capacity_kbps(50); |
| 146 | RunFor(60 * 1000); |
| 147 | filter.set_capacity_kbps(200); |
| 148 | RunFor(60 * 1000); |
| 149 | filter.set_capacity_kbps(500); |
| 150 | RunFor(60 * 1000); |
| 151 | filter.set_capacity_kbps(300); |
| 152 | RunFor(60 * 1000); |
| 153 | filter.set_capacity_kbps(1000); |
| 154 | RunFor(60 * 1000); |
| 155 | const int kStartingCapacityKbps = 150; |
| 156 | const int kEndingCapacityKbps = 1500; |
| 157 | const int kStepKbps = 5; |
| 158 | const int kStepTimeMs = 1000; |
| 159 | for (int i = kStartingCapacityKbps; i <= kEndingCapacityKbps; |
| 160 | i += kStepKbps) { |
| 161 | filter.set_capacity_kbps(i); |
| 162 | RunFor(kStepTimeMs); |
| 163 | } |
| 164 | for (int i = kEndingCapacityKbps; i >= kStartingCapacityKbps; |
| 165 | i -= kStepKbps) { |
| 166 | filter.set_capacity_kbps(i); |
| 167 | RunFor(kStepTimeMs); |
| 168 | } |
| 169 | filter.set_capacity_kbps(150); |
| 170 | RunFor(120 * 1000); |
| 171 | filter.set_capacity_kbps(500); |
| 172 | RunFor(60 * 1000); |
| 173 | } |
| 174 | |
stefan@webrtc.org | 88e0dda | 2014-07-04 09:20:42 +0000 | [diff] [blame] | 175 | TEST_P(BweSimulation, PacerChoke1000kbps500kbps1000kbps) { |
stefan | c62642c | 2015-07-07 04:20:34 -0700 | [diff] [blame] | 176 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 177 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
gnish | a36165c | 2017-08-20 09:19:58 -0700 | [diff] [blame] | 178 | const int kFlowId = 0; |
| 179 | // CreateFlowIds() doesn't support passing int as a flow id, so we pass |
| 180 | // pointer instead. |
| 181 | DelayFilter delay(&uplink_, CreateFlowIds(&kFlowId, 1)); |
| 182 | delay.SetOneWayDelayMs(100); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 183 | ChokeFilter filter(&uplink_, 0); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 184 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 185 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 186 | filter.set_capacity_kbps(1000); |
| 187 | filter.set_max_delay_ms(500); |
stefan@webrtc.org | 88e0dda | 2014-07-04 09:20:42 +0000 | [diff] [blame] | 188 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 189 | filter.set_capacity_kbps(500); |
stefan@webrtc.org | 88e0dda | 2014-07-04 09:20:42 +0000 | [diff] [blame] | 190 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 191 | filter.set_capacity_kbps(1000); |
stefan@webrtc.org | 88e0dda | 2014-07-04 09:20:42 +0000 | [diff] [blame] | 192 | RunFor(60 * 1000); |
| 193 | } |
| 194 | |
stefan@webrtc.org | 82462aa | 2014-10-23 11:57:05 +0000 | [diff] [blame] | 195 | TEST_P(BweSimulation, PacerChoke10000kbps) { |
stefan@webrtc.org | f88bee6 | 2015-01-30 14:36:37 +0000 | [diff] [blame] | 196 | PeriodicKeyFrameSource source(0, 30, 300, 0, 0, 1000); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 197 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
| 198 | ChokeFilter filter(&uplink_, 0); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 199 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 200 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 201 | filter.set_capacity_kbps(10000); |
| 202 | filter.set_max_delay_ms(500); |
stefan@webrtc.org | 82462aa | 2014-10-23 11:57:05 +0000 | [diff] [blame] | 203 | RunFor(60 * 1000); |
| 204 | } |
| 205 | |
stefan@webrtc.org | 88e0dda | 2014-07-04 09:20:42 +0000 | [diff] [blame] | 206 | TEST_P(BweSimulation, PacerChoke200kbps30kbps200kbps) { |
stefan | c62642c | 2015-07-07 04:20:34 -0700 | [diff] [blame] | 207 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 208 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
| 209 | ChokeFilter filter(&uplink_, 0); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 210 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 211 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 212 | filter.set_capacity_kbps(200); |
| 213 | filter.set_max_delay_ms(500); |
stefan@webrtc.org | 88e0dda | 2014-07-04 09:20:42 +0000 | [diff] [blame] | 214 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 215 | filter.set_capacity_kbps(30); |
stefan@webrtc.org | 88e0dda | 2014-07-04 09:20:42 +0000 | [diff] [blame] | 216 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 217 | filter.set_capacity_kbps(200); |
stefan@webrtc.org | 88e0dda | 2014-07-04 09:20:42 +0000 | [diff] [blame] | 218 | RunFor(60 * 1000); |
| 219 | } |
| 220 | |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 221 | TEST_P(BweSimulation, Choke200kbps30kbps200kbps) { |
stefan@webrtc.org | f88bee6 | 2015-01-30 14:36:37 +0000 | [diff] [blame] | 222 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 223 | VideoSender sender(&uplink_, &source, GetParam()); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 224 | ChokeFilter filter(&uplink_, 0); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 225 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 226 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 227 | filter.set_capacity_kbps(200); |
| 228 | filter.set_max_delay_ms(500); |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 229 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 230 | filter.set_capacity_kbps(30); |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 231 | RunFor(60 * 1000); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 232 | filter.set_capacity_kbps(200); |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 233 | RunFor(60 * 1000); |
| 234 | } |
| 235 | |
terelius | 568c9e7 | 2017-01-24 02:03:31 -0800 | [diff] [blame] | 236 | TEST_P(BweSimulation, PacerChoke50kbps15kbps50kbps) { |
| 237 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
| 238 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
| 239 | ChokeFilter filter(&uplink_, 0); |
| 240 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
| 241 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
| 242 | filter.set_capacity_kbps(50); |
| 243 | filter.set_max_delay_ms(500); |
| 244 | RunFor(60 * 1000); |
| 245 | filter.set_capacity_kbps(15); |
| 246 | RunFor(60 * 1000); |
| 247 | filter.set_capacity_kbps(50); |
| 248 | RunFor(60 * 1000); |
| 249 | } |
| 250 | |
| 251 | TEST_P(BweSimulation, Choke50kbps15kbps50kbps) { |
| 252 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
| 253 | VideoSender sender(&uplink_, &source, GetParam()); |
| 254 | ChokeFilter filter(&uplink_, 0); |
| 255 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
| 256 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
| 257 | filter.set_capacity_kbps(50); |
| 258 | filter.set_max_delay_ms(500); |
| 259 | RunFor(60 * 1000); |
| 260 | filter.set_capacity_kbps(15); |
| 261 | RunFor(60 * 1000); |
| 262 | filter.set_capacity_kbps(50); |
| 263 | RunFor(60 * 1000); |
| 264 | } |
| 265 | |
pbos@webrtc.org | 0300939 | 2014-04-29 15:25:59 +0000 | [diff] [blame] | 266 | TEST_P(BweSimulation, GoogleWifiTrace3Mbps) { |
stefan@webrtc.org | f88bee6 | 2015-01-30 14:36:37 +0000 | [diff] [blame] | 267 | AdaptiveVideoSource source(0, 30, 300, 0, 0); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 268 | VideoSender sender(&uplink_, &source, GetParam()); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 269 | RateCounterFilter counter1(&uplink_, 0, "sender_output", |
| 270 | bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 271 | TraceBasedDeliveryFilter filter(&uplink_, 0, "link_capacity"); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 272 | filter.set_max_delay_ms(500); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 273 | RateCounterFilter counter2(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 274 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
stefan@webrtc.org | f8f7c8b | 2014-04-01 14:00:05 +0000 | [diff] [blame] | 275 | ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx"))); |
| 276 | RunFor(300 * 1000); |
| 277 | } |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 278 | |
Cesar Magalhaes | f69f1fb | 2015-05-30 17:49:18 +0200 | [diff] [blame] | 279 | TEST_P(BweSimulation, LinearIncreasingCapacity) { |
| 280 | PeriodicKeyFrameSource source(0, 30, 300, 0, 0, 1000000); |
| 281 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
| 282 | ChokeFilter filter(&uplink_, 0); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 283 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
Cesar Magalhaes | f69f1fb | 2015-05-30 17:49:18 +0200 | [diff] [blame] | 284 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 285 | filter.set_max_delay_ms(500); |
Cesar Magalhaes | f69f1fb | 2015-05-30 17:49:18 +0200 | [diff] [blame] | 286 | const int kStartingCapacityKbps = 150; |
| 287 | const int kEndingCapacityKbps = 1500; |
| 288 | const int kStepKbps = 5; |
| 289 | const int kStepTimeMs = 1000; |
| 290 | |
| 291 | for (int i = kStartingCapacityKbps; i <= kEndingCapacityKbps; |
| 292 | i += kStepKbps) { |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 293 | filter.set_capacity_kbps(i); |
Cesar Magalhaes | f69f1fb | 2015-05-30 17:49:18 +0200 | [diff] [blame] | 294 | RunFor(kStepTimeMs); |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | TEST_P(BweSimulation, LinearDecreasingCapacity) { |
| 299 | PeriodicKeyFrameSource source(0, 30, 300, 0, 0, 1000000); |
| 300 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
| 301 | ChokeFilter filter(&uplink_, 0); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 302 | RateCounterFilter counter(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
Cesar Magalhaes | f69f1fb | 2015-05-30 17:49:18 +0200 | [diff] [blame] | 303 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 304 | filter.set_max_delay_ms(500); |
Cesar Magalhaes | f69f1fb | 2015-05-30 17:49:18 +0200 | [diff] [blame] | 305 | const int kStartingCapacityKbps = 1500; |
| 306 | const int kEndingCapacityKbps = 150; |
| 307 | const int kStepKbps = -5; |
| 308 | const int kStepTimeMs = 1000; |
| 309 | |
| 310 | for (int i = kStartingCapacityKbps; i >= kEndingCapacityKbps; |
| 311 | i += kStepKbps) { |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 312 | filter.set_capacity_kbps(i); |
Cesar Magalhaes | f69f1fb | 2015-05-30 17:49:18 +0200 | [diff] [blame] | 313 | RunFor(kStepTimeMs); |
| 314 | } |
| 315 | } |
| 316 | |
stefan@webrtc.org | 82462aa | 2014-10-23 11:57:05 +0000 | [diff] [blame] | 317 | TEST_P(BweSimulation, PacerGoogleWifiTrace3Mbps) { |
stefan@webrtc.org | f88bee6 | 2015-01-30 14:36:37 +0000 | [diff] [blame] | 318 | PeriodicKeyFrameSource source(0, 30, 300, 0, 0, 1000); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 319 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
gnish | a36165c | 2017-08-20 09:19:58 -0700 | [diff] [blame] | 320 | int kFlowId = 0; |
| 321 | // CreateFlowIds() doesn't support passing int as a flow id, so we pass |
| 322 | // pointer instead. |
| 323 | DelayFilter delay(&uplink_, CreateFlowIds(&kFlowId, 1)); |
| 324 | delay.SetOneWayDelayMs(100); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 325 | RateCounterFilter counter1(&uplink_, 0, "sender_output", |
| 326 | bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 327 | TraceBasedDeliveryFilter filter(&uplink_, 0, "link_capacity"); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 328 | filter.set_max_delay_ms(500); |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 329 | RateCounterFilter counter2(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 330 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
stefan@webrtc.org | 82462aa | 2014-10-23 11:57:05 +0000 | [diff] [blame] | 331 | ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx"))); |
| 332 | RunFor(300 * 1000); |
| 333 | } |
| 334 | |
terelius | afaef8b | 2016-11-17 03:48:18 -0800 | [diff] [blame] | 335 | TEST_P(BweSimulation, PacerGoogleWifiTrace3MbpsLowFramerate) { |
| 336 | PeriodicKeyFrameSource source(0, 5, 300, 0, 0, 1000); |
| 337 | PacedVideoSender sender(&uplink_, &source, GetParam()); |
| 338 | RateCounterFilter counter1(&uplink_, 0, "sender_output", |
| 339 | bwe_names[GetParam()]); |
| 340 | TraceBasedDeliveryFilter filter(&uplink_, 0, "link_capacity"); |
| 341 | filter.set_max_delay_ms(500); |
| 342 | RateCounterFilter counter2(&uplink_, 0, "Receiver", bwe_names[GetParam()]); |
| 343 | PacketReceiver receiver(&uplink_, 0, GetParam(), true, true); |
| 344 | ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx"))); |
| 345 | RunFor(300 * 1000); |
| 346 | } |
| 347 | |
stefan@webrtc.org | 027e113 | 2015-02-10 09:48:35 +0000 | [diff] [blame] | 348 | TEST_P(BweSimulation, SelfFairnessTest) { |
terelius | 8f09f17 | 2015-12-15 00:51:54 -0800 | [diff] [blame] | 349 | Random prng(Clock::GetRealTimeClock()->TimeInMicroseconds()); |
stefan | c62642c | 2015-07-07 04:20:34 -0700 | [diff] [blame] | 350 | const int kAllFlowIds[] = {0, 1, 2, 3}; |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 351 | const size_t kNumFlows = sizeof(kAllFlowIds) / sizeof(kAllFlowIds[0]); |
kwiberg | 92931b1 | 2016-03-01 05:32:29 -0800 | [diff] [blame] | 352 | std::unique_ptr<VideoSource> sources[kNumFlows]; |
| 353 | std::unique_ptr<VideoSender> senders[kNumFlows]; |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 354 | for (size_t i = 0; i < kNumFlows; ++i) { |
stefan@webrtc.org | 387841a | 2015-01-14 16:45:29 +0000 | [diff] [blame] | 355 | // Streams started 20 seconds apart to give them different advantage when |
| 356 | // competing for the bandwidth. |
stefan | c62642c | 2015-07-07 04:20:34 -0700 | [diff] [blame] | 357 | sources[i].reset(new AdaptiveVideoSource(kAllFlowIds[i], 30, 300, 0, |
terelius | 8f09f17 | 2015-12-15 00:51:54 -0800 | [diff] [blame] | 358 | i * prng.Rand(39999))); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 359 | senders[i].reset(new VideoSender(&uplink_, sources[i].get(), GetParam())); |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 360 | } |
stefan@webrtc.org | 387841a | 2015-01-14 16:45:29 +0000 | [diff] [blame] | 361 | |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 362 | ChokeFilter choke(&uplink_, CreateFlowIds(kAllFlowIds, kNumFlows)); |
Cesar Magalhaes | 9c261f2 | 2015-07-15 16:31:18 +0200 | [diff] [blame] | 363 | choke.set_capacity_kbps(1000); |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 364 | |
kwiberg | 92931b1 | 2016-03-01 05:32:29 -0800 | [diff] [blame] | 365 | std::unique_ptr<RateCounterFilter> rate_counters[kNumFlows]; |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 366 | for (size_t i = 0; i < kNumFlows; ++i) { |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 367 | rate_counters[i].reset( |
| 368 | new RateCounterFilter(&uplink_, CreateFlowIds(&kAllFlowIds[i], 1), |
| 369 | "Receiver", bwe_names[GetParam()])); |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 370 | } |
stefan@webrtc.org | 387841a | 2015-01-14 16:45:29 +0000 | [diff] [blame] | 371 | |
| 372 | RateCounterFilter total_utilization( |
Cesar Magalhaes | d55ce2d | 2015-07-26 01:44:52 +0200 | [diff] [blame] | 373 | &uplink_, CreateFlowIds(kAllFlowIds, kNumFlows), "total_utilization", |
| 374 | "Total_link_utilization"); |
stefan@webrtc.org | 387841a | 2015-01-14 16:45:29 +0000 | [diff] [blame] | 375 | |
kwiberg | 92931b1 | 2016-03-01 05:32:29 -0800 | [diff] [blame] | 376 | std::unique_ptr<PacketReceiver> receivers[kNumFlows]; |
stefan@webrtc.org | 027e113 | 2015-02-10 09:48:35 +0000 | [diff] [blame] | 377 | for (size_t i = 0; i < kNumFlows; ++i) { |
stefan@webrtc.org | 56cb0ea | 2015-02-13 15:46:23 +0000 | [diff] [blame] | 378 | receivers[i].reset(new PacketReceiver(&uplink_, kAllFlowIds[i], GetParam(), |
| 379 | i == 0, false)); |
stefan@webrtc.org | 027e113 | 2015-02-10 09:48:35 +0000 | [diff] [blame] | 380 | } |
| 381 | |
stefan@webrtc.org | 4f616a0 | 2014-04-25 10:59:24 +0000 | [diff] [blame] | 382 | RunFor(30 * 60 * 1000); |
| 383 | } |
stefan@webrtc.org | 387841a | 2015-01-14 16:45:29 +0000 | [diff] [blame] | 384 | |
stefan | c62642c | 2015-07-07 04:20:34 -0700 | [diff] [blame] | 385 | TEST_P(BweSimulation, PacedSelfFairness50msTest) { |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 386 | const int64_t kAverageOffsetMs = 20 * 1000; |
| 387 | const int kNumRmcatFlows = 4; |
| 388 | int64_t offsets_ms[kNumRmcatFlows]; |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 389 | offsets_ms[0] = random_.Rand(2 * kAverageOffsetMs); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 390 | for (int i = 1; i < kNumRmcatFlows; ++i) { |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 391 | offsets_ms[i] = offsets_ms[i - 1] + random_.Rand(2 * kAverageOffsetMs); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 392 | } |
| 393 | RunFairnessTest(GetParam(), kNumRmcatFlows, 0, 1000, 3000, 50, 50, 0, |
| 394 | offsets_ms); |
stefan@webrtc.org | 387841a | 2015-01-14 16:45:29 +0000 | [diff] [blame] | 395 | } |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 396 | |
stefan | c62642c | 2015-07-07 04:20:34 -0700 | [diff] [blame] | 397 | TEST_P(BweSimulation, PacedSelfFairness500msTest) { |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 398 | const int64_t kAverageOffsetMs = 20 * 1000; |
| 399 | const int kNumRmcatFlows = 4; |
| 400 | int64_t offsets_ms[kNumRmcatFlows]; |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 401 | offsets_ms[0] = random_.Rand(2 * kAverageOffsetMs); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 402 | for (int i = 1; i < kNumRmcatFlows; ++i) { |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 403 | offsets_ms[i] = offsets_ms[i - 1] + random_.Rand(2 * kAverageOffsetMs); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 404 | } |
| 405 | RunFairnessTest(GetParam(), kNumRmcatFlows, 0, 1000, 3000, 500, 50, 0, |
| 406 | offsets_ms); |
stefan | c62642c | 2015-07-07 04:20:34 -0700 | [diff] [blame] | 407 | } |
| 408 | |
Stefan Holmer | bcbcd84 | 2015-04-28 14:39:00 +0200 | [diff] [blame] | 409 | TEST_P(BweSimulation, PacedSelfFairness1000msTest) { |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 410 | const int64_t kAverageOffsetMs = 20 * 1000; |
| 411 | const int kNumRmcatFlows = 4; |
| 412 | int64_t offsets_ms[kNumRmcatFlows]; |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 413 | offsets_ms[0] = random_.Rand(2 * kAverageOffsetMs); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 414 | for (int i = 1; i < kNumRmcatFlows; ++i) { |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 415 | offsets_ms[i] = offsets_ms[i - 1] + random_.Rand(2 * kAverageOffsetMs); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 416 | } |
| 417 | RunFairnessTest(GetParam(), 4, 0, 1000, 3000, 1000, 50, 0, offsets_ms); |
Stefan Holmer | bcbcd84 | 2015-04-28 14:39:00 +0200 | [diff] [blame] | 418 | } |
| 419 | |
| 420 | TEST_P(BweSimulation, TcpFairness50msTest) { |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 421 | const int64_t kAverageOffsetMs = 20 * 1000; |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 422 | int64_t offset_ms[] = {random_.Rand(2 * kAverageOffsetMs), 0}; |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 423 | RunFairnessTest(GetParam(), 1, 1, 1000, 2000, 50, 50, 0, offset_ms); |
Stefan Holmer | bcbcd84 | 2015-04-28 14:39:00 +0200 | [diff] [blame] | 424 | } |
| 425 | |
| 426 | TEST_P(BweSimulation, TcpFairness500msTest) { |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 427 | const int64_t kAverageOffsetMs = 20 * 1000; |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 428 | int64_t offset_ms[] = {random_.Rand(2 * kAverageOffsetMs), 0}; |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 429 | RunFairnessTest(GetParam(), 1, 1, 1000, 2000, 500, 50, 0, offset_ms); |
Stefan Holmer | bcbcd84 | 2015-04-28 14:39:00 +0200 | [diff] [blame] | 430 | } |
| 431 | |
| 432 | TEST_P(BweSimulation, TcpFairness1000msTest) { |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 433 | const int kAverageOffsetMs = 20 * 1000; |
terelius | 56b1128 | 2015-11-06 05:13:55 -0800 | [diff] [blame] | 434 | int64_t offset_ms[] = {random_.Rand(2 * kAverageOffsetMs), 0}; |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 435 | RunFairnessTest(GetParam(), 1, 1, 1000, 2000, 1000, 50, 0, offset_ms); |
| 436 | } |
| 437 | |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 438 | // The following test cases begin with "Evaluation" as a reference to the |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 439 | // Internet draft https://tools.ietf.org/html/draft-ietf-rmcat-eval-test-01. |
| 440 | |
| 441 | TEST_P(BweSimulation, Evaluation1) { |
| 442 | RunVariableCapacity1SingleFlow(GetParam()); |
| 443 | } |
| 444 | |
| 445 | TEST_P(BweSimulation, Evaluation2) { |
| 446 | const size_t kNumFlows = 2; |
| 447 | RunVariableCapacity2MultipleFlows(GetParam(), kNumFlows); |
| 448 | } |
| 449 | |
| 450 | TEST_P(BweSimulation, Evaluation3) { |
| 451 | RunBidirectionalFlow(GetParam()); |
| 452 | } |
| 453 | |
| 454 | TEST_P(BweSimulation, Evaluation4) { |
| 455 | RunSelfFairness(GetParam()); |
| 456 | } |
| 457 | |
| 458 | TEST_P(BweSimulation, Evaluation5) { |
| 459 | RunRoundTripTimeFairness(GetParam()); |
| 460 | } |
| 461 | |
| 462 | TEST_P(BweSimulation, Evaluation6) { |
| 463 | RunLongTcpFairness(GetParam()); |
| 464 | } |
| 465 | |
| 466 | // Different calls to the Evaluation7 will create the same FileSizes |
| 467 | // and StartingTimes as long as the seeds remain unchanged. This is essential |
| 468 | // when calling it with multiple estimators for comparison purposes. |
| 469 | TEST_P(BweSimulation, Evaluation7) { |
| 470 | const int kNumTcpFiles = 10; |
| 471 | RunMultipleShortTcpFairness(GetParam(), |
| 472 | BweTest::GetFileSizesBytes(kNumTcpFiles), |
| 473 | BweTest::GetStartingTimesMs(kNumTcpFiles)); |
| 474 | } |
| 475 | |
| 476 | TEST_P(BweSimulation, Evaluation8) { |
| 477 | RunPauseResumeFlows(GetParam()); |
| 478 | } |
| 479 | |
| 480 | // Following test cases begin with "GccComparison" run the |
| 481 | // evaluation test cases for both GCC and other calling RMCAT. |
| 482 | |
| 483 | TEST_P(BweSimulation, GccComparison1) { |
| 484 | RunVariableCapacity1SingleFlow(GetParam()); |
| 485 | BweTest gcc_test(false); |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 486 | gcc_test.RunVariableCapacity1SingleFlow(kSendSideEstimator); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 487 | } |
| 488 | |
| 489 | TEST_P(BweSimulation, GccComparison2) { |
| 490 | const size_t kNumFlows = 2; |
| 491 | RunVariableCapacity2MultipleFlows(GetParam(), kNumFlows); |
| 492 | BweTest gcc_test(false); |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 493 | gcc_test.RunVariableCapacity2MultipleFlows(kSendSideEstimator, kNumFlows); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 494 | } |
| 495 | |
| 496 | TEST_P(BweSimulation, GccComparison3) { |
| 497 | RunBidirectionalFlow(GetParam()); |
| 498 | BweTest gcc_test(false); |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 499 | gcc_test.RunBidirectionalFlow(kSendSideEstimator); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 500 | } |
| 501 | |
| 502 | TEST_P(BweSimulation, GccComparison4) { |
| 503 | RunSelfFairness(GetParam()); |
| 504 | BweTest gcc_test(false); |
| 505 | gcc_test.RunSelfFairness(GetParam()); |
| 506 | } |
| 507 | |
| 508 | TEST_P(BweSimulation, GccComparison5) { |
| 509 | RunRoundTripTimeFairness(GetParam()); |
| 510 | BweTest gcc_test(false); |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 511 | gcc_test.RunRoundTripTimeFairness(kSendSideEstimator); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 512 | } |
| 513 | |
| 514 | TEST_P(BweSimulation, GccComparison6) { |
| 515 | RunLongTcpFairness(GetParam()); |
| 516 | BweTest gcc_test(false); |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 517 | gcc_test.RunLongTcpFairness(kSendSideEstimator); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 518 | } |
| 519 | |
| 520 | TEST_P(BweSimulation, GccComparison7) { |
| 521 | const int kNumTcpFiles = 10; |
| 522 | |
| 523 | std::vector<int> tcp_file_sizes_bytes = |
| 524 | BweTest::GetFileSizesBytes(kNumTcpFiles); |
| 525 | std::vector<int64_t> tcp_starting_times_ms = |
| 526 | BweTest::GetStartingTimesMs(kNumTcpFiles); |
| 527 | |
| 528 | RunMultipleShortTcpFairness(GetParam(), tcp_file_sizes_bytes, |
| 529 | tcp_starting_times_ms); |
| 530 | |
| 531 | BweTest gcc_test(false); |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 532 | gcc_test.RunMultipleShortTcpFairness(kSendSideEstimator, tcp_file_sizes_bytes, |
| 533 | tcp_starting_times_ms); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 534 | } |
| 535 | |
| 536 | TEST_P(BweSimulation, GccComparison8) { |
| 537 | RunPauseResumeFlows(GetParam()); |
| 538 | BweTest gcc_test(false); |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 539 | gcc_test.RunPauseResumeFlows(kSendSideEstimator); |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 540 | } |
| 541 | |
| 542 | TEST_P(BweSimulation, GccComparisonChoke) { |
| 543 | int array[] = {1000, 500, 1000}; |
| 544 | std::vector<int> capacities_kbps(array, array + 3); |
| 545 | RunChoke(GetParam(), capacities_kbps); |
| 546 | |
| 547 | BweTest gcc_test(false); |
terelius | 2d81eb3 | 2016-10-25 07:04:37 -0700 | [diff] [blame] | 548 | gcc_test.RunChoke(kSendSideEstimator, capacities_kbps); |
Stefan Holmer | 3795937 | 2015-04-16 19:55:45 +0200 | [diff] [blame] | 549 | } |
Cesar Magalhaes | f69f1fb | 2015-05-30 17:49:18 +0200 | [diff] [blame] | 550 | |
stefan@webrtc.org | c88d336 | 2014-02-05 15:57:14 +0000 | [diff] [blame] | 551 | } // namespace bwe |
| 552 | } // namespace testing |
| 553 | } // namespace webrtc |
Cesar Magalhaes | 59adf34 | 2015-07-23 15:40:38 +0200 | [diff] [blame] | 554 | |