blob: 5dc209abcfcd9a8154936259102acef787a9d111 [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"
Sebastian Janssonf8518882018-05-31 14:52:59 +020013#include "rtc_base/flags.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "test/field_trial.h"
15#include "test/gtest.h"
16#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000017
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000018namespace webrtc {
Sebastian Janssonf8518882018-05-31 14:52:59 +020019namespace flags {
20
21DEFINE_bool(logs, false, "print logs to stderr");
22
23DEFINE_string(rtc_event_log_name,
24 "",
25 "Filename for rtc event log. Two files "
26 "with \"_send\" and \"_recv\" suffixes will be created.");
27std::string RtcEventLogName() {
28 return static_cast<std::string>(FLAG_rtc_event_log_name);
29}
30DEFINE_string(rtp_dump_name, "", "Filename for dumped received RTP stream.");
31std::string RtpDumpName() {
32 return static_cast<std::string>(FLAG_rtp_dump_name);
33}
34DEFINE_string(encoded_frame_path,
35 "",
36 "The base path for encoded frame logs. Created files will have "
37 "the form <encoded_frame_path>.<n>.(recv|send.<m>).ivf");
38std::string EncodedFramePath() {
39 return static_cast<std::string>(FLAG_encoded_frame_path);
40}
41} // namespace flags
42} // namespace webrtc
43
44namespace webrtc {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000045
sprang89c4a7e2017-06-30 13:27:40 -070046namespace {
brandtrdd369c62016-11-16 23:56:57 -080047static const int kFullStackTestDurationSecs = 45;
sprang89c4a7e2017-06-30 13:27:40 -070048} // namespace
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000049
ivica5d6a06c2015-09-17 05:30:24 -070050class FullStackTest : public VideoQualityTest {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000051 public:
Sebastian Janssonf8518882018-05-31 14:52:59 +020052 void RunTest(VideoQualityTest::Params params) {
53 params.logging = {flags::FLAG_logs, flags::RtcEventLogName(),
54 flags::RtpDumpName(), flags::EncodedFramePath()};
ivica5d6a06c2015-09-17 05:30:24 -070055 RunWithAnalyzer(params);
pbos@webrtc.org94015242013-10-16 11:05:37 +000056 }
sprang89c4a7e2017-06-30 13:27:40 -070057
58 protected:
59 const std::string kScreenshareSimulcastExperiment =
60 "WebRTC-SimulcastScreenshare/Enabled/";
61 const std::string kAlrProbingExperiment =
Sebastian Janssoncabe3832018-01-12 10:54:18 +010062 std::string(AlrExperimentSettings::kScreenshareProbingBweExperimentName) +
ilnik2ae19db2017-08-31 04:46:45 -070063 "/1.1,2875,85,20,-20,0/";
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010064 const std::string kRoundRobinPacingQueueExperiment =
65 "WebRTC-RoundRobinPacing/Enabled/";
66 const std::string kPacerPushBackExperiment =
67 "WebRTC-PacerPushbackExperiment/Enabled/";
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000068};
69
sprangce4aef12015-11-02 07:23:20 -080070// VideoQualityTest::Params params = {
71// { ... }, // Common.
72// { ... }, // Video-specific settings.
73// { ... }, // Screenshare-specific settings.
74// { ... }, // Analyzer settings.
75// pipe, // FakeNetworkPipe::Config
76// { ... }, // Spatial scalability.
77// logs // bool
78// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000079
Peter Boström12996152016-05-14 02:03:18 +020080#if !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -080081TEST_F(FullStackTest, ForemanCifWithoutPacketLossVp9) {
brandtr93c5d032016-11-30 07:50:07 -080082 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
83 VideoQualityTest::Params foreman_cif;
84 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010085 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
86 700000, 700000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +020087 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080088 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
89 kFullStackTestDurationSecs};
90 RunTest(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080091}
92
93TEST_F(FullStackTest, ForemanCifPlr5Vp9) {
brandtr93c5d032016-11-30 07:50:07 -080094 VideoQualityTest::Params foreman_cif;
95 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010096 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
97 500000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +020098 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080099 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_VP9", 0.0, 0.0,
100 kFullStackTestDurationSecs};
101 foreman_cif.pipe.loss_percent = 5;
102 foreman_cif.pipe.queue_delay_ms = 50;
103 RunTest(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -0800104}
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800105
106TEST_F(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
107 VideoQualityTest::Params foreman_cif;
108 foreman_cif.call.send_side_bwe = true;
109 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
110 700000, 700000, false, "multiplex", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200111 0, 0, false, false, false,
112 "foreman_cif"};
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800113 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
114 kFullStackTestDurationSecs};
115 RunTest(foreman_cif);
116}
117
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700118TEST_F(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
119 VideoQualityTest::Params generator;
120 generator.call.send_side_bwe = true;
121 generator.video[0] = {true, 352, 288, 30, 700000,
122 700000, 700000, false, "multiplex", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200123 0, 0, false, false, false,
124 "GeneratorI420A"};
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700125 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
126 kFullStackTestDurationSecs};
127 RunTest(generator);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800128}
129
Peter Boström12996152016-05-14 02:03:18 +0200130#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -0800131
Patrik Höglund11bf2fa2018-04-09 12:20:50 +0200132#if defined(WEBRTC_LINUX)
133// Crashes on the linux trusty perf bot: bugs.webrtc.org/9129.
134#define MAYBE_ParisQcifWithoutPacketLoss DISABLED_ParisQcifWithoutPacketLoss
135#else
136#define MAYBE_ParisQcifWithoutPacketLoss ParisQcifWithoutPacketLoss
137#endif
138TEST_F(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
minyue626bc952016-10-31 05:47:02 -0700139 VideoQualityTest::Params paris_qcif;
140 paris_qcif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100141 paris_qcif.video[0] = {true, 176, 144, 30, 300000,
142 300000, 300000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200143 0, 0, false, false, false, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -0700144 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
145 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000146 RunTest(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000147}
148
149TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) {
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000150 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
minyue626bc952016-10-31 05:47:02 -0700151 VideoQualityTest::Params foreman_cif;
152 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100153 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
154 700000, 700000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200155 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700156 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
157 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000158 RunTest(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000159}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000160
asaperssonfb6ad3b2016-12-16 06:54:01 -0800161TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketLoss) {
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, 10, 30000,
165 30000, 30000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200166 0, 0, false, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800167 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0", 0.0, 0.0,
168 kFullStackTestDurationSecs};
169 RunTest(foreman_cif);
170}
171
Niels Möller6aa415e2018-06-07 11:14:13 +0200172// Link capacity below default start rate. Automatic down scaling enabled.
173TEST_F(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
174 VideoQualityTest::Params foreman_cif;
175 foreman_cif.call.send_side_bwe = true;
176 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
177 500000, 2000000, false, "VP8", 1,
178 0, 0, false, false, true, "foreman_cif"};
179 foreman_cif.analyzer = {"foreman_cif_link_150kbps_net_delay_0_0_plr_0",
180 0.0, 0.0,
181 kFullStackTestDurationSecs};
182 foreman_cif.pipe.link_capacity_kbps = 150;
183 RunTest(foreman_cif);
184}
185
sprang@webrtc.org343096a2015-02-23 08:34:17 +0000186TEST_F(FullStackTest, ForemanCifPlr5) {
minyue626bc952016-10-31 05:47:02 -0700187 VideoQualityTest::Params foreman_cif;
188 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100189 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
190 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200191 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700192 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
193 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700194 foreman_cif.pipe.loss_percent = 5;
195 foreman_cif.pipe.queue_delay_ms = 50;
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000196 RunTest(foreman_cif);
197}
198
brandtr93c5d032016-11-30 07:50:07 -0800199TEST_F(FullStackTest, ForemanCifPlr5Ulpfec) {
200 VideoQualityTest::Params foreman_cif;
201 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100202 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
203 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200204 0, 0, true, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800205 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_ulpfec", 0.0, 0.0,
206 kFullStackTestDurationSecs};
207 foreman_cif.pipe.loss_percent = 5;
208 foreman_cif.pipe.queue_delay_ms = 50;
209 RunTest(foreman_cif);
210}
211
212TEST_F(FullStackTest, ForemanCifPlr5Flexfec) {
213 VideoQualityTest::Params foreman_cif;
214 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100215 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
216 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200217 0, 0, false, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800218 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
219 kFullStackTestDurationSecs};
220 foreman_cif.pipe.loss_percent = 5;
221 foreman_cif.pipe.queue_delay_ms = 50;
222 RunTest(foreman_cif);
223}
224
stefan889d9652017-07-05 03:03:02 -0700225TEST_F(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
226 VideoQualityTest::Params foreman_cif;
227 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100228 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
229 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200230 0, 0, false, true, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700231 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
232 0.0, kFullStackTestDurationSecs};
233 foreman_cif.pipe.loss_percent = 3;
234 foreman_cif.pipe.link_capacity_kbps = 500;
235 foreman_cif.pipe.queue_delay_ms = 50;
236 RunTest(foreman_cif);
237}
238
239TEST_F(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
240 VideoQualityTest::Params foreman_cif;
241 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100242 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
243 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200244 0, 0, true, false, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700245 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
246 0.0, kFullStackTestDurationSecs};
247 foreman_cif.pipe.loss_percent = 3;
248 foreman_cif.pipe.link_capacity_kbps = 500;
249 foreman_cif.pipe.queue_delay_ms = 50;
250 RunTest(foreman_cif);
251}
252
brandtrdd369c62016-11-16 23:56:57 -0800253#if defined(WEBRTC_USE_H264)
254TEST_F(FullStackTest, ForemanCifWithoutPacketlossH264) {
brandtr93c5d032016-11-30 07:50:07 -0800255 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
256 VideoQualityTest::Params foreman_cif;
257 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100258 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
259 700000, 700000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200260 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800261 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
262 kFullStackTestDurationSecs};
263 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800264}
265
asaperssonfb6ad3b2016-12-16 06:54:01 -0800266TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
267 VideoQualityTest::Params foreman_cif;
268 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100269 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
270 30000, 30000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200271 0, 0, false, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800272 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
273 0.0, kFullStackTestDurationSecs};
274 RunTest(foreman_cif);
275}
276
brandtrdd369c62016-11-16 23:56:57 -0800277TEST_F(FullStackTest, ForemanCifPlr5H264) {
brandtr93c5d032016-11-30 07:50:07 -0800278 VideoQualityTest::Params foreman_cif;
279 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100280 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
281 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200282 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800283 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264", 0.0, 0.0,
284 kFullStackTestDurationSecs};
285 foreman_cif.pipe.loss_percent = 5;
286 foreman_cif.pipe.queue_delay_ms = 50;
287 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800288}
289
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100290TEST_F(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
291 test::ScopedFieldTrials override_field_trials(
292 "WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/");
293
294 VideoQualityTest::Params foreman_cif;
295 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100296 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
297 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200298 0, 0, false, false, false, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100299 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
300 0.0, kFullStackTestDurationSecs};
301 foreman_cif.pipe.loss_percent = 5;
302 foreman_cif.pipe.queue_delay_ms = 50;
303 RunTest(foreman_cif);
304}
305
brandtrdd369c62016-11-16 23:56:57 -0800306// Verify that this is worth the bot time, before enabling.
307TEST_F(FullStackTest, ForemanCifPlr5H264Flexfec) {
brandtr93c5d032016-11-30 07:50:07 -0800308 VideoQualityTest::Params foreman_cif;
309 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100310 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
311 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200312 0, 0, false, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800313 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
314 kFullStackTestDurationSecs};
315 foreman_cif.pipe.loss_percent = 5;
316 foreman_cif.pipe.queue_delay_ms = 50;
317 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800318}
319
320// Ulpfec with H264 is an unsupported combination, so this test is only useful
321// for debugging. It is therefore disabled by default.
322TEST_F(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
brandtr93c5d032016-11-30 07:50:07 -0800323 VideoQualityTest::Params foreman_cif;
324 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100325 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
326 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200327 0, 0, true, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800328 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
329 kFullStackTestDurationSecs};
330 foreman_cif.pipe.loss_percent = 5;
331 foreman_cif.pipe.queue_delay_ms = 50;
332 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800333}
334#endif // defined(WEBRTC_USE_H264)
335
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000336TEST_F(FullStackTest, ForemanCif500kbps) {
minyue626bc952016-10-31 05:47:02 -0700337 VideoQualityTest::Params foreman_cif;
338 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100339 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
340 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200341 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700342 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
343 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700344 foreman_cif.pipe.queue_length_packets = 0;
345 foreman_cif.pipe.queue_delay_ms = 0;
346 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000347 RunTest(foreman_cif);
348}
349
350TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700351 VideoQualityTest::Params foreman_cif;
352 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100353 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
354 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200355 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700356 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
357 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700358 foreman_cif.pipe.queue_length_packets = 32;
359 foreman_cif.pipe.queue_delay_ms = 0;
360 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000361 RunTest(foreman_cif);
362}
363
364TEST_F(FullStackTest, ForemanCif500kbps100ms) {
minyue626bc952016-10-31 05:47:02 -0700365 VideoQualityTest::Params foreman_cif;
366 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100367 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
368 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200369 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700370 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
371 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700372 foreman_cif.pipe.queue_length_packets = 0;
373 foreman_cif.pipe.queue_delay_ms = 100;
374 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000375 RunTest(foreman_cif);
376}
377
378TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700379 VideoQualityTest::Params foreman_cif;
380 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100381 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
382 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200383 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700384 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
385 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700386 foreman_cif.pipe.queue_length_packets = 32;
387 foreman_cif.pipe.queue_delay_ms = 100;
388 foreman_cif.pipe.link_capacity_kbps = 500;
389 RunTest(foreman_cif);
390}
391
392TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
minyue626bc952016-10-31 05:47:02 -0700393 VideoQualityTest::Params foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800394 foreman_cif.call.send_side_bwe = false;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100395 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
396 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200397 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800398 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
399 0.0, 0.0, kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700400 foreman_cif.pipe.queue_length_packets = 32;
401 foreman_cif.pipe.queue_delay_ms = 100;
402 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000403 RunTest(foreman_cif);
404}
405
406TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700407 VideoQualityTest::Params foreman_cif;
408 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100409 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
410 2000000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200411 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700412 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
413 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700414 foreman_cif.pipe.queue_length_packets = 32;
415 foreman_cif.pipe.queue_delay_ms = 100;
416 foreman_cif.pipe.link_capacity_kbps = 1000;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000417 RunTest(foreman_cif);
418}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000419
sprangff19d352017-09-06 07:14:02 -0700420// TODO(sprang): Remove this if we have the similar ModerateLimits below?
stefanb1797672016-08-11 07:00:57 -0700421TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700422 VideoQualityTest::Params conf_motion_hd;
423 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100424 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000425 true, 1280, 720, 50, 30000,
426 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200427 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700428 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
429 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700430 conf_motion_hd.pipe.queue_length_packets = 32;
431 conf_motion_hd.pipe.queue_delay_ms = 100;
432 conf_motion_hd.pipe.link_capacity_kbps = 2000;
433 RunTest(conf_motion_hd);
434}
435
sprangff19d352017-09-06 07:14:02 -0700436TEST_F(FullStackTest, ConferenceMotionHd1TLModerateLimits) {
437 VideoQualityTest::Params conf_motion_hd;
438 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100439 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000440 true, 1280, 720, 50, 30000,
441 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200442 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700443 conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0,
444 0.0, kFullStackTestDurationSecs};
445 conf_motion_hd.pipe.queue_length_packets = 50;
446 conf_motion_hd.pipe.loss_percent = 3;
447 conf_motion_hd.pipe.queue_delay_ms = 100;
448 conf_motion_hd.pipe.link_capacity_kbps = 2000;
449 RunTest(conf_motion_hd);
450}
451
452TEST_F(FullStackTest, ConferenceMotionHd2TLModerateLimits) {
453 VideoQualityTest::Params conf_motion_hd;
454 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100455 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000456 true, 1280, 720, 50, 30000,
457 3000000, 3000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200458 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700459 conf_motion_hd.analyzer = {"conference_motion_hd_2tl_moderate_limits", 0.0,
460 0.0, kFullStackTestDurationSecs};
461 conf_motion_hd.pipe.queue_length_packets = 50;
462 conf_motion_hd.pipe.loss_percent = 3;
463 conf_motion_hd.pipe.queue_delay_ms = 100;
464 conf_motion_hd.pipe.link_capacity_kbps = 2000;
465 RunTest(conf_motion_hd);
466}
467
468TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
469 VideoQualityTest::Params conf_motion_hd;
470 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100471 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000472 true, 1280, 720, 50, 30000,
473 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200474 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700475 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
476 0.0, kFullStackTestDurationSecs};
477 conf_motion_hd.pipe.queue_length_packets = 50;
478 conf_motion_hd.pipe.loss_percent = 3;
479 conf_motion_hd.pipe.queue_delay_ms = 100;
480 conf_motion_hd.pipe.link_capacity_kbps = 2000;
481 RunTest(conf_motion_hd);
482}
483
484TEST_F(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
485 VideoQualityTest::Params conf_motion_hd;
486 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100487 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000488 true, 1280, 720, 50, 30000,
489 3000000, 3000000, false, "VP8", 4,
Niels Möller6aa415e2018-06-07 11:14:13 +0200490 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700491 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
492 0.0, kFullStackTestDurationSecs};
493 conf_motion_hd.pipe.queue_length_packets = 50;
494 conf_motion_hd.pipe.loss_percent = 3;
495 conf_motion_hd.pipe.queue_delay_ms = 100;
496 conf_motion_hd.pipe.link_capacity_kbps = 2000;
497 RunTest(conf_motion_hd);
498}
499
500TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
501 test::ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
502 VideoQualityTest::Params conf_motion_hd;
503 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100504 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000505 true, 1280, 720, 50, 30000,
506 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200507 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700508 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
509 0.0, 0.0, kFullStackTestDurationSecs};
510 conf_motion_hd.pipe.queue_length_packets = 50;
511 conf_motion_hd.pipe.loss_percent = 3;
512 conf_motion_hd.pipe.queue_delay_ms = 100;
513 conf_motion_hd.pipe.link_capacity_kbps = 2000;
514 RunTest(conf_motion_hd);
515}
516
jianj390e64d2017-02-03 09:51:23 -0800517#if !defined(RTC_DISABLE_VP9)
518TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
519 VideoQualityTest::Params conf_motion_hd;
520 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100521 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000522 true, 1280, 720, 50, 30000,
523 3000000, 3000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200524 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800525 conf_motion_hd.analyzer = {
526 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
527 kFullStackTestDurationSecs};
528 conf_motion_hd.pipe.queue_length_packets = 32;
529 conf_motion_hd.pipe.queue_delay_ms = 100;
530 conf_motion_hd.pipe.link_capacity_kbps = 2000;
531 RunTest(conf_motion_hd);
532}
533#endif
534
ivica7bd242e2015-10-06 02:04:06 -0700535TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL) {
minyue626bc952016-10-31 05:47:02 -0700536 VideoQualityTest::Params screenshare;
537 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100538 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
539 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200540 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100541 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700542 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
543 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700544 RunTest(screenshare);
Erik Språng6ee69aa2015-09-03 15:58:05 +0200545}
546
ilnikcb8c1462017-03-09 09:23:30 -0800547TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
sprang89c4a7e2017-06-30 13:27:40 -0700548 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment);
ilnikcb8c1462017-03-09 09:23:30 -0800549 VideoQualityTest::Params screenshare;
550 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100551 screenshare.screenshare[0] = {true, false, 10};
552 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
553 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200554 2, 400000, false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800555 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
556 kFullStackTestDurationSecs};
557 VideoQualityTest::Params screenshare_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100558 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
559 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200560 0, 400000, false, false, false,
561 ""};
ilnikcb8c1462017-03-09 09:23:30 -0800562 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100563 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
564 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200565 0, 400000, false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800566
567 std::vector<VideoStream> streams = {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100568 DefaultVideoStream(screenshare_params_low, 0),
569 DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200570 screenshare.ss[0] = {
571 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
572 false};
ilnikcb8c1462017-03-09 09:23:30 -0800573 RunTest(screenshare);
574}
575
ivica7bd242e2015-10-06 02:04:06 -0700576TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
minyue626bc952016-10-31 05:47:02 -0700577 VideoQualityTest::Params config;
578 config.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100579 config.video[0] = {true, 1850, 1110 / 2, 5, 50000,
580 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200581 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100582 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700583 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
584 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700585 RunTest(config);
ivica028cf482015-07-30 02:15:56 -0700586}
587
sprangee37de32015-11-23 06:10:23 -0800588TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
minyue626bc952016-10-31 05:47:02 -0700589 VideoQualityTest::Params screenshare;
590 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100591 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
592 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200593 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100594 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700595 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
596 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800597 screenshare.pipe.loss_percent = 5;
598 screenshare.pipe.queue_delay_ms = 200;
599 screenshare.pipe.link_capacity_kbps = 500;
600 RunTest(screenshare);
601}
602
603TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
minyue626bc952016-10-31 05:47:02 -0700604 VideoQualityTest::Params screenshare;
605 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100606 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
607 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200608 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100609 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700610 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
611 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800612 screenshare.pipe.loss_percent = 10;
613 screenshare.pipe.queue_delay_ms = 200;
614 screenshare.pipe.link_capacity_kbps = 500;
615 RunTest(screenshare);
616}
617
sprange566e172017-06-08 01:29:15 -0700618TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
619 VideoQualityTest::Params screenshare;
620 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100621 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
622 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200623 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100624 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700625 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
626 kFullStackTestDurationSecs};
627 screenshare.pipe.loss_percent = 5;
628 screenshare.pipe.link_capacity_kbps = 200;
629 screenshare.pipe.queue_length_packets = 30;
630
631 RunTest(screenshare);
632}
633
sprang89c4a7e2017-06-30 13:27:40 -0700634TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
635 VideoQualityTest::Params screenshare;
636 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100637 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
638 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200639 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100640 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700641 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
642 kFullStackTestDurationSecs};
643 screenshare.pipe.loss_percent = 1;
644 screenshare.pipe.link_capacity_kbps = 1200;
645 screenshare.pipe.queue_length_packets = 30;
646
647 RunTest(screenshare);
648}
649
650// TODO(sprang): Retire these tests once experiment is removed.
651TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue_ALR) {
652 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
653 VideoQualityTest::Params screenshare;
654 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100655 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
656 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200657 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100658 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700659 screenshare.analyzer = {"screenshare_slides_lossy_limited_ALR", 0.0, 0.0,
660 kFullStackTestDurationSecs};
661 screenshare.pipe.loss_percent = 5;
662 screenshare.pipe.link_capacity_kbps = 200;
663 screenshare.pipe.queue_length_packets = 30;
664
665 RunTest(screenshare);
666}
667
668TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ALR) {
669 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
670 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, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200674 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100675 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700676 screenshare.analyzer = {"screenshare_slides_ALR", 0.0, 0.0,
677 kFullStackTestDurationSecs};
678 RunTest(screenshare);
679}
680
681TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted_ALR) {
682 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
683 VideoQualityTest::Params screenshare;
684 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100685 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
686 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200687 1, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100688 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700689 screenshare.analyzer = {"screenshare_slides_moderately_restricted_ALR", 0.0,
690 0.0, kFullStackTestDurationSecs};
691 screenshare.pipe.loss_percent = 1;
692 screenshare.pipe.link_capacity_kbps = 1200;
693 screenshare.pipe.queue_length_packets = 30;
694
695 RunTest(screenshare);
696}
697
698TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast_ALR) {
699 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment +
700 kAlrProbingExperiment);
701 VideoQualityTest::Params screenshare;
702 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100703 screenshare.screenshare[0] = {true, false, 10};
704 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
705 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200706 2, 400000, false, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700707 screenshare.analyzer = {"screenshare_slides_simulcast_alr", 0.0, 0.0,
708 kFullStackTestDurationSecs};
709 VideoQualityTest::Params screenshare_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100710 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
711 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200712 0, 400000, false, false, false,
713 ""};
sprang89c4a7e2017-06-30 13:27:40 -0700714 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100715 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
716 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200717 0, 400000, false, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700718
719 std::vector<VideoStream> streams = {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100720 DefaultVideoStream(screenshare_params_low, 0),
721 DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200722 screenshare.ss[0] = {
723 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
724 false};
sprang89c4a7e2017-06-30 13:27:40 -0700725 RunTest(screenshare);
726}
727
ilnik566c43b2017-03-07 04:42:54 -0800728const VideoQualityTest::Params::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000729 true, 1280, 720, 30, 800000,
730 2500000, 2500000, false, "VP9", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200731 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800732
733const VideoQualityTest::Params::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000734 true, 1280, 720, 30, 800000,
735 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200736 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800737
738const VideoQualityTest::Params::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000739 true, 640, 360, 30, 150000,
740 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200741 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800742
743const VideoQualityTest::Params::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000744 true, 320, 180, 30, 30000,
745 150000, 200000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200746 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800747
Peter Boström12996152016-05-14 02:03:18 +0200748#if !defined(RTC_DISABLE_VP9)
marpan5f4aaeb2017-04-06 10:52:23 -0700749TEST_F(FullStackTest, ScreenshareSlidesVP9_2SL) {
minyue626bc952016-10-31 05:47:02 -0700750 VideoQualityTest::Params screenshare;
751 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100752 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
753 200000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200754 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100755 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700756 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
757 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200758 screenshare.ss[0] = {
759 std::vector<VideoStream>(), 0, 2, 1, InterLayerPredMode::kOn,
760 std::vector<SpatialLayer>(), false};
ivica5d6a06c2015-09-17 05:30:24 -0700761 RunTest(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000762}
ilnik2a8c2f52017-02-15 02:23:28 -0800763
Sergey Silkinb3085b22018-05-25 09:07:11 +0000764TEST_F(FullStackTest, VP9SVC_3SL_High) {
ilnik2a8c2f52017-02-15 02:23:28 -0800765 VideoQualityTest::Params simulcast;
766 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100767 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800768 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
769 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200770 simulcast.ss[0] = {
771 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
772 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800773 RunTest(simulcast);
774}
775
776TEST_F(FullStackTest, VP9SVC_3SL_Medium) {
777 VideoQualityTest::Params simulcast;
778 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100779 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800780 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
781 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200782 simulcast.ss[0] = {
783 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
784 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800785 RunTest(simulcast);
786}
787
788TEST_F(FullStackTest, VP9SVC_3SL_Low) {
789 VideoQualityTest::Params simulcast;
790 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100791 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800792 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200793 simulcast.ss[0] = {
794 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
795 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800796 RunTest(simulcast);
797}
Sergey Silkin0643fd62018-05-17 12:50:53 +0200798
799TEST_F(FullStackTest, VP9KSVC_3SL_High) {
800 VideoQualityTest::Params simulcast;
801 simulcast.call.send_side_bwe = true;
802 simulcast.video[0] = kSvcVp9Video;
803 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
804 kFullStackTestDurationSecs};
805 simulcast.ss[0] = {
806 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
807 std::vector<SpatialLayer>(), false};
808 RunTest(simulcast);
809}
810
811TEST_F(FullStackTest, VP9KSVC_3SL_Medium) {
812 VideoQualityTest::Params simulcast;
813 simulcast.call.send_side_bwe = true;
814 simulcast.video[0] = kSvcVp9Video;
815 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
816 kFullStackTestDurationSecs};
817 simulcast.ss[0] = {
818 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
819 std::vector<SpatialLayer>(), false};
820 RunTest(simulcast);
821}
822
823TEST_F(FullStackTest, VP9KSVC_3SL_Low) {
824 VideoQualityTest::Params simulcast;
825 simulcast.call.send_side_bwe = true;
826 simulcast.video[0] = kSvcVp9Video;
827 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
828 kFullStackTestDurationSecs};
829 simulcast.ss[0] = {
830 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
831 std::vector<SpatialLayer>(), false};
832 RunTest(simulcast);
833}
“Michael277a6562018-06-01 14:09:19 -0500834
835TEST_F(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
836 VideoQualityTest::Params simulcast;
837 simulcast.call.send_side_bwe = true;
838 simulcast.video[0] = kSvcVp9Video;
839 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
840 kFullStackTestDurationSecs};
841 simulcast.ss[0] = {
842 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
843 std::vector<SpatialLayer>(), false};
844 simulcast.pipe.link_capacity_kbps = 1000;
845 RunTest(simulcast);
846}
847
Peter Boström12996152016-05-14 02:03:18 +0200848#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800849
ilnik6b826ef2017-06-16 06:53:48 -0700850// Android bots can't handle FullHD, so disable the test.
Sam Zackrissonc3d8bb12018-05-02 10:22:32 +0200851// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
852#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 06:53:48 -0700853#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
854#else
855#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
856#endif
857
858TEST_F(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
859 VideoQualityTest::Params simulcast;
860 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100861 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
862 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200863 2, 400000, false, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -0700864 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
865 kFullStackTestDurationSecs};
866 simulcast.pipe.loss_percent = 0;
867 simulcast.pipe.queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100868 std::vector<VideoStream> streams = {DefaultVideoStream(simulcast, 0),
869 DefaultVideoStream(simulcast, 0),
870 DefaultVideoStream(simulcast, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200871 simulcast.ss[0] = {
872 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
873 true};
ilnik6b826ef2017-06-16 06:53:48 -0700874 webrtc::test::ScopedFieldTrials override_trials(
875 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/");
876 RunTest(simulcast);
877}
878
ilnik3dd5ad92017-02-09 04:58:53 -0800879TEST_F(FullStackTest, SimulcastVP8_3SL_High) {
880 VideoQualityTest::Params simulcast;
881 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100882 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800883 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800884 kFullStackTestDurationSecs};
885 simulcast.pipe.loss_percent = 0;
886 simulcast.pipe.queue_delay_ms = 100;
887 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100888 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800889 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100890 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800891 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100892 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800893
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100894 std::vector<VideoStream> streams = {
895 DefaultVideoStream(video_params_low, 0),
896 DefaultVideoStream(video_params_medium, 0),
897 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200898 simulcast.ss[0] = {
899 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
900 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800901 RunTest(simulcast);
902}
903
904TEST_F(FullStackTest, SimulcastVP8_3SL_Medium) {
905 VideoQualityTest::Params simulcast;
906 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100907 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800908 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800909 kFullStackTestDurationSecs};
910 simulcast.pipe.loss_percent = 0;
911 simulcast.pipe.queue_delay_ms = 100;
912 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100913 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800914 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100915 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800916 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100917 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800918
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100919 std::vector<VideoStream> streams = {
920 DefaultVideoStream(video_params_low, 0),
921 DefaultVideoStream(video_params_medium, 0),
922 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200923 simulcast.ss[0] = {
924 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
925 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800926 RunTest(simulcast);
927}
928
929TEST_F(FullStackTest, SimulcastVP8_3SL_Low) {
930 VideoQualityTest::Params simulcast;
931 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100932 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800933 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800934 kFullStackTestDurationSecs};
935 simulcast.pipe.loss_percent = 0;
936 simulcast.pipe.queue_delay_ms = 100;
937 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100938 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800939 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100940 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800941 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100942 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800943
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100944 std::vector<VideoStream> streams = {
945 DefaultVideoStream(video_params_low, 0),
946 DefaultVideoStream(video_params_medium, 0),
947 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200948 simulcast.ss[0] = {
949 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
950 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800951 RunTest(simulcast);
952}
953
ilnika014cc52017-03-07 04:21:04 -0800954TEST_F(FullStackTest, LargeRoomVP8_5thumb) {
955 VideoQualityTest::Params large_room;
956 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100957 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800958 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
959 kFullStackTestDurationSecs};
960 large_room.pipe.loss_percent = 0;
961 large_room.pipe.queue_delay_ms = 100;
962 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100963 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800964 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100965 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800966 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100967 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800968
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100969 std::vector<VideoStream> streams = {
970 DefaultVideoStream(video_params_low, 0),
971 DefaultVideoStream(video_params_medium, 0),
972 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700973 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 09:12:05 +0200974 large_room.ss[0] = {
975 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
976 false};
ilnika014cc52017-03-07 04:21:04 -0800977 RunTest(large_room);
978}
979
oprypin743117f2017-09-15 05:24:24 -0700980#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
981// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -0800982// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
983#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800984#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800985#else
986#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800987#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800988#endif
989
990TEST_F(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
ilnika014cc52017-03-07 04:21:04 -0800991 VideoQualityTest::Params large_room;
992 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100993 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800994 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
995 kFullStackTestDurationSecs};
996 large_room.pipe.loss_percent = 0;
997 large_room.pipe.queue_delay_ms = 100;
998 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100999 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001000 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001001 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -08001002 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001003 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001004
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001005 std::vector<VideoStream> streams = {
1006 DefaultVideoStream(video_params_low, 0),
1007 DefaultVideoStream(video_params_medium, 0),
1008 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001009 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 09:12:05 +02001010 large_room.ss[0] = {
1011 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1012 false};
ilnika014cc52017-03-07 04:21:04 -08001013 RunTest(large_room);
1014}
1015
ilnika014cc52017-03-07 04:21:04 -08001016TEST_F(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1017 VideoQualityTest::Params large_room;
1018 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001019 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001020 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
1021 kFullStackTestDurationSecs};
1022 large_room.pipe.loss_percent = 0;
1023 large_room.pipe.queue_delay_ms = 100;
1024 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001025 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001026 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001027 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -08001028 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001029 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001030
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001031 std::vector<VideoStream> streams = {
1032 DefaultVideoStream(video_params_low, 0),
1033 DefaultVideoStream(video_params_medium, 0),
1034 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001035 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 09:12:05 +02001036 large_room.ss[0] = {
1037 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1038 false};
ilnika014cc52017-03-07 04:21:04 -08001039 RunTest(large_room);
1040}
1041
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001042class DualStreamsTest : public FullStackTest,
1043 public ::testing::WithParamInterface<int> {};
1044
1045// Disable dual video test on mobile device becuase it's too heavy.
1046#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1047TEST_P(DualStreamsTest,
1048 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
1049 test::ScopedFieldTrials field_trial(
1050 kScreenshareSimulcastExperiment + kAlrProbingExperiment +
1051 kRoundRobinPacingQueueExperiment + kPacerPushBackExperiment);
1052 const int first_stream = GetParam();
1053 VideoQualityTest::Params dual_streams;
1054
1055 // Screenshare Settings.
1056 dual_streams.screenshare[first_stream] = {true, false, 10};
1057 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1058 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001059 2, 400000, false, false, false,
1060 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001061
1062 VideoQualityTest::Params screenshare_params_high;
1063 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
1064 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001065 0, 400000, false, false, false,
1066 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001067 VideoQualityTest::Params screenshare_params_low;
1068 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
1069 200000, 2000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +02001070 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001071 std::vector<VideoStream> screenhsare_streams = {
1072 DefaultVideoStream(screenshare_params_low, 0),
1073 DefaultVideoStream(screenshare_params_high, 0)};
1074
Sergey Silkin57027362018-05-15 09:12:05 +02001075 dual_streams.ss[first_stream] = {
1076 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1077 std::vector<SpatialLayer>(), false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001078
1079 // Video settings.
1080 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
1081
1082 VideoQualityTest::Params video_params_high;
1083 video_params_high.video[0] = kSimulcastVp8VideoHigh;
1084 VideoQualityTest::Params video_params_medium;
1085 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
1086 VideoQualityTest::Params video_params_low;
1087 video_params_low.video[0] = kSimulcastVp8VideoLow;
1088 std::vector<VideoStream> streams = {
1089 DefaultVideoStream(video_params_low, 0),
1090 DefaultVideoStream(video_params_medium, 0),
1091 DefaultVideoStream(video_params_high, 0)};
1092
1093 dual_streams.ss[1 - first_stream] = {
Sergey Silkin57027362018-05-15 09:12:05 +02001094 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1095 false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001096
1097 // Call settings.
1098 dual_streams.call.send_side_bwe = true;
1099 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001100 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1101 std::to_string(first_stream);
1102 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001103 dual_streams.pipe.loss_percent = 1;
1104 dual_streams.pipe.link_capacity_kbps = 7500;
1105 dual_streams.pipe.queue_length_packets = 30;
1106 dual_streams.pipe.queue_delay_ms = 100;
1107
1108 RunTest(dual_streams);
1109}
1110#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1111
1112TEST_P(DualStreamsTest, Conference_Restricted) {
1113 test::ScopedFieldTrials field_trial(kRoundRobinPacingQueueExperiment +
1114 kPacerPushBackExperiment);
1115 const int first_stream = GetParam();
1116 VideoQualityTest::Params dual_streams;
1117
1118 // Screenshare Settings.
1119 dual_streams.screenshare[first_stream] = {true, false, 10};
1120 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1121 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001122 2, 400000, false, false, false,
1123 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001124 // Video settings.
1125 dual_streams.video[1 - first_stream] = {
1126 true, 1280, 720, 30, 150000,
1127 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001128 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001129
1130 // Call settings.
1131 dual_streams.call.send_side_bwe = true;
1132 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001133 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1134 std::to_string(first_stream);
1135 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001136 dual_streams.pipe.loss_percent = 1;
1137 dual_streams.pipe.link_capacity_kbps = 5000;
1138 dual_streams.pipe.queue_length_packets = 30;
1139 dual_streams.pipe.queue_delay_ms = 100;
1140
1141 RunTest(dual_streams);
1142}
1143
1144INSTANTIATE_TEST_CASE_P(FullStackTest,
1145 DualStreamsTest,
1146 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -08001147
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001148} // namespace webrtc