blob: 4ea4d0dc5f4db687edab63697781b5e492c91eb5 [file] [log] [blame]
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +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#include <stdio.h>
11
Sebastian Janssoncabe3832018-01-12 10:54:18 +010012#include "rtc_base/experiments/alr_experiment.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "test/field_trial.h"
14#include "test/gtest.h"
15#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000016
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000017namespace webrtc {
18
sprang89c4a7e2017-06-30 13:27:40 -070019namespace {
brandtrdd369c62016-11-16 23:56:57 -080020static const int kFullStackTestDurationSecs = 45;
sprang89c4a7e2017-06-30 13:27:40 -070021} // namespace
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000022
ivica5d6a06c2015-09-17 05:30:24 -070023class FullStackTest : public VideoQualityTest {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000024 public:
ivica5d6a06c2015-09-17 05:30:24 -070025 void RunTest(const VideoQualityTest::Params &params) {
26 RunWithAnalyzer(params);
pbos@webrtc.org94015242013-10-16 11:05:37 +000027 }
sprang89c4a7e2017-06-30 13:27:40 -070028
29 protected:
30 const std::string kScreenshareSimulcastExperiment =
31 "WebRTC-SimulcastScreenshare/Enabled/";
32 const std::string kAlrProbingExperiment =
Sebastian Janssoncabe3832018-01-12 10:54:18 +010033 std::string(AlrExperimentSettings::kScreenshareProbingBweExperimentName) +
ilnik2ae19db2017-08-31 04:46:45 -070034 "/1.1,2875,85,20,-20,0/";
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010035 const std::string kRoundRobinPacingQueueExperiment =
36 "WebRTC-RoundRobinPacing/Enabled/";
37 const std::string kPacerPushBackExperiment =
38 "WebRTC-PacerPushbackExperiment/Enabled/";
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000039};
40
sprangce4aef12015-11-02 07:23:20 -080041// VideoQualityTest::Params params = {
42// { ... }, // Common.
43// { ... }, // Video-specific settings.
44// { ... }, // Screenshare-specific settings.
45// { ... }, // Analyzer settings.
46// pipe, // FakeNetworkPipe::Config
47// { ... }, // Spatial scalability.
48// logs // bool
49// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000050
Peter Boström12996152016-05-14 02:03:18 +020051#if !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -080052TEST_F(FullStackTest, ForemanCifWithoutPacketLossVp9) {
brandtr93c5d032016-11-30 07:50:07 -080053 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
54 VideoQualityTest::Params foreman_cif;
55 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010056 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
57 700000, 700000, false, "VP9", 1,
58 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080059 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
60 kFullStackTestDurationSecs};
61 RunTest(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080062}
63
64TEST_F(FullStackTest, ForemanCifPlr5Vp9) {
brandtr93c5d032016-11-30 07:50:07 -080065 VideoQualityTest::Params foreman_cif;
66 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010067 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
68 500000, 2000000, false, "VP9", 1,
69 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080070 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_VP9", 0.0, 0.0,
71 kFullStackTestDurationSecs};
72 foreman_cif.pipe.loss_percent = 5;
73 foreman_cif.pipe.queue_delay_ms = 50;
74 RunTest(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080075}
Emircan Uysaler03e6ec92018-03-09 15:03:26 -080076
77TEST_F(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
78 VideoQualityTest::Params foreman_cif;
79 foreman_cif.call.send_side_bwe = true;
80 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
81 700000, 700000, false, "multiplex", 1,
82 0, 0, false, false, "foreman_cif"};
83 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
84 kFullStackTestDurationSecs};
85 RunTest(foreman_cif);
86}
87
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -070088TEST_F(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
89 VideoQualityTest::Params generator;
90 generator.call.send_side_bwe = true;
91 generator.video[0] = {true, 352, 288, 30, 700000,
92 700000, 700000, false, "multiplex", 1,
93 0, 0, false, false, "GeneratorI420A"};
94 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
95 kFullStackTestDurationSecs};
96 RunTest(generator);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -080097}
98
Peter Boström12996152016-05-14 02:03:18 +020099#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -0800100
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000101TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) {
minyue626bc952016-10-31 05:47:02 -0700102 VideoQualityTest::Params paris_qcif;
103 paris_qcif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100104 paris_qcif.video[0] = {true, 176, 144, 30, 300000,
105 300000, 300000, false, "VP8", 1,
106 0, 0, false, false, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -0700107 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
108 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000109 RunTest(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000110}
111
112TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) {
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000113 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
minyue626bc952016-10-31 05:47:02 -0700114 VideoQualityTest::Params foreman_cif;
115 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100116 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
117 700000, 700000, false, "VP8", 1,
118 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700119 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
120 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000121 RunTest(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000122}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000123
asaperssonfb6ad3b2016-12-16 06:54:01 -0800124TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketLoss) {
125 VideoQualityTest::Params foreman_cif;
126 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100127 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
128 30000, 30000, false, "VP8", 1,
129 0, 0, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800130 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0", 0.0, 0.0,
131 kFullStackTestDurationSecs};
132 RunTest(foreman_cif);
133}
134
sprang@webrtc.org343096a2015-02-23 08:34:17 +0000135TEST_F(FullStackTest, ForemanCifPlr5) {
minyue626bc952016-10-31 05:47:02 -0700136 VideoQualityTest::Params foreman_cif;
137 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100138 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
139 500000, 2000000, false, "VP8", 1,
140 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700141 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
142 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700143 foreman_cif.pipe.loss_percent = 5;
144 foreman_cif.pipe.queue_delay_ms = 50;
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000145 RunTest(foreman_cif);
146}
147
brandtr93c5d032016-11-30 07:50:07 -0800148TEST_F(FullStackTest, ForemanCifPlr5Ulpfec) {
149 VideoQualityTest::Params foreman_cif;
150 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100151 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
152 500000, 2000000, false, "VP8", 1,
153 0, 0, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800154 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_ulpfec", 0.0, 0.0,
155 kFullStackTestDurationSecs};
156 foreman_cif.pipe.loss_percent = 5;
157 foreman_cif.pipe.queue_delay_ms = 50;
158 RunTest(foreman_cif);
159}
160
161TEST_F(FullStackTest, ForemanCifPlr5Flexfec) {
162 VideoQualityTest::Params foreman_cif;
163 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100164 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
165 500000, 2000000, false, "VP8", 1,
166 0, 0, false, true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800167 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
168 kFullStackTestDurationSecs};
169 foreman_cif.pipe.loss_percent = 5;
170 foreman_cif.pipe.queue_delay_ms = 50;
171 RunTest(foreman_cif);
172}
173
stefan889d9652017-07-05 03:03:02 -0700174TEST_F(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
175 VideoQualityTest::Params foreman_cif;
176 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100177 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
178 500000, 2000000, false, "VP8", 1,
179 0, 0, false, true, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700180 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
181 0.0, kFullStackTestDurationSecs};
182 foreman_cif.pipe.loss_percent = 3;
183 foreman_cif.pipe.link_capacity_kbps = 500;
184 foreman_cif.pipe.queue_delay_ms = 50;
185 RunTest(foreman_cif);
186}
187
188TEST_F(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
189 VideoQualityTest::Params foreman_cif;
190 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100191 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
192 500000, 2000000, false, "VP8", 1,
193 0, 0, true, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700194 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
195 0.0, kFullStackTestDurationSecs};
196 foreman_cif.pipe.loss_percent = 3;
197 foreman_cif.pipe.link_capacity_kbps = 500;
198 foreman_cif.pipe.queue_delay_ms = 50;
199 RunTest(foreman_cif);
200}
201
brandtrdd369c62016-11-16 23:56:57 -0800202#if defined(WEBRTC_USE_H264)
203TEST_F(FullStackTest, ForemanCifWithoutPacketlossH264) {
brandtr93c5d032016-11-30 07:50:07 -0800204 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
205 VideoQualityTest::Params foreman_cif;
206 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100207 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
208 700000, 700000, false, "H264", 1,
209 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800210 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
211 kFullStackTestDurationSecs};
212 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800213}
214
asaperssonfb6ad3b2016-12-16 06:54:01 -0800215TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
216 VideoQualityTest::Params foreman_cif;
217 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100218 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
219 30000, 30000, false, "H264", 1,
220 0, 0, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800221 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
222 0.0, kFullStackTestDurationSecs};
223 RunTest(foreman_cif);
224}
225
brandtrdd369c62016-11-16 23:56:57 -0800226TEST_F(FullStackTest, ForemanCifPlr5H264) {
brandtr93c5d032016-11-30 07:50:07 -0800227 VideoQualityTest::Params foreman_cif;
228 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100229 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
230 500000, 2000000, false, "H264", 1,
231 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800232 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264", 0.0, 0.0,
233 kFullStackTestDurationSecs};
234 foreman_cif.pipe.loss_percent = 5;
235 foreman_cif.pipe.queue_delay_ms = 50;
236 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800237}
238
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100239TEST_F(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
240 test::ScopedFieldTrials override_field_trials(
241 "WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/");
242
243 VideoQualityTest::Params foreman_cif;
244 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100245 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
246 500000, 2000000, false, "H264", 1,
247 0, 0, false, false, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100248 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
249 0.0, kFullStackTestDurationSecs};
250 foreman_cif.pipe.loss_percent = 5;
251 foreman_cif.pipe.queue_delay_ms = 50;
252 RunTest(foreman_cif);
253}
254
brandtrdd369c62016-11-16 23:56:57 -0800255// Verify that this is worth the bot time, before enabling.
256TEST_F(FullStackTest, ForemanCifPlr5H264Flexfec) {
brandtr93c5d032016-11-30 07:50:07 -0800257 VideoQualityTest::Params foreman_cif;
258 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100259 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
260 500000, 2000000, false, "H264", 1,
261 0, 0, false, true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800262 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
263 kFullStackTestDurationSecs};
264 foreman_cif.pipe.loss_percent = 5;
265 foreman_cif.pipe.queue_delay_ms = 50;
266 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800267}
268
269// Ulpfec with H264 is an unsupported combination, so this test is only useful
270// for debugging. It is therefore disabled by default.
271TEST_F(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
brandtr93c5d032016-11-30 07:50:07 -0800272 VideoQualityTest::Params foreman_cif;
273 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100274 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
275 500000, 2000000, false, "H264", 1,
276 0, 0, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800277 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
278 kFullStackTestDurationSecs};
279 foreman_cif.pipe.loss_percent = 5;
280 foreman_cif.pipe.queue_delay_ms = 50;
281 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800282}
283#endif // defined(WEBRTC_USE_H264)
284
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000285TEST_F(FullStackTest, ForemanCif500kbps) {
minyue626bc952016-10-31 05:47:02 -0700286 VideoQualityTest::Params foreman_cif;
287 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100288 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
289 500000, 2000000, false, "VP8", 1,
290 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700291 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
292 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700293 foreman_cif.pipe.queue_length_packets = 0;
294 foreman_cif.pipe.queue_delay_ms = 0;
295 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000296 RunTest(foreman_cif);
297}
298
299TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700300 VideoQualityTest::Params foreman_cif;
301 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100302 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
303 500000, 2000000, false, "VP8", 1,
304 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700305 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
306 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700307 foreman_cif.pipe.queue_length_packets = 32;
308 foreman_cif.pipe.queue_delay_ms = 0;
309 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000310 RunTest(foreman_cif);
311}
312
313TEST_F(FullStackTest, ForemanCif500kbps100ms) {
minyue626bc952016-10-31 05:47:02 -0700314 VideoQualityTest::Params foreman_cif;
315 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100316 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
317 500000, 2000000, false, "VP8", 1,
318 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700319 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
320 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700321 foreman_cif.pipe.queue_length_packets = 0;
322 foreman_cif.pipe.queue_delay_ms = 100;
323 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000324 RunTest(foreman_cif);
325}
326
327TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700328 VideoQualityTest::Params foreman_cif;
329 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100330 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
331 500000, 2000000, false, "VP8", 1,
332 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700333 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
334 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700335 foreman_cif.pipe.queue_length_packets = 32;
336 foreman_cif.pipe.queue_delay_ms = 100;
337 foreman_cif.pipe.link_capacity_kbps = 500;
338 RunTest(foreman_cif);
339}
340
341TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
minyue626bc952016-10-31 05:47:02 -0700342 VideoQualityTest::Params foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800343 foreman_cif.call.send_side_bwe = false;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100344 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
345 500000, 2000000, false, "VP8", 1,
346 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800347 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
348 0.0, 0.0, kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700349 foreman_cif.pipe.queue_length_packets = 32;
350 foreman_cif.pipe.queue_delay_ms = 100;
351 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000352 RunTest(foreman_cif);
353}
354
355TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700356 VideoQualityTest::Params foreman_cif;
357 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100358 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
359 2000000, 2000000, false, "VP8", 1,
360 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700361 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
362 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700363 foreman_cif.pipe.queue_length_packets = 32;
364 foreman_cif.pipe.queue_delay_ms = 100;
365 foreman_cif.pipe.link_capacity_kbps = 1000;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000366 RunTest(foreman_cif);
367}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000368
sprangff19d352017-09-06 07:14:02 -0700369// TODO(sprang): Remove this if we have the similar ModerateLimits below?
stefanb1797672016-08-11 07:00:57 -0700370TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700371 VideoQualityTest::Params conf_motion_hd;
372 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100373 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000374 true, 1280, 720, 50, 30000,
375 3000000, 3000000, false, "VP8", 1,
376 0, 0, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700377 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
378 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700379 conf_motion_hd.pipe.queue_length_packets = 32;
380 conf_motion_hd.pipe.queue_delay_ms = 100;
381 conf_motion_hd.pipe.link_capacity_kbps = 2000;
382 RunTest(conf_motion_hd);
383}
384
sprangff19d352017-09-06 07:14:02 -0700385TEST_F(FullStackTest, ConferenceMotionHd1TLModerateLimits) {
386 VideoQualityTest::Params conf_motion_hd;
387 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100388 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000389 true, 1280, 720, 50, 30000,
390 3000000, 3000000, false, "VP8", 1,
391 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700392 conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0,
393 0.0, kFullStackTestDurationSecs};
394 conf_motion_hd.pipe.queue_length_packets = 50;
395 conf_motion_hd.pipe.loss_percent = 3;
396 conf_motion_hd.pipe.queue_delay_ms = 100;
397 conf_motion_hd.pipe.link_capacity_kbps = 2000;
398 RunTest(conf_motion_hd);
399}
400
401TEST_F(FullStackTest, ConferenceMotionHd2TLModerateLimits) {
402 VideoQualityTest::Params conf_motion_hd;
403 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100404 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000405 true, 1280, 720, 50, 30000,
406 3000000, 3000000, false, "VP8", 2,
407 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700408 conf_motion_hd.analyzer = {"conference_motion_hd_2tl_moderate_limits", 0.0,
409 0.0, kFullStackTestDurationSecs};
410 conf_motion_hd.pipe.queue_length_packets = 50;
411 conf_motion_hd.pipe.loss_percent = 3;
412 conf_motion_hd.pipe.queue_delay_ms = 100;
413 conf_motion_hd.pipe.link_capacity_kbps = 2000;
414 RunTest(conf_motion_hd);
415}
416
417TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
418 VideoQualityTest::Params conf_motion_hd;
419 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100420 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000421 true, 1280, 720, 50, 30000,
422 3000000, 3000000, false, "VP8", 3,
423 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700424 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
425 0.0, kFullStackTestDurationSecs};
426 conf_motion_hd.pipe.queue_length_packets = 50;
427 conf_motion_hd.pipe.loss_percent = 3;
428 conf_motion_hd.pipe.queue_delay_ms = 100;
429 conf_motion_hd.pipe.link_capacity_kbps = 2000;
430 RunTest(conf_motion_hd);
431}
432
433TEST_F(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
434 VideoQualityTest::Params conf_motion_hd;
435 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100436 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000437 true, 1280, 720, 50, 30000,
438 3000000, 3000000, false, "VP8", 4,
439 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700440 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
441 0.0, kFullStackTestDurationSecs};
442 conf_motion_hd.pipe.queue_length_packets = 50;
443 conf_motion_hd.pipe.loss_percent = 3;
444 conf_motion_hd.pipe.queue_delay_ms = 100;
445 conf_motion_hd.pipe.link_capacity_kbps = 2000;
446 RunTest(conf_motion_hd);
447}
448
449TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
450 test::ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
451 VideoQualityTest::Params conf_motion_hd;
452 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100453 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000454 true, 1280, 720, 50, 30000,
455 3000000, 3000000, false, "VP8", 3,
456 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700457 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
458 0.0, 0.0, kFullStackTestDurationSecs};
459 conf_motion_hd.pipe.queue_length_packets = 50;
460 conf_motion_hd.pipe.loss_percent = 3;
461 conf_motion_hd.pipe.queue_delay_ms = 100;
462 conf_motion_hd.pipe.link_capacity_kbps = 2000;
463 RunTest(conf_motion_hd);
464}
465
jianj390e64d2017-02-03 09:51:23 -0800466#if !defined(RTC_DISABLE_VP9)
467TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
468 VideoQualityTest::Params conf_motion_hd;
469 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100470 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000471 true, 1280, 720, 50, 30000,
472 3000000, 3000000, false, "VP9", 1,
473 0, 0, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800474 conf_motion_hd.analyzer = {
475 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
476 kFullStackTestDurationSecs};
477 conf_motion_hd.pipe.queue_length_packets = 32;
478 conf_motion_hd.pipe.queue_delay_ms = 100;
479 conf_motion_hd.pipe.link_capacity_kbps = 2000;
480 RunTest(conf_motion_hd);
481}
482#endif
483
ivica7bd242e2015-10-06 02:04:06 -0700484TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL) {
minyue626bc952016-10-31 05:47:02 -0700485 VideoQualityTest::Params screenshare;
486 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100487 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
488 200000, 2000000, false, "VP8", 2,
489 1, 400000, false, false, ""};
490 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700491 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
492 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700493 RunTest(screenshare);
Erik SprĂ¥ng6ee69aa2015-09-03 15:58:05 +0200494}
495
ilnikcb8c1462017-03-09 09:23:30 -0800496TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
sprang89c4a7e2017-06-30 13:27:40 -0700497 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment);
ilnikcb8c1462017-03-09 09:23:30 -0800498 VideoQualityTest::Params screenshare;
499 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100500 screenshare.screenshare[0] = {true, false, 10};
501 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
502 2500000, 2500000, false, "VP8", 3,
503 2, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800504 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
505 kFullStackTestDurationSecs};
506 VideoQualityTest::Params screenshare_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100507 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
508 2500000, 2500000, false, "VP8", 3,
509 0, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800510 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100511 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
512 200000, 2000000, false, "VP8", 2,
513 0, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800514
515 std::vector<VideoStream> streams = {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100516 DefaultVideoStream(screenshare_params_low, 0),
517 DefaultVideoStream(screenshare_params_high, 0)};
518 screenshare.ss[0] = {streams, 1, 1, 0, std::vector<SpatialLayer>(), false};
ilnikcb8c1462017-03-09 09:23:30 -0800519 RunTest(screenshare);
520}
521
ivica7bd242e2015-10-06 02:04:06 -0700522TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
minyue626bc952016-10-31 05:47:02 -0700523 VideoQualityTest::Params config;
524 config.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100525 config.video[0] = {true, 1850, 1110 / 2, 5, 50000,
526 200000, 2000000, false, "VP8", 2,
527 1, 400000, false, false, ""};
528 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700529 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
530 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700531 RunTest(config);
ivica028cf482015-07-30 02:15:56 -0700532}
533
sprangee37de32015-11-23 06:10:23 -0800534TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
minyue626bc952016-10-31 05:47:02 -0700535 VideoQualityTest::Params screenshare;
536 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100537 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
538 200000, 2000000, false, "VP8", 2,
539 1, 400000, false, false, ""};
540 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700541 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
542 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800543 screenshare.pipe.loss_percent = 5;
544 screenshare.pipe.queue_delay_ms = 200;
545 screenshare.pipe.link_capacity_kbps = 500;
546 RunTest(screenshare);
547}
548
549TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
minyue626bc952016-10-31 05:47:02 -0700550 VideoQualityTest::Params screenshare;
551 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100552 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
553 200000, 2000000, false, "VP8", 2,
554 1, 400000, false, false, ""};
555 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700556 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
557 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800558 screenshare.pipe.loss_percent = 10;
559 screenshare.pipe.queue_delay_ms = 200;
560 screenshare.pipe.link_capacity_kbps = 500;
561 RunTest(screenshare);
562}
563
sprange566e172017-06-08 01:29:15 -0700564TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
565 VideoQualityTest::Params screenshare;
566 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100567 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
568 200000, 2000000, false, "VP8", 2,
569 1, 400000, false, false, ""};
570 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700571 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
572 kFullStackTestDurationSecs};
573 screenshare.pipe.loss_percent = 5;
574 screenshare.pipe.link_capacity_kbps = 200;
575 screenshare.pipe.queue_length_packets = 30;
576
577 RunTest(screenshare);
578}
579
sprang89c4a7e2017-06-30 13:27:40 -0700580TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
581 VideoQualityTest::Params screenshare;
582 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100583 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
584 200000, 2000000, false, "VP8", 2,
585 1, 400000, false, false, ""};
586 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700587 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
588 kFullStackTestDurationSecs};
589 screenshare.pipe.loss_percent = 1;
590 screenshare.pipe.link_capacity_kbps = 1200;
591 screenshare.pipe.queue_length_packets = 30;
592
593 RunTest(screenshare);
594}
595
596// TODO(sprang): Retire these tests once experiment is removed.
597TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue_ALR) {
598 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
599 VideoQualityTest::Params screenshare;
600 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100601 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
602 200000, 2000000, false, "VP8", 2,
603 1, 400000, false, false, ""};
604 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700605 screenshare.analyzer = {"screenshare_slides_lossy_limited_ALR", 0.0, 0.0,
606 kFullStackTestDurationSecs};
607 screenshare.pipe.loss_percent = 5;
608 screenshare.pipe.link_capacity_kbps = 200;
609 screenshare.pipe.queue_length_packets = 30;
610
611 RunTest(screenshare);
612}
613
614TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ALR) {
615 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
616 VideoQualityTest::Params screenshare;
617 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100618 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
619 200000, 2000000, false, "VP8", 2,
620 1, 400000, false, false, ""};
621 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700622 screenshare.analyzer = {"screenshare_slides_ALR", 0.0, 0.0,
623 kFullStackTestDurationSecs};
624 RunTest(screenshare);
625}
626
627TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted_ALR) {
628 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
629 VideoQualityTest::Params screenshare;
630 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100631 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
632 200000, 2000000, false, "VP8", 2,
633 1, 400000, false, false, ""};
634 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700635 screenshare.analyzer = {"screenshare_slides_moderately_restricted_ALR", 0.0,
636 0.0, kFullStackTestDurationSecs};
637 screenshare.pipe.loss_percent = 1;
638 screenshare.pipe.link_capacity_kbps = 1200;
639 screenshare.pipe.queue_length_packets = 30;
640
641 RunTest(screenshare);
642}
643
644TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast_ALR) {
645 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment +
646 kAlrProbingExperiment);
647 VideoQualityTest::Params screenshare;
648 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100649 screenshare.screenshare[0] = {true, false, 10};
650 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
651 2500000, 2500000, false, "VP8", 3,
652 2, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700653 screenshare.analyzer = {"screenshare_slides_simulcast_alr", 0.0, 0.0,
654 kFullStackTestDurationSecs};
655 VideoQualityTest::Params screenshare_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100656 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
657 2500000, 2500000, false, "VP8", 3,
658 0, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700659 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100660 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
661 200000, 2000000, false, "VP8", 2,
662 0, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700663
664 std::vector<VideoStream> streams = {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100665 DefaultVideoStream(screenshare_params_low, 0),
666 DefaultVideoStream(screenshare_params_high, 0)};
667 screenshare.ss[0] = {streams, 1, 1, 0, std::vector<SpatialLayer>(), false};
sprang89c4a7e2017-06-30 13:27:40 -0700668 RunTest(screenshare);
669}
670
ilnik566c43b2017-03-07 04:42:54 -0800671const VideoQualityTest::Params::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000672 true, 1280, 720, 30, 800000,
673 2500000, 2500000, false, "VP9", 3,
674 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800675
676const VideoQualityTest::Params::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000677 true, 1280, 720, 30, 800000,
678 2500000, 2500000, false, "VP8", 3,
679 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800680
681const VideoQualityTest::Params::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000682 true, 640, 360, 30, 150000,
683 500000, 700000, false, "VP8", 3,
684 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800685
686const VideoQualityTest::Params::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000687 true, 320, 180, 30, 30000,
688 150000, 200000, false, "VP8", 3,
689 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800690
Peter Boström12996152016-05-14 02:03:18 +0200691#if !defined(RTC_DISABLE_VP9)
marpan5f4aaeb2017-04-06 10:52:23 -0700692TEST_F(FullStackTest, ScreenshareSlidesVP9_2SL) {
minyue626bc952016-10-31 05:47:02 -0700693 VideoQualityTest::Params screenshare;
694 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100695 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
696 200000, 2000000, false, "VP9", 1,
697 0, 400000, false, false, ""};
698 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700699 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
700 kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100701 screenshare.ss[0] = {std::vector<VideoStream>(), 0, 2, 1,
702 std::vector<SpatialLayer>(), false};
ivica5d6a06c2015-09-17 05:30:24 -0700703 RunTest(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000704}
ilnik2a8c2f52017-02-15 02:23:28 -0800705
706TEST_F(FullStackTest, VP9SVC_3SL_High) {
707 VideoQualityTest::Params simulcast;
708 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100709 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800710 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
711 kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100712 simulcast.ss[0] = {std::vector<VideoStream>(), 0, 3, 2,
713 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800714 RunTest(simulcast);
715}
716
717TEST_F(FullStackTest, VP9SVC_3SL_Medium) {
718 VideoQualityTest::Params simulcast;
719 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100720 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800721 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
722 kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100723 simulcast.ss[0] = {std::vector<VideoStream>(), 0, 3, 1,
724 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800725 RunTest(simulcast);
726}
727
728TEST_F(FullStackTest, VP9SVC_3SL_Low) {
729 VideoQualityTest::Params simulcast;
730 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100731 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800732 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100733 simulcast.ss[0] = {std::vector<VideoStream>(), 0, 3, 0,
734 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800735 RunTest(simulcast);
736}
Peter Boström12996152016-05-14 02:03:18 +0200737#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800738
ilnik6b826ef2017-06-16 06:53:48 -0700739// Android bots can't handle FullHD, so disable the test.
ilnik267041c2017-06-27 07:21:01 -0700740#if defined(WEBRTC_ANDROID)
ilnik6b826ef2017-06-16 06:53:48 -0700741#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
742#else
743#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
744#endif
745
746TEST_F(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
747 VideoQualityTest::Params simulcast;
748 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100749 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
750 2500000, 2500000, false, "VP8", 3,
751 2, 400000, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -0700752 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
753 kFullStackTestDurationSecs};
754 simulcast.pipe.loss_percent = 0;
755 simulcast.pipe.queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100756 std::vector<VideoStream> streams = {DefaultVideoStream(simulcast, 0),
757 DefaultVideoStream(simulcast, 0),
758 DefaultVideoStream(simulcast, 0)};
759 simulcast.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), true};
ilnik6b826ef2017-06-16 06:53:48 -0700760 webrtc::test::ScopedFieldTrials override_trials(
761 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/");
762 RunTest(simulcast);
763}
764
ilnik3dd5ad92017-02-09 04:58:53 -0800765TEST_F(FullStackTest, SimulcastVP8_3SL_High) {
766 VideoQualityTest::Params simulcast;
767 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100768 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800769 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800770 kFullStackTestDurationSecs};
771 simulcast.pipe.loss_percent = 0;
772 simulcast.pipe.queue_delay_ms = 100;
773 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100774 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800775 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100776 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800777 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100778 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800779
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100780 std::vector<VideoStream> streams = {
781 DefaultVideoStream(video_params_low, 0),
782 DefaultVideoStream(video_params_medium, 0),
783 DefaultVideoStream(video_params_high, 0)};
784 simulcast.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -0800785 RunTest(simulcast);
786}
787
788TEST_F(FullStackTest, SimulcastVP8_3SL_Medium) {
789 VideoQualityTest::Params simulcast;
790 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100791 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800792 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800793 kFullStackTestDurationSecs};
794 simulcast.pipe.loss_percent = 0;
795 simulcast.pipe.queue_delay_ms = 100;
796 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100797 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800798 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100799 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800800 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100801 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800802
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100803 std::vector<VideoStream> streams = {
804 DefaultVideoStream(video_params_low, 0),
805 DefaultVideoStream(video_params_medium, 0),
806 DefaultVideoStream(video_params_high, 0)};
807 simulcast.ss[0] = {streams, 1, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -0800808 RunTest(simulcast);
809}
810
811TEST_F(FullStackTest, SimulcastVP8_3SL_Low) {
812 VideoQualityTest::Params simulcast;
813 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100814 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800815 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800816 kFullStackTestDurationSecs};
817 simulcast.pipe.loss_percent = 0;
818 simulcast.pipe.queue_delay_ms = 100;
819 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100820 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800821 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100822 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800823 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100824 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800825
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100826 std::vector<VideoStream> streams = {
827 DefaultVideoStream(video_params_low, 0),
828 DefaultVideoStream(video_params_medium, 0),
829 DefaultVideoStream(video_params_high, 0)};
830 simulcast.ss[0] = {streams, 0, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -0800831 RunTest(simulcast);
832}
833
ilnika014cc52017-03-07 04:21:04 -0800834TEST_F(FullStackTest, LargeRoomVP8_5thumb) {
835 VideoQualityTest::Params large_room;
836 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100837 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800838 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
839 kFullStackTestDurationSecs};
840 large_room.pipe.loss_percent = 0;
841 large_room.pipe.queue_delay_ms = 100;
842 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100843 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800844 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100845 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800846 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100847 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800848
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100849 std::vector<VideoStream> streams = {
850 DefaultVideoStream(video_params_low, 0),
851 DefaultVideoStream(video_params_medium, 0),
852 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700853 large_room.call.num_thumbnails = 5;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100854 large_room.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -0800855 RunTest(large_room);
856}
857
oprypin743117f2017-09-15 05:24:24 -0700858#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
859// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -0800860// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
861#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800862#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800863#else
864#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800865#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800866#endif
867
868TEST_F(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
ilnika014cc52017-03-07 04:21:04 -0800869 VideoQualityTest::Params large_room;
870 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100871 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800872 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
873 kFullStackTestDurationSecs};
874 large_room.pipe.loss_percent = 0;
875 large_room.pipe.queue_delay_ms = 100;
876 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100877 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800878 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100879 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800880 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100881 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800882
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100883 std::vector<VideoStream> streams = {
884 DefaultVideoStream(video_params_low, 0),
885 DefaultVideoStream(video_params_medium, 0),
886 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700887 large_room.call.num_thumbnails = 15;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100888 large_room.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -0800889 RunTest(large_room);
890}
891
ilnika014cc52017-03-07 04:21:04 -0800892TEST_F(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
893 VideoQualityTest::Params large_room;
894 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100895 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800896 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
897 kFullStackTestDurationSecs};
898 large_room.pipe.loss_percent = 0;
899 large_room.pipe.queue_delay_ms = 100;
900 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100901 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800902 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100903 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800904 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100905 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800906
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100907 std::vector<VideoStream> streams = {
908 DefaultVideoStream(video_params_low, 0),
909 DefaultVideoStream(video_params_medium, 0),
910 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700911 large_room.call.num_thumbnails = 50;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100912 large_room.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -0800913 RunTest(large_room);
914}
915
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100916class DualStreamsTest : public FullStackTest,
917 public ::testing::WithParamInterface<int> {};
918
919// Disable dual video test on mobile device becuase it's too heavy.
920#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
921TEST_P(DualStreamsTest,
922 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
923 test::ScopedFieldTrials field_trial(
924 kScreenshareSimulcastExperiment + kAlrProbingExperiment +
925 kRoundRobinPacingQueueExperiment + kPacerPushBackExperiment);
926 const int first_stream = GetParam();
927 VideoQualityTest::Params dual_streams;
928
929 // Screenshare Settings.
930 dual_streams.screenshare[first_stream] = {true, false, 10};
931 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
932 2500000, 2500000, false, "VP8", 3,
933 2, 400000, false, false, ""};
934
935 VideoQualityTest::Params screenshare_params_high;
936 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
937 2500000, 2500000, false, "VP8", 3,
938 0, 400000, false, false, ""};
939 VideoQualityTest::Params screenshare_params_low;
940 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
941 200000, 2000000, false, "VP8", 2,
942 0, 400000, false, false, ""};
943 std::vector<VideoStream> screenhsare_streams = {
944 DefaultVideoStream(screenshare_params_low, 0),
945 DefaultVideoStream(screenshare_params_high, 0)};
946
947 dual_streams.ss[first_stream] = {screenhsare_streams, 1, 1, 0,
948 std::vector<SpatialLayer>(), false};
949
950 // Video settings.
951 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
952
953 VideoQualityTest::Params video_params_high;
954 video_params_high.video[0] = kSimulcastVp8VideoHigh;
955 VideoQualityTest::Params video_params_medium;
956 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
957 VideoQualityTest::Params video_params_low;
958 video_params_low.video[0] = kSimulcastVp8VideoLow;
959 std::vector<VideoStream> streams = {
960 DefaultVideoStream(video_params_low, 0),
961 DefaultVideoStream(video_params_medium, 0),
962 DefaultVideoStream(video_params_high, 0)};
963
964 dual_streams.ss[1 - first_stream] = {
965 streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
966
967 // Call settings.
968 dual_streams.call.send_side_bwe = true;
969 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +0100970 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
971 std::to_string(first_stream);
972 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100973 dual_streams.pipe.loss_percent = 1;
974 dual_streams.pipe.link_capacity_kbps = 7500;
975 dual_streams.pipe.queue_length_packets = 30;
976 dual_streams.pipe.queue_delay_ms = 100;
977
978 RunTest(dual_streams);
979}
980#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
981
982TEST_P(DualStreamsTest, Conference_Restricted) {
983 test::ScopedFieldTrials field_trial(kRoundRobinPacingQueueExperiment +
984 kPacerPushBackExperiment);
985 const int first_stream = GetParam();
986 VideoQualityTest::Params dual_streams;
987
988 // Screenshare Settings.
989 dual_streams.screenshare[first_stream] = {true, false, 10};
990 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
991 2500000, 2500000, false, "VP8", 3,
992 2, 400000, false, false, ""};
993 // Video settings.
994 dual_streams.video[1 - first_stream] = {
995 true, 1280, 720, 30, 150000,
996 500000, 700000, false, "VP8", 3,
997 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
998
999 // Call settings.
1000 dual_streams.call.send_side_bwe = true;
1001 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001002 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1003 std::to_string(first_stream);
1004 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001005 dual_streams.pipe.loss_percent = 1;
1006 dual_streams.pipe.link_capacity_kbps = 5000;
1007 dual_streams.pipe.queue_length_packets = 30;
1008 dual_streams.pipe.queue_delay_ms = 100;
1009
1010 RunTest(dual_streams);
1011}
1012
1013INSTANTIATE_TEST_CASE_P(FullStackTest,
1014 DualStreamsTest,
1015 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -08001016
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001017} // namespace webrtc