blob: 9e478e79a856816b4ca5cc9d33dc89429a432400 [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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020012#include "modules/pacing/alr_detector.h"
13#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 =
33 std::string(AlrDetector::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}
Peter Boström12996152016-05-14 02:03:18 +020076#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -080077
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000078TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) {
minyue626bc952016-10-31 05:47:02 -070079 VideoQualityTest::Params paris_qcif;
80 paris_qcif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010081 paris_qcif.video[0] = {true, 176, 144, 30, 300000,
82 300000, 300000, false, "VP8", 1,
83 0, 0, false, false, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -070084 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
85 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000086 RunTest(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000087}
88
89TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) {
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000090 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
minyue626bc952016-10-31 05:47:02 -070091 VideoQualityTest::Params foreman_cif;
92 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010093 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
94 700000, 700000, false, "VP8", 1,
95 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -070096 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
97 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000098 RunTest(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000099}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000100
asaperssonfb6ad3b2016-12-16 06:54:01 -0800101TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketLoss) {
102 VideoQualityTest::Params foreman_cif;
103 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100104 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
105 30000, 30000, false, "VP8", 1,
106 0, 0, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800107 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0", 0.0, 0.0,
108 kFullStackTestDurationSecs};
109 RunTest(foreman_cif);
110}
111
sprang@webrtc.org343096a2015-02-23 08:34:17 +0000112TEST_F(FullStackTest, ForemanCifPlr5) {
minyue626bc952016-10-31 05:47:02 -0700113 VideoQualityTest::Params foreman_cif;
114 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100115 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
116 500000, 2000000, false, "VP8", 1,
117 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700118 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
119 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700120 foreman_cif.pipe.loss_percent = 5;
121 foreman_cif.pipe.queue_delay_ms = 50;
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000122 RunTest(foreman_cif);
123}
124
brandtr93c5d032016-11-30 07:50:07 -0800125TEST_F(FullStackTest, ForemanCifPlr5Ulpfec) {
126 VideoQualityTest::Params foreman_cif;
127 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100128 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
129 500000, 2000000, false, "VP8", 1,
130 0, 0, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800131 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_ulpfec", 0.0, 0.0,
132 kFullStackTestDurationSecs};
133 foreman_cif.pipe.loss_percent = 5;
134 foreman_cif.pipe.queue_delay_ms = 50;
135 RunTest(foreman_cif);
136}
137
138TEST_F(FullStackTest, ForemanCifPlr5Flexfec) {
139 VideoQualityTest::Params foreman_cif;
140 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100141 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
142 500000, 2000000, false, "VP8", 1,
143 0, 0, false, true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800144 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
145 kFullStackTestDurationSecs};
146 foreman_cif.pipe.loss_percent = 5;
147 foreman_cif.pipe.queue_delay_ms = 50;
148 RunTest(foreman_cif);
149}
150
stefan889d9652017-07-05 03:03:02 -0700151TEST_F(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
152 VideoQualityTest::Params foreman_cif;
153 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100154 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
155 500000, 2000000, false, "VP8", 1,
156 0, 0, false, true, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700157 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
158 0.0, kFullStackTestDurationSecs};
159 foreman_cif.pipe.loss_percent = 3;
160 foreman_cif.pipe.link_capacity_kbps = 500;
161 foreman_cif.pipe.queue_delay_ms = 50;
162 RunTest(foreman_cif);
163}
164
165TEST_F(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
166 VideoQualityTest::Params foreman_cif;
167 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100168 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
169 500000, 2000000, false, "VP8", 1,
170 0, 0, true, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700171 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
172 0.0, kFullStackTestDurationSecs};
173 foreman_cif.pipe.loss_percent = 3;
174 foreman_cif.pipe.link_capacity_kbps = 500;
175 foreman_cif.pipe.queue_delay_ms = 50;
176 RunTest(foreman_cif);
177}
178
brandtrdd369c62016-11-16 23:56:57 -0800179#if defined(WEBRTC_USE_H264)
180TEST_F(FullStackTest, ForemanCifWithoutPacketlossH264) {
brandtr93c5d032016-11-30 07:50:07 -0800181 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
182 VideoQualityTest::Params foreman_cif;
183 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100184 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
185 700000, 700000, false, "H264", 1,
186 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800187 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
188 kFullStackTestDurationSecs};
189 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800190}
191
asaperssonfb6ad3b2016-12-16 06:54:01 -0800192TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
193 VideoQualityTest::Params foreman_cif;
194 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100195 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
196 30000, 30000, false, "H264", 1,
197 0, 0, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800198 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
199 0.0, kFullStackTestDurationSecs};
200 RunTest(foreman_cif);
201}
202
brandtrdd369c62016-11-16 23:56:57 -0800203TEST_F(FullStackTest, ForemanCifPlr5H264) {
brandtr93c5d032016-11-30 07:50:07 -0800204 VideoQualityTest::Params foreman_cif;
205 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100206 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
207 500000, 2000000, false, "H264", 1,
208 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800209 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264", 0.0, 0.0,
210 kFullStackTestDurationSecs};
211 foreman_cif.pipe.loss_percent = 5;
212 foreman_cif.pipe.queue_delay_ms = 50;
213 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800214}
215
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100216TEST_F(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
217 test::ScopedFieldTrials override_field_trials(
218 "WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/");
219
220 VideoQualityTest::Params foreman_cif;
221 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100222 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
223 500000, 2000000, false, "H264", 1,
224 0, 0, false, false, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100225 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
226 0.0, kFullStackTestDurationSecs};
227 foreman_cif.pipe.loss_percent = 5;
228 foreman_cif.pipe.queue_delay_ms = 50;
229 RunTest(foreman_cif);
230}
231
brandtrdd369c62016-11-16 23:56:57 -0800232// Verify that this is worth the bot time, before enabling.
233TEST_F(FullStackTest, ForemanCifPlr5H264Flexfec) {
brandtr93c5d032016-11-30 07:50:07 -0800234 VideoQualityTest::Params foreman_cif;
235 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100236 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
237 500000, 2000000, false, "H264", 1,
238 0, 0, false, true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800239 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
240 kFullStackTestDurationSecs};
241 foreman_cif.pipe.loss_percent = 5;
242 foreman_cif.pipe.queue_delay_ms = 50;
243 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800244}
245
246// Ulpfec with H264 is an unsupported combination, so this test is only useful
247// for debugging. It is therefore disabled by default.
248TEST_F(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
brandtr93c5d032016-11-30 07:50:07 -0800249 VideoQualityTest::Params foreman_cif;
250 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100251 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
252 500000, 2000000, false, "H264", 1,
253 0, 0, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800254 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
255 kFullStackTestDurationSecs};
256 foreman_cif.pipe.loss_percent = 5;
257 foreman_cif.pipe.queue_delay_ms = 50;
258 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800259}
260#endif // defined(WEBRTC_USE_H264)
261
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000262TEST_F(FullStackTest, ForemanCif500kbps) {
minyue626bc952016-10-31 05:47:02 -0700263 VideoQualityTest::Params foreman_cif;
264 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100265 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
266 500000, 2000000, false, "VP8", 1,
267 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700268 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
269 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700270 foreman_cif.pipe.queue_length_packets = 0;
271 foreman_cif.pipe.queue_delay_ms = 0;
272 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000273 RunTest(foreman_cif);
274}
275
276TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700277 VideoQualityTest::Params foreman_cif;
278 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100279 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
280 500000, 2000000, false, "VP8", 1,
281 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700282 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
283 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700284 foreman_cif.pipe.queue_length_packets = 32;
285 foreman_cif.pipe.queue_delay_ms = 0;
286 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000287 RunTest(foreman_cif);
288}
289
290TEST_F(FullStackTest, ForemanCif500kbps100ms) {
minyue626bc952016-10-31 05:47:02 -0700291 VideoQualityTest::Params foreman_cif;
292 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100293 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
294 500000, 2000000, false, "VP8", 1,
295 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700296 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
297 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700298 foreman_cif.pipe.queue_length_packets = 0;
299 foreman_cif.pipe.queue_delay_ms = 100;
300 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000301 RunTest(foreman_cif);
302}
303
304TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700305 VideoQualityTest::Params foreman_cif;
306 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100307 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
308 500000, 2000000, false, "VP8", 1,
309 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700310 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
311 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700312 foreman_cif.pipe.queue_length_packets = 32;
313 foreman_cif.pipe.queue_delay_ms = 100;
314 foreman_cif.pipe.link_capacity_kbps = 500;
315 RunTest(foreman_cif);
316}
317
318TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
minyue626bc952016-10-31 05:47:02 -0700319 VideoQualityTest::Params foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800320 foreman_cif.call.send_side_bwe = false;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100321 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
322 500000, 2000000, false, "VP8", 1,
323 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800324 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
325 0.0, 0.0, kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700326 foreman_cif.pipe.queue_length_packets = 32;
327 foreman_cif.pipe.queue_delay_ms = 100;
328 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000329 RunTest(foreman_cif);
330}
331
332TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700333 VideoQualityTest::Params foreman_cif;
334 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100335 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
336 2000000, 2000000, false, "VP8", 1,
337 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700338 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
339 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700340 foreman_cif.pipe.queue_length_packets = 32;
341 foreman_cif.pipe.queue_delay_ms = 100;
342 foreman_cif.pipe.link_capacity_kbps = 1000;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000343 RunTest(foreman_cif);
344}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000345
sprangff19d352017-09-06 07:14:02 -0700346// TODO(sprang): Remove this if we have the similar ModerateLimits below?
stefanb1797672016-08-11 07:00:57 -0700347TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700348 VideoQualityTest::Params conf_motion_hd;
349 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100350 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000351 true, 1280, 720, 50, 30000,
352 3000000, 3000000, false, "VP8", 1,
353 0, 0, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700354 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
355 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700356 conf_motion_hd.pipe.queue_length_packets = 32;
357 conf_motion_hd.pipe.queue_delay_ms = 100;
358 conf_motion_hd.pipe.link_capacity_kbps = 2000;
359 RunTest(conf_motion_hd);
360}
361
sprangff19d352017-09-06 07:14:02 -0700362TEST_F(FullStackTest, ConferenceMotionHd1TLModerateLimits) {
363 VideoQualityTest::Params conf_motion_hd;
364 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100365 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000366 true, 1280, 720, 50, 30000,
367 3000000, 3000000, false, "VP8", 1,
368 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700369 conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0,
370 0.0, kFullStackTestDurationSecs};
371 conf_motion_hd.pipe.queue_length_packets = 50;
372 conf_motion_hd.pipe.loss_percent = 3;
373 conf_motion_hd.pipe.queue_delay_ms = 100;
374 conf_motion_hd.pipe.link_capacity_kbps = 2000;
375 RunTest(conf_motion_hd);
376}
377
378TEST_F(FullStackTest, ConferenceMotionHd2TLModerateLimits) {
379 VideoQualityTest::Params conf_motion_hd;
380 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100381 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000382 true, 1280, 720, 50, 30000,
383 3000000, 3000000, false, "VP8", 2,
384 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700385 conf_motion_hd.analyzer = {"conference_motion_hd_2tl_moderate_limits", 0.0,
386 0.0, kFullStackTestDurationSecs};
387 conf_motion_hd.pipe.queue_length_packets = 50;
388 conf_motion_hd.pipe.loss_percent = 3;
389 conf_motion_hd.pipe.queue_delay_ms = 100;
390 conf_motion_hd.pipe.link_capacity_kbps = 2000;
391 RunTest(conf_motion_hd);
392}
393
394TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
395 VideoQualityTest::Params conf_motion_hd;
396 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100397 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000398 true, 1280, 720, 50, 30000,
399 3000000, 3000000, false, "VP8", 3,
400 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700401 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
402 0.0, kFullStackTestDurationSecs};
403 conf_motion_hd.pipe.queue_length_packets = 50;
404 conf_motion_hd.pipe.loss_percent = 3;
405 conf_motion_hd.pipe.queue_delay_ms = 100;
406 conf_motion_hd.pipe.link_capacity_kbps = 2000;
407 RunTest(conf_motion_hd);
408}
409
410TEST_F(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
411 VideoQualityTest::Params conf_motion_hd;
412 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100413 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000414 true, 1280, 720, 50, 30000,
415 3000000, 3000000, false, "VP8", 4,
416 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700417 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
418 0.0, kFullStackTestDurationSecs};
419 conf_motion_hd.pipe.queue_length_packets = 50;
420 conf_motion_hd.pipe.loss_percent = 3;
421 conf_motion_hd.pipe.queue_delay_ms = 100;
422 conf_motion_hd.pipe.link_capacity_kbps = 2000;
423 RunTest(conf_motion_hd);
424}
425
426TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
427 test::ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
428 VideoQualityTest::Params conf_motion_hd;
429 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100430 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000431 true, 1280, 720, 50, 30000,
432 3000000, 3000000, false, "VP8", 3,
433 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700434 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
435 0.0, 0.0, kFullStackTestDurationSecs};
436 conf_motion_hd.pipe.queue_length_packets = 50;
437 conf_motion_hd.pipe.loss_percent = 3;
438 conf_motion_hd.pipe.queue_delay_ms = 100;
439 conf_motion_hd.pipe.link_capacity_kbps = 2000;
440 RunTest(conf_motion_hd);
441}
442
jianj390e64d2017-02-03 09:51:23 -0800443#if !defined(RTC_DISABLE_VP9)
444TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
445 VideoQualityTest::Params conf_motion_hd;
446 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100447 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000448 true, 1280, 720, 50, 30000,
449 3000000, 3000000, false, "VP9", 1,
450 0, 0, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800451 conf_motion_hd.analyzer = {
452 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
453 kFullStackTestDurationSecs};
454 conf_motion_hd.pipe.queue_length_packets = 32;
455 conf_motion_hd.pipe.queue_delay_ms = 100;
456 conf_motion_hd.pipe.link_capacity_kbps = 2000;
457 RunTest(conf_motion_hd);
458}
459#endif
460
ivica7bd242e2015-10-06 02:04:06 -0700461TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL) {
minyue626bc952016-10-31 05:47:02 -0700462 VideoQualityTest::Params screenshare;
463 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100464 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
465 200000, 2000000, false, "VP8", 2,
466 1, 400000, false, false, ""};
467 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700468 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
469 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700470 RunTest(screenshare);
Erik SprĂ¥ng6ee69aa2015-09-03 15:58:05 +0200471}
472
ilnikcb8c1462017-03-09 09:23:30 -0800473TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
sprang89c4a7e2017-06-30 13:27:40 -0700474 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment);
ilnikcb8c1462017-03-09 09:23:30 -0800475 VideoQualityTest::Params screenshare;
476 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100477 screenshare.screenshare[0] = {true, false, 10};
478 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
479 2500000, 2500000, false, "VP8", 3,
480 2, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800481 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
482 kFullStackTestDurationSecs};
483 VideoQualityTest::Params screenshare_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100484 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
485 2500000, 2500000, false, "VP8", 3,
486 0, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800487 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100488 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
489 200000, 2000000, false, "VP8", 2,
490 0, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800491
492 std::vector<VideoStream> streams = {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100493 DefaultVideoStream(screenshare_params_low, 0),
494 DefaultVideoStream(screenshare_params_high, 0)};
495 screenshare.ss[0] = {streams, 1, 1, 0, std::vector<SpatialLayer>(), false};
ilnikcb8c1462017-03-09 09:23:30 -0800496 RunTest(screenshare);
497}
498
ivica7bd242e2015-10-06 02:04:06 -0700499TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
minyue626bc952016-10-31 05:47:02 -0700500 VideoQualityTest::Params config;
501 config.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100502 config.video[0] = {true, 1850, 1110 / 2, 5, 50000,
503 200000, 2000000, false, "VP8", 2,
504 1, 400000, false, false, ""};
505 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700506 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
507 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700508 RunTest(config);
ivica028cf482015-07-30 02:15:56 -0700509}
510
sprangee37de32015-11-23 06:10:23 -0800511TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
minyue626bc952016-10-31 05:47:02 -0700512 VideoQualityTest::Params screenshare;
513 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100514 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
515 200000, 2000000, false, "VP8", 2,
516 1, 400000, false, false, ""};
517 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700518 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
519 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800520 screenshare.pipe.loss_percent = 5;
521 screenshare.pipe.queue_delay_ms = 200;
522 screenshare.pipe.link_capacity_kbps = 500;
523 RunTest(screenshare);
524}
525
526TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
minyue626bc952016-10-31 05:47:02 -0700527 VideoQualityTest::Params screenshare;
528 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100529 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
530 200000, 2000000, false, "VP8", 2,
531 1, 400000, false, false, ""};
532 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700533 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
534 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800535 screenshare.pipe.loss_percent = 10;
536 screenshare.pipe.queue_delay_ms = 200;
537 screenshare.pipe.link_capacity_kbps = 500;
538 RunTest(screenshare);
539}
540
sprange566e172017-06-08 01:29:15 -0700541TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
542 VideoQualityTest::Params screenshare;
543 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100544 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
545 200000, 2000000, false, "VP8", 2,
546 1, 400000, false, false, ""};
547 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700548 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
549 kFullStackTestDurationSecs};
550 screenshare.pipe.loss_percent = 5;
551 screenshare.pipe.link_capacity_kbps = 200;
552 screenshare.pipe.queue_length_packets = 30;
553
554 RunTest(screenshare);
555}
556
sprang89c4a7e2017-06-30 13:27:40 -0700557TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
558 VideoQualityTest::Params screenshare;
559 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100560 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
561 200000, 2000000, false, "VP8", 2,
562 1, 400000, false, false, ""};
563 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700564 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
565 kFullStackTestDurationSecs};
566 screenshare.pipe.loss_percent = 1;
567 screenshare.pipe.link_capacity_kbps = 1200;
568 screenshare.pipe.queue_length_packets = 30;
569
570 RunTest(screenshare);
571}
572
573// TODO(sprang): Retire these tests once experiment is removed.
574TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue_ALR) {
575 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
576 VideoQualityTest::Params screenshare;
577 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100578 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
579 200000, 2000000, false, "VP8", 2,
580 1, 400000, false, false, ""};
581 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700582 screenshare.analyzer = {"screenshare_slides_lossy_limited_ALR", 0.0, 0.0,
583 kFullStackTestDurationSecs};
584 screenshare.pipe.loss_percent = 5;
585 screenshare.pipe.link_capacity_kbps = 200;
586 screenshare.pipe.queue_length_packets = 30;
587
588 RunTest(screenshare);
589}
590
591TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ALR) {
592 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
593 VideoQualityTest::Params screenshare;
594 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100595 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
596 200000, 2000000, false, "VP8", 2,
597 1, 400000, false, false, ""};
598 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700599 screenshare.analyzer = {"screenshare_slides_ALR", 0.0, 0.0,
600 kFullStackTestDurationSecs};
601 RunTest(screenshare);
602}
603
604TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted_ALR) {
605 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
606 VideoQualityTest::Params screenshare;
607 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100608 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
609 200000, 2000000, false, "VP8", 2,
610 1, 400000, false, false, ""};
611 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700612 screenshare.analyzer = {"screenshare_slides_moderately_restricted_ALR", 0.0,
613 0.0, kFullStackTestDurationSecs};
614 screenshare.pipe.loss_percent = 1;
615 screenshare.pipe.link_capacity_kbps = 1200;
616 screenshare.pipe.queue_length_packets = 30;
617
618 RunTest(screenshare);
619}
620
621TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast_ALR) {
622 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment +
623 kAlrProbingExperiment);
624 VideoQualityTest::Params screenshare;
625 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100626 screenshare.screenshare[0] = {true, false, 10};
627 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
628 2500000, 2500000, false, "VP8", 3,
629 2, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700630 screenshare.analyzer = {"screenshare_slides_simulcast_alr", 0.0, 0.0,
631 kFullStackTestDurationSecs};
632 VideoQualityTest::Params screenshare_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100633 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
634 2500000, 2500000, false, "VP8", 3,
635 0, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700636 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100637 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
638 200000, 2000000, false, "VP8", 2,
639 0, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700640
641 std::vector<VideoStream> streams = {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100642 DefaultVideoStream(screenshare_params_low, 0),
643 DefaultVideoStream(screenshare_params_high, 0)};
644 screenshare.ss[0] = {streams, 1, 1, 0, std::vector<SpatialLayer>(), false};
sprang89c4a7e2017-06-30 13:27:40 -0700645 RunTest(screenshare);
646}
647
ilnik566c43b2017-03-07 04:42:54 -0800648const VideoQualityTest::Params::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000649 true, 1280, 720, 30, 800000,
650 2500000, 2500000, false, "VP9", 3,
651 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800652
653const VideoQualityTest::Params::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000654 true, 1280, 720, 30, 800000,
655 2500000, 2500000, false, "VP8", 3,
656 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800657
658const VideoQualityTest::Params::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000659 true, 640, 360, 30, 150000,
660 500000, 700000, false, "VP8", 3,
661 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800662
663const VideoQualityTest::Params::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000664 true, 320, 180, 30, 30000,
665 150000, 200000, false, "VP8", 3,
666 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800667
Peter Boström12996152016-05-14 02:03:18 +0200668#if !defined(RTC_DISABLE_VP9)
marpan5f4aaeb2017-04-06 10:52:23 -0700669TEST_F(FullStackTest, ScreenshareSlidesVP9_2SL) {
minyue626bc952016-10-31 05:47:02 -0700670 VideoQualityTest::Params screenshare;
671 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100672 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
673 200000, 2000000, false, "VP9", 1,
674 0, 400000, false, false, ""};
675 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700676 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
677 kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100678 screenshare.ss[0] = {std::vector<VideoStream>(), 0, 2, 1,
679 std::vector<SpatialLayer>(), false};
ivica5d6a06c2015-09-17 05:30:24 -0700680 RunTest(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000681}
ilnik2a8c2f52017-02-15 02:23:28 -0800682
683TEST_F(FullStackTest, VP9SVC_3SL_High) {
684 VideoQualityTest::Params simulcast;
685 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100686 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800687 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
688 kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100689 simulcast.ss[0] = {std::vector<VideoStream>(), 0, 3, 2,
690 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800691 RunTest(simulcast);
692}
693
694TEST_F(FullStackTest, VP9SVC_3SL_Medium) {
695 VideoQualityTest::Params simulcast;
696 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100697 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800698 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
699 kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100700 simulcast.ss[0] = {std::vector<VideoStream>(), 0, 3, 1,
701 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800702 RunTest(simulcast);
703}
704
705TEST_F(FullStackTest, VP9SVC_3SL_Low) {
706 VideoQualityTest::Params simulcast;
707 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100708 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800709 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100710 simulcast.ss[0] = {std::vector<VideoStream>(), 0, 3, 0,
711 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800712 RunTest(simulcast);
713}
Peter Boström12996152016-05-14 02:03:18 +0200714#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800715
ilnik6b826ef2017-06-16 06:53:48 -0700716// Android bots can't handle FullHD, so disable the test.
ilnik267041c2017-06-27 07:21:01 -0700717#if defined(WEBRTC_ANDROID)
ilnik6b826ef2017-06-16 06:53:48 -0700718#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
719#else
720#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
721#endif
722
723TEST_F(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
724 VideoQualityTest::Params simulcast;
725 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100726 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
727 2500000, 2500000, false, "VP8", 3,
728 2, 400000, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -0700729 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
730 kFullStackTestDurationSecs};
731 simulcast.pipe.loss_percent = 0;
732 simulcast.pipe.queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100733 std::vector<VideoStream> streams = {DefaultVideoStream(simulcast, 0),
734 DefaultVideoStream(simulcast, 0),
735 DefaultVideoStream(simulcast, 0)};
736 simulcast.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), true};
ilnik6b826ef2017-06-16 06:53:48 -0700737 webrtc::test::ScopedFieldTrials override_trials(
738 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/");
739 RunTest(simulcast);
740}
741
ilnik3dd5ad92017-02-09 04:58:53 -0800742TEST_F(FullStackTest, SimulcastVP8_3SL_High) {
743 VideoQualityTest::Params simulcast;
744 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100745 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800746 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800747 kFullStackTestDurationSecs};
748 simulcast.pipe.loss_percent = 0;
749 simulcast.pipe.queue_delay_ms = 100;
750 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100751 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800752 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100753 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800754 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100755 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800756
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100757 std::vector<VideoStream> streams = {
758 DefaultVideoStream(video_params_low, 0),
759 DefaultVideoStream(video_params_medium, 0),
760 DefaultVideoStream(video_params_high, 0)};
761 simulcast.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -0800762 RunTest(simulcast);
763}
764
765TEST_F(FullStackTest, SimulcastVP8_3SL_Medium) {
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_medium", 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, 1, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -0800785 RunTest(simulcast);
786}
787
788TEST_F(FullStackTest, SimulcastVP8_3SL_Low) {
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_low", 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, 0, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -0800808 RunTest(simulcast);
809}
810
ilnika014cc52017-03-07 04:21:04 -0800811TEST_F(FullStackTest, LargeRoomVP8_5thumb) {
812 VideoQualityTest::Params large_room;
813 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100814 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800815 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
816 kFullStackTestDurationSecs};
817 large_room.pipe.loss_percent = 0;
818 large_room.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;
ilnika014cc52017-03-07 04:21:04 -0800821 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100822 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800823 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100824 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -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)};
ilnik98436952017-07-13 00:47:03 -0700830 large_room.call.num_thumbnails = 5;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100831 large_room.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -0800832 RunTest(large_room);
833}
834
oprypin743117f2017-09-15 05:24:24 -0700835#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
836// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -0800837// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
838#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800839#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800840#else
841#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800842#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800843#endif
844
845TEST_F(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
ilnika014cc52017-03-07 04:21:04 -0800846 VideoQualityTest::Params large_room;
847 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100848 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800849 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
850 kFullStackTestDurationSecs};
851 large_room.pipe.loss_percent = 0;
852 large_room.pipe.queue_delay_ms = 100;
853 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100854 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800855 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100856 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800857 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100858 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800859
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100860 std::vector<VideoStream> streams = {
861 DefaultVideoStream(video_params_low, 0),
862 DefaultVideoStream(video_params_medium, 0),
863 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700864 large_room.call.num_thumbnails = 15;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100865 large_room.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -0800866 RunTest(large_room);
867}
868
ilnika014cc52017-03-07 04:21:04 -0800869TEST_F(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
870 VideoQualityTest::Params large_room;
871 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100872 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800873 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
874 kFullStackTestDurationSecs};
875 large_room.pipe.loss_percent = 0;
876 large_room.pipe.queue_delay_ms = 100;
877 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100878 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800879 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100880 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800881 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100882 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800883
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100884 std::vector<VideoStream> streams = {
885 DefaultVideoStream(video_params_low, 0),
886 DefaultVideoStream(video_params_medium, 0),
887 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700888 large_room.call.num_thumbnails = 50;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100889 large_room.ss[0] = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -0800890 RunTest(large_room);
891}
892
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100893class DualStreamsTest : public FullStackTest,
894 public ::testing::WithParamInterface<int> {};
895
896// Disable dual video test on mobile device becuase it's too heavy.
897#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
898TEST_P(DualStreamsTest,
899 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
900 test::ScopedFieldTrials field_trial(
901 kScreenshareSimulcastExperiment + kAlrProbingExperiment +
902 kRoundRobinPacingQueueExperiment + kPacerPushBackExperiment);
903 const int first_stream = GetParam();
904 VideoQualityTest::Params dual_streams;
905
906 // Screenshare Settings.
907 dual_streams.screenshare[first_stream] = {true, false, 10};
908 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
909 2500000, 2500000, false, "VP8", 3,
910 2, 400000, false, false, ""};
911
912 VideoQualityTest::Params screenshare_params_high;
913 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
914 2500000, 2500000, false, "VP8", 3,
915 0, 400000, false, false, ""};
916 VideoQualityTest::Params screenshare_params_low;
917 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
918 200000, 2000000, false, "VP8", 2,
919 0, 400000, false, false, ""};
920 std::vector<VideoStream> screenhsare_streams = {
921 DefaultVideoStream(screenshare_params_low, 0),
922 DefaultVideoStream(screenshare_params_high, 0)};
923
924 dual_streams.ss[first_stream] = {screenhsare_streams, 1, 1, 0,
925 std::vector<SpatialLayer>(), false};
926
927 // Video settings.
928 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
929
930 VideoQualityTest::Params video_params_high;
931 video_params_high.video[0] = kSimulcastVp8VideoHigh;
932 VideoQualityTest::Params video_params_medium;
933 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
934 VideoQualityTest::Params video_params_low;
935 video_params_low.video[0] = kSimulcastVp8VideoLow;
936 std::vector<VideoStream> streams = {
937 DefaultVideoStream(video_params_low, 0),
938 DefaultVideoStream(video_params_medium, 0),
939 DefaultVideoStream(video_params_high, 0)};
940
941 dual_streams.ss[1 - first_stream] = {
942 streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
943
944 // Call settings.
945 dual_streams.call.send_side_bwe = true;
946 dual_streams.call.dual_video = true;
947 dual_streams.analyzer = {"dualstreams_moderately_restricted_screenshare", 0.0,
948 0.0, kFullStackTestDurationSecs};
949 dual_streams.pipe.loss_percent = 1;
950 dual_streams.pipe.link_capacity_kbps = 7500;
951 dual_streams.pipe.queue_length_packets = 30;
952 dual_streams.pipe.queue_delay_ms = 100;
953
954 RunTest(dual_streams);
955}
956#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
957
958TEST_P(DualStreamsTest, Conference_Restricted) {
959 test::ScopedFieldTrials field_trial(kRoundRobinPacingQueueExperiment +
960 kPacerPushBackExperiment);
961 const int first_stream = GetParam();
962 VideoQualityTest::Params dual_streams;
963
964 // Screenshare Settings.
965 dual_streams.screenshare[first_stream] = {true, false, 10};
966 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
967 2500000, 2500000, false, "VP8", 3,
968 2, 400000, false, false, ""};
969 // Video settings.
970 dual_streams.video[1 - first_stream] = {
971 true, 1280, 720, 30, 150000,
972 500000, 700000, false, "VP8", 3,
973 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
974
975 // Call settings.
976 dual_streams.call.send_side_bwe = true;
977 dual_streams.call.dual_video = true;
978 dual_streams.analyzer = {"dualstreams_moderately_restricted_screenshare", 0.0,
979 0.0, kFullStackTestDurationSecs};
980 dual_streams.pipe.loss_percent = 1;
981 dual_streams.pipe.link_capacity_kbps = 5000;
982 dual_streams.pipe.queue_length_packets = 30;
983 dual_streams.pipe.queue_delay_ms = 100;
984
985 RunTest(dual_streams);
986}
987
988INSTANTIATE_TEST_CASE_P(FullStackTest,
989 DualStreamsTest,
990 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -0800991
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000992} // namespace webrtc