blob: 3d86fbb1f86c8a22d87443c58bcae91babe040a2 [file] [log] [blame]
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +00001/*
2 * Copyright (c) 2013 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
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +000011#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +000012#include "webrtc/modules/remote_bitrate_estimator/test/bwe_test.h"
stefan@webrtc.orgef6a6022014-01-24 10:00:27 +000013#include "webrtc/test/testsupport/fileutils.h"
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +000014
15namespace webrtc {
16namespace testing {
17namespace bwe {
stefan@webrtc.org76dcaae2014-02-03 16:33:50 +000018std::vector<const PacketSenderFactory*> VideoSenderFactories(uint32_t count) {
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +000019 static const VideoPacketSenderFactory factories[] = {
20 VideoPacketSenderFactory(30.00f, 150, 0x1234, 0.13f),
21 VideoPacketSenderFactory(15.00f, 500, 0x2345, 0.16f),
22 VideoPacketSenderFactory(30.00f, 1200, 0x3456, 0.26f),
23 VideoPacketSenderFactory(7.49f, 150, 0x4567, 0.05f),
24 VideoPacketSenderFactory(7.50f, 150, 0x5678, 0.15f),
25 VideoPacketSenderFactory(7.51f, 150, 0x6789, 0.25f),
26 VideoPacketSenderFactory(15.02f, 150, 0x7890, 0.27f),
27 VideoPacketSenderFactory(15.03f, 150, 0x8901, 0.38f),
28 VideoPacketSenderFactory(30.02f, 150, 0x9012, 0.39f),
29 VideoPacketSenderFactory(30.03f, 150, 0x0123, 0.52f)
30 };
stefan@webrtc.org76dcaae2014-02-03 16:33:50 +000031
32 assert(count <= sizeof(factories) / sizeof(factories[0]));
33
34 std::vector<const PacketSenderFactory*> result;
35 for (uint32_t i = 0; i < count; ++i) {
36 result.push_back(&factories[i]);
37 }
38
39 return result;
40}
41
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +000042std::vector<BweTestConfig::EstimatorConfig> EstimatorConfigs() {
43 static const RemoteBitrateEstimatorFactory factories[] = {
44 RemoteBitrateEstimatorFactory(),
45 AbsoluteSendTimeRemoteBitrateEstimatorFactory()
46 };
47
48 std::vector<BweTestConfig::EstimatorConfig> result;
49 result.push_back(BweTestConfig::EstimatorConfig("TOF", &factories[0]));
50 result.push_back(BweTestConfig::EstimatorConfig("AST", &factories[1]));
51 return result;
52}
53
54BweTestConfig MakeBweTestConfig(uint32_t sender_count) {
55 BweTestConfig result = {
56 VideoSenderFactories(sender_count), EstimatorConfigs()
57 };
58 return result;
59}
60
61INSTANTIATE_TEST_CASE_P(VideoSendersTest, BweTest,
62 ::testing::Values(MakeBweTestConfig(1),
63 MakeBweTestConfig(3)));
64
65TEST_P(BweTest, UnlimitedSpeed) {
66 VerboseLogging(false);
67 RunFor(10 * 60 * 1000);
68}
69
70TEST_P(BweTest, SteadyLoss) {
71 LossFilter loss(this);
72 loss.SetLoss(20.0);
73 RunFor(10 * 60 * 1000);
74}
75
76TEST_P(BweTest, IncreasingLoss1) {
77 LossFilter loss(this);
78 for (int i = 0; i < 76; ++i) {
79 loss.SetLoss(i);
80 RunFor(5000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +000081 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +000082}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +000083
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +000084TEST_P(BweTest, SteadyDelay) {
85 DelayFilter delay(this);
86 delay.SetDelay(1000);
87 RunFor(10 * 60 * 1000);
88}
89
90TEST_P(BweTest, IncreasingDelay1) {
91 DelayFilter delay(this);
92 RunFor(10 * 60 * 1000);
93 for (int i = 0; i < 30 * 2; ++i) {
94 delay.SetDelay(i);
95 RunFor(10 * 1000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +000096 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +000097 RunFor(10 * 60 * 1000);
98}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +000099
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000100TEST_P(BweTest, IncreasingDelay2) {
101 DelayFilter delay(this);
102 RateCounterFilter counter(this);
103 RunFor(1 * 60 * 1000);
104 for (int i = 1; i < 51; ++i) {
105 delay.SetDelay(10.0f * i);
106 RunFor(10 * 1000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000107 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000108 delay.SetDelay(0.0f);
109 RunFor(10 * 60 * 1000);
110}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000111
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000112TEST_P(BweTest, JumpyDelay1) {
113 DelayFilter delay(this);
114 RunFor(10 * 60 * 1000);
115 for (int i = 1; i < 200; ++i) {
116 delay.SetDelay((10 * i) % 500);
117 RunFor(1000);
118 delay.SetDelay(1.0f);
119 RunFor(1000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000120 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000121 delay.SetDelay(0.0f);
122 RunFor(10 * 60 * 1000);
123}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000124
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000125TEST_P(BweTest, SteadyJitter) {
126 JitterFilter jitter(this);
127 RateCounterFilter counter(this);
128 jitter.SetJitter(20);
129 RunFor(2 * 60 * 1000);
130}
131
132TEST_P(BweTest, IncreasingJitter1) {
133 JitterFilter jitter(this);
134 for (int i = 0; i < 2 * 60 * 2; ++i) {
135 jitter.SetJitter(i);
136 RunFor(10 * 1000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000137 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000138 RunFor(10 * 60 * 1000);
139}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000140
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000141TEST_P(BweTest, IncreasingJitter2) {
142 JitterFilter jitter(this);
143 RunFor(30 * 1000);
144 for (int i = 1; i < 51; ++i) {
145 jitter.SetJitter(10.0f * i);
146 RunFor(10 * 1000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000147 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000148 jitter.SetJitter(0.0f);
149 RunFor(10 * 60 * 1000);
150}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000151
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000152TEST_P(BweTest, SteadyReorder) {
153 ReorderFilter reorder(this);
154 reorder.SetReorder(20.0);
155 RunFor(10 * 60 * 1000);
156}
157
158TEST_P(BweTest, IncreasingReorder1) {
159 ReorderFilter reorder(this);
160 for (int i = 0; i < 76; ++i) {
161 reorder.SetReorder(i);
162 RunFor(5000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000163 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000164}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000165
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000166TEST_P(BweTest, SteadyChoke) {
167 ChokeFilter choke(this);
168 choke.SetCapacity(140);
169 RunFor(10 * 60 * 1000);
170}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000171
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000172TEST_P(BweTest, IncreasingChoke1) {
173 ChokeFilter choke(this);
174 for (int i = 1200; i >= 100; i -= 100) {
175 choke.SetCapacity(i);
176 RunFor(5000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000177 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000178}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000179
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000180TEST_P(BweTest, IncreasingChoke2) {
181 ChokeFilter choke(this);
182 RunFor(60 * 1000);
183 for (int i = 1200; i >= 100; i -= 20) {
184 choke.SetCapacity(i);
185 RunFor(1000);
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000186 }
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000187}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000188
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000189TEST_P(BweTest, Multi1) {
190 DelayFilter delay(this);
191 ChokeFilter choke(this);
192 RateCounterFilter counter(this);
193 choke.SetCapacity(1000);
194 RunFor(1 * 60 * 1000);
195 for (int i = 1; i < 51; ++i) {
196 delay.SetDelay(100.0f * i);
197 RunFor(10 * 1000);
198 }
199 RunFor(500 * 1000);
200 delay.SetDelay(0.0f);
201 RunFor(5 * 60 * 1000);
202}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000203
solenberg@webrtc.orgcda3cf32013-11-28 10:11:35 +0000204TEST_P(BweTest, Multi2) {
205 ChokeFilter choke(this);
206 JitterFilter jitter(this);
207 RateCounterFilter counter(this);
208 choke.SetCapacity(2000);
209 jitter.SetJitter(120);
210 RunFor(5 * 60 * 1000);
211}
solenberg@webrtc.org4b3ff2d2013-10-21 14:23:26 +0000212} // namespace bwe
213} // namespace testing
214} // namespace webrtc