blob: 441c15b1569776d06107219aabdd7e448da9aefa [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
Emircan Uysaler0823eec2018-07-13 17:10:00 -070012#include "media/base/vp9_profile.h"
13#include "modules/video_coding/codecs/vp9/include/vp9.h"
Sebastian Janssoncabe3832018-01-12 10:54:18 +010014#include "rtc_base/experiments/alr_experiment.h"
Sebastian Janssonf8518882018-05-31 14:52:59 +020015#include "rtc_base/flags.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "test/field_trial.h"
17#include "test/gtest.h"
18#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000019
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000020namespace webrtc {
Sebastian Janssonf8518882018-05-31 14:52:59 +020021namespace flags {
22
23DEFINE_bool(logs, false, "print logs to stderr");
24
25DEFINE_string(rtc_event_log_name,
26 "",
27 "Filename for rtc event log. Two files "
28 "with \"_send\" and \"_recv\" suffixes will be created.");
29std::string RtcEventLogName() {
30 return static_cast<std::string>(FLAG_rtc_event_log_name);
31}
32DEFINE_string(rtp_dump_name, "", "Filename for dumped received RTP stream.");
33std::string RtpDumpName() {
34 return static_cast<std::string>(FLAG_rtp_dump_name);
35}
36DEFINE_string(encoded_frame_path,
37 "",
38 "The base path for encoded frame logs. Created files will have "
39 "the form <encoded_frame_path>.<n>.(recv|send.<m>).ivf");
40std::string EncodedFramePath() {
41 return static_cast<std::string>(FLAG_encoded_frame_path);
42}
43} // namespace flags
44} // namespace webrtc
45
46namespace webrtc {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000047
sprang89c4a7e2017-06-30 13:27:40 -070048namespace {
brandtrdd369c62016-11-16 23:56:57 -080049static const int kFullStackTestDurationSecs = 45;
Patrik Höglundb6b29e02018-06-21 16:58:01 +020050const char kRoundRobinPacingQueueExperiment[] =
51 "WebRTC-RoundRobinPacing/Enabled/";
52const char kPacerPushBackExperiment[] =
53 "WebRTC-PacerPushbackExperiment/Enabled/";
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000054
Patrik Höglundb6b29e02018-06-21 16:58:01 +020055struct ParamsWithLogging : public VideoQualityTest::Params {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000056 public:
Patrik Höglundb6b29e02018-06-21 16:58:01 +020057 ParamsWithLogging() {
58 // Use these logging flags by default, for everything.
59 logging = {flags::FLAG_logs, flags::RtcEventLogName(),
60 flags::RtpDumpName(), flags::EncodedFramePath()};
pbos@webrtc.org94015242013-10-16 11:05:37 +000061 }
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000062};
63
Patrik Höglundb6b29e02018-06-21 16:58:01 +020064std::unique_ptr<VideoQualityTestFixtureInterface>
65CreateVideoQualityTestFixture() {
Karl Wiberg918f50c2018-07-05 11:40:33 +020066 return absl::make_unique<VideoQualityTest>(nullptr);
Patrik Höglundb6b29e02018-06-21 16:58:01 +020067}
68
69} // namespace
70
sprangce4aef12015-11-02 07:23:20 -080071// VideoQualityTest::Params params = {
72// { ... }, // Common.
73// { ... }, // Video-specific settings.
74// { ... }, // Screenshare-specific settings.
75// { ... }, // Analyzer settings.
76// pipe, // FakeNetworkPipe::Config
77// { ... }, // Spatial scalability.
78// logs // bool
79// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000080
Peter Boström12996152016-05-14 02:03:18 +020081#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +020082TEST(FullStackTest, ForemanCifWithoutPacketLossVp9) {
83 auto fixture = CreateVideoQualityTestFixture();
84 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -080085 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010086 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
87 700000, 700000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +020088 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080089 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
90 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +020091 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080092}
93
Patrik Höglundb6b29e02018-06-21 16:58:01 +020094TEST(FullStackTest, ForemanCifPlr5Vp9) {
95 auto fixture = CreateVideoQualityTestFixture();
96 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -080097 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010098 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
99 500000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200100 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800101 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_VP9", 0.0, 0.0,
102 kFullStackTestDurationSecs};
103 foreman_cif.pipe.loss_percent = 5;
104 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200105 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -0800106}
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800107
Emircan Uysaler0823eec2018-07-13 17:10:00 -0700108TEST(FullStackTest, GeneratorWithoutPacketLossVp9Profile2) {
109 // Profile 2 might not be available on some platforms until
110 // https://bugs.chromium.org/p/webm/issues/detail?id=1544 is solved.
111 bool profile_2_is_supported = false;
112 for (const auto& codec : SupportedVP9Codecs()) {
113 if (ParseSdpForVP9Profile(codec.parameters)
114 .value_or(VP9Profile::kProfile0) == VP9Profile::kProfile2) {
115 profile_2_is_supported = true;
116 }
117 }
118 if (!profile_2_is_supported)
119 return;
120 auto fixture = CreateVideoQualityTestFixture();
121
122 SdpVideoFormat::Parameters vp92 = {
123 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}};
124 ParamsWithLogging generator;
125 generator.call.send_side_bwe = true;
126 generator.video[0] = {
127 true, 352, 288, 30, 700000, 700000, 700000, false, "VP9",
128 1, 0, 0, false, false, false, "GeneratorI010", 0, vp92};
129 generator.analyzer = {"generator_net_delay_0_0_plr_0_VP9Profile2", 0.0, 0.0,
130 kFullStackTestDurationSecs};
131 fixture->RunWithAnalyzer(generator);
132}
133
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200134TEST(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
135 auto fixture = CreateVideoQualityTestFixture();
136 ParamsWithLogging foreman_cif;
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800137 foreman_cif.call.send_side_bwe = true;
138 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
139 700000, 700000, false, "multiplex", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200140 0, 0, false, false, false,
141 "foreman_cif"};
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800142 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
143 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200144 fixture->RunWithAnalyzer(foreman_cif);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800145}
146
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200147TEST(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
148 auto fixture = CreateVideoQualityTestFixture();
149
150 ParamsWithLogging generator;
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700151 generator.call.send_side_bwe = true;
152 generator.video[0] = {true, 352, 288, 30, 700000,
153 700000, 700000, false, "multiplex", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200154 0, 0, false, false, false,
155 "GeneratorI420A"};
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700156 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
157 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200158 fixture->RunWithAnalyzer(generator);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800159}
160
Peter Boström12996152016-05-14 02:03:18 +0200161#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -0800162
Patrik Höglund11bf2fa2018-04-09 12:20:50 +0200163#if defined(WEBRTC_LINUX)
164// Crashes on the linux trusty perf bot: bugs.webrtc.org/9129.
165#define MAYBE_ParisQcifWithoutPacketLoss DISABLED_ParisQcifWithoutPacketLoss
166#else
167#define MAYBE_ParisQcifWithoutPacketLoss ParisQcifWithoutPacketLoss
168#endif
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200169TEST(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
170 auto fixture = CreateVideoQualityTestFixture();
171 ParamsWithLogging paris_qcif;
minyue626bc952016-10-31 05:47:02 -0700172 paris_qcif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100173 paris_qcif.video[0] = {true, 176, 144, 30, 300000,
174 300000, 300000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200175 0, 0, false, false, false, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -0700176 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
177 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200178 fixture->RunWithAnalyzer(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000179}
180
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200181TEST(FullStackTest, ForemanCifWithoutPacketLoss) {
182 auto fixture = CreateVideoQualityTestFixture();
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000183 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200184 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700185 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100186 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
187 700000, 700000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200188 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700189 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
190 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200191 fixture->RunWithAnalyzer(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000192}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000193
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200194TEST(FullStackTest, ForemanCif30kbpsWithoutPacketLoss) {
195 auto fixture = CreateVideoQualityTestFixture();
196 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800197 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100198 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
199 30000, 30000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200200 0, 0, false, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800201 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0", 0.0, 0.0,
202 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200203 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800204}
205
Niels Möller6aa415e2018-06-07 11:14:13 +0200206// Link capacity below default start rate. Automatic down scaling enabled.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200207TEST(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
208 auto fixture = CreateVideoQualityTestFixture();
Niels Möller6aa415e2018-06-07 11:14:13 +0200209 VideoQualityTest::Params foreman_cif;
210 foreman_cif.call.send_side_bwe = true;
211 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
212 500000, 2000000, false, "VP8", 1,
213 0, 0, false, false, true, "foreman_cif"};
214 foreman_cif.analyzer = {"foreman_cif_link_150kbps_net_delay_0_0_plr_0",
215 0.0, 0.0,
216 kFullStackTestDurationSecs};
217 foreman_cif.pipe.link_capacity_kbps = 150;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200218 fixture->RunWithAnalyzer(foreman_cif);
Niels Möller6aa415e2018-06-07 11:14:13 +0200219}
220
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200221TEST(FullStackTest, ForemanCifPlr5) {
222 auto fixture = CreateVideoQualityTestFixture();
223 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700224 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100225 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
226 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200227 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700228 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
229 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700230 foreman_cif.pipe.loss_percent = 5;
231 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200232 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000233}
234
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200235TEST(FullStackTest, ForemanCifPlr5Ulpfec) {
236 auto fixture = CreateVideoQualityTestFixture();
237 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800238 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100239 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
240 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200241 0, 0, true, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800242 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_ulpfec", 0.0, 0.0,
243 kFullStackTestDurationSecs};
244 foreman_cif.pipe.loss_percent = 5;
245 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200246 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800247}
248
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200249TEST(FullStackTest, ForemanCifPlr5Flexfec) {
250 auto fixture = CreateVideoQualityTestFixture();
251 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800252 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100253 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
254 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200255 0, 0, false, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800256 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
257 kFullStackTestDurationSecs};
258 foreman_cif.pipe.loss_percent = 5;
259 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200260 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800261}
262
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200263TEST(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
264 auto fixture = CreateVideoQualityTestFixture();
265 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700266 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100267 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
268 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200269 0, 0, false, true, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700270 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
271 0.0, kFullStackTestDurationSecs};
272 foreman_cif.pipe.loss_percent = 3;
273 foreman_cif.pipe.link_capacity_kbps = 500;
274 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200275 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700276}
277
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200278TEST(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
279 auto fixture = CreateVideoQualityTestFixture();
280 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700281 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100282 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
283 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200284 0, 0, true, false, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700285 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
286 0.0, kFullStackTestDurationSecs};
287 foreman_cif.pipe.loss_percent = 3;
288 foreman_cif.pipe.link_capacity_kbps = 500;
289 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200290 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700291}
292
brandtrdd369c62016-11-16 23:56:57 -0800293#if defined(WEBRTC_USE_H264)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200294TEST(FullStackTest, ForemanCifWithoutPacketlossH264) {
295 auto fixture = CreateVideoQualityTestFixture();
brandtr93c5d032016-11-30 07:50:07 -0800296 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200297 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800298 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100299 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
300 700000, 700000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200301 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800302 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
303 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200304 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800305}
306
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200307TEST(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
308 auto fixture = CreateVideoQualityTestFixture();
309 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800310 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100311 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
312 30000, 30000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200313 0, 0, false, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800314 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
315 0.0, kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200316 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800317}
318
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200319TEST(FullStackTest, ForemanCifPlr5H264) {
320 auto fixture = CreateVideoQualityTestFixture();
321 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800322 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100323 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
324 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200325 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800326 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264", 0.0, 0.0,
327 kFullStackTestDurationSecs};
328 foreman_cif.pipe.loss_percent = 5;
329 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200330 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800331}
332
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200333TEST(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
334 auto fixture = CreateVideoQualityTestFixture();
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100335 test::ScopedFieldTrials override_field_trials(
336 "WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/");
337
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200338 ParamsWithLogging foreman_cif;
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100339 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100340 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
341 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200342 0, 0, false, false, false, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100343 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
344 0.0, kFullStackTestDurationSecs};
345 foreman_cif.pipe.loss_percent = 5;
346 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200347 fixture->RunWithAnalyzer(foreman_cif);
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100348}
349
brandtrdd369c62016-11-16 23:56:57 -0800350// Verify that this is worth the bot time, before enabling.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200351TEST(FullStackTest, ForemanCifPlr5H264Flexfec) {
352 auto fixture = CreateVideoQualityTestFixture();
353 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800354 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100355 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
356 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200357 0, 0, false, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800358 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
359 kFullStackTestDurationSecs};
360 foreman_cif.pipe.loss_percent = 5;
361 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200362 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800363}
364
365// Ulpfec with H264 is an unsupported combination, so this test is only useful
366// for debugging. It is therefore disabled by default.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200367TEST(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
368 auto fixture = CreateVideoQualityTestFixture();
369 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800370 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100371 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
372 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200373 0, 0, true, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800374 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
375 kFullStackTestDurationSecs};
376 foreman_cif.pipe.loss_percent = 5;
377 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200378 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800379}
380#endif // defined(WEBRTC_USE_H264)
381
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200382TEST(FullStackTest, ForemanCif500kbps) {
383 auto fixture = CreateVideoQualityTestFixture();
384 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700385 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100386 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
387 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200388 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700389 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
390 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700391 foreman_cif.pipe.queue_length_packets = 0;
392 foreman_cif.pipe.queue_delay_ms = 0;
393 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200394 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000395}
396
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200397TEST(FullStackTest, ForemanCif500kbpsLimitedQueue) {
398 auto fixture = CreateVideoQualityTestFixture();
399 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700400 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100401 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
402 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200403 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700404 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
405 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700406 foreman_cif.pipe.queue_length_packets = 32;
407 foreman_cif.pipe.queue_delay_ms = 0;
408 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200409 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000410}
411
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200412TEST(FullStackTest, ForemanCif500kbps100ms) {
413 auto fixture = CreateVideoQualityTestFixture();
414 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700415 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100416 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
417 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200418 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700419 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
420 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700421 foreman_cif.pipe.queue_length_packets = 0;
422 foreman_cif.pipe.queue_delay_ms = 100;
423 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200424 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000425}
426
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200427TEST(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
428 auto fixture = CreateVideoQualityTestFixture();
429 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700430 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100431 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
432 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200433 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700434 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
435 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700436 foreman_cif.pipe.queue_length_packets = 32;
437 foreman_cif.pipe.queue_delay_ms = 100;
438 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200439 fixture->RunWithAnalyzer(foreman_cif);
stefanb1797672016-08-11 07:00:57 -0700440}
441
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200442TEST(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
443 auto fixture = CreateVideoQualityTestFixture();
444 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800445 foreman_cif.call.send_side_bwe = false;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100446 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
447 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200448 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800449 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
450 0.0, 0.0, kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700451 foreman_cif.pipe.queue_length_packets = 32;
452 foreman_cif.pipe.queue_delay_ms = 100;
453 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200454 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000455}
456
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200457TEST(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
458 auto fixture = CreateVideoQualityTestFixture();
459 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700460 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100461 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
462 2000000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200463 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700464 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
465 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700466 foreman_cif.pipe.queue_length_packets = 32;
467 foreman_cif.pipe.queue_delay_ms = 100;
468 foreman_cif.pipe.link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200469 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000470}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000471
sprangff19d352017-09-06 07:14:02 -0700472// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200473TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
474 auto fixture = CreateVideoQualityTestFixture();
475 ParamsWithLogging conf_motion_hd;
minyue626bc952016-10-31 05:47:02 -0700476 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100477 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000478 true, 1280, 720, 50, 30000,
479 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200480 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700481 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
482 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700483 conf_motion_hd.pipe.queue_length_packets = 32;
484 conf_motion_hd.pipe.queue_delay_ms = 100;
485 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200486 fixture->RunWithAnalyzer(conf_motion_hd);
stefanb1797672016-08-11 07:00:57 -0700487}
488
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200489TEST(FullStackTest, ConferenceMotionHd1TLModerateLimits) {
490 auto fixture = CreateVideoQualityTestFixture();
491 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700492 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100493 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000494 true, 1280, 720, 50, 30000,
495 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200496 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700497 conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0,
498 0.0, kFullStackTestDurationSecs};
499 conf_motion_hd.pipe.queue_length_packets = 50;
500 conf_motion_hd.pipe.loss_percent = 3;
501 conf_motion_hd.pipe.queue_delay_ms = 100;
502 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200503 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700504}
505
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200506TEST(FullStackTest, ConferenceMotionHd2TLModerateLimits) {
507 auto fixture = CreateVideoQualityTestFixture();
508 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700509 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100510 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000511 true, 1280, 720, 50, 30000,
512 3000000, 3000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200513 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700514 conf_motion_hd.analyzer = {"conference_motion_hd_2tl_moderate_limits", 0.0,
515 0.0, kFullStackTestDurationSecs};
516 conf_motion_hd.pipe.queue_length_packets = 50;
517 conf_motion_hd.pipe.loss_percent = 3;
518 conf_motion_hd.pipe.queue_delay_ms = 100;
519 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200520 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700521}
522
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200523TEST(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
524 auto fixture = CreateVideoQualityTestFixture();
525 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700526 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100527 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000528 true, 1280, 720, 50, 30000,
529 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200530 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700531 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
532 0.0, kFullStackTestDurationSecs};
533 conf_motion_hd.pipe.queue_length_packets = 50;
534 conf_motion_hd.pipe.loss_percent = 3;
535 conf_motion_hd.pipe.queue_delay_ms = 100;
536 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200537 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700538}
539
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200540TEST(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
541 auto fixture = CreateVideoQualityTestFixture();
542 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700543 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100544 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000545 true, 1280, 720, 50, 30000,
546 3000000, 3000000, false, "VP8", 4,
Niels Möller6aa415e2018-06-07 11:14:13 +0200547 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700548 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
549 0.0, kFullStackTestDurationSecs};
550 conf_motion_hd.pipe.queue_length_packets = 50;
551 conf_motion_hd.pipe.loss_percent = 3;
552 conf_motion_hd.pipe.queue_delay_ms = 100;
553 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200554 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700555}
556
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200557TEST(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
558 auto fixture = CreateVideoQualityTestFixture();
sprangff19d352017-09-06 07:14:02 -0700559 test::ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200560 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700561 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100562 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000563 true, 1280, 720, 50, 30000,
564 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200565 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700566 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
567 0.0, 0.0, kFullStackTestDurationSecs};
568 conf_motion_hd.pipe.queue_length_packets = 50;
569 conf_motion_hd.pipe.loss_percent = 3;
570 conf_motion_hd.pipe.queue_delay_ms = 100;
571 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200572 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700573}
574
jianj390e64d2017-02-03 09:51:23 -0800575#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200576TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
577 auto fixture = CreateVideoQualityTestFixture();
578 ParamsWithLogging conf_motion_hd;
jianj390e64d2017-02-03 09:51:23 -0800579 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100580 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000581 true, 1280, 720, 50, 30000,
582 3000000, 3000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200583 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800584 conf_motion_hd.analyzer = {
585 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
586 kFullStackTestDurationSecs};
587 conf_motion_hd.pipe.queue_length_packets = 32;
588 conf_motion_hd.pipe.queue_delay_ms = 100;
589 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200590 fixture->RunWithAnalyzer(conf_motion_hd);
jianj390e64d2017-02-03 09:51:23 -0800591}
592#endif
593
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200594TEST(FullStackTest, ScreenshareSlidesVP8_2TL) {
595 auto fixture = CreateVideoQualityTestFixture();
596 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700597 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200598 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
599 1000000, false, "VP8", 2, 1, 400000,
600 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100601 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700602 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
603 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200604 fixture->RunWithAnalyzer(screenshare);
Erik Språng6ee69aa2015-09-03 15:58:05 +0200605}
606
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200607TEST(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
608 auto fixture = CreateVideoQualityTestFixture();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200609 ParamsWithLogging screenshare;
ilnikcb8c1462017-03-09 09:23:30 -0800610 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100611 screenshare.screenshare[0] = {true, false, 10};
612 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
613 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200614 2, 400000, false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800615 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
616 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200617 ParamsWithLogging screenshare_params_high;
Erik Språng28bb3912018-07-11 16:06:55 +0200618 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 400000, 1000000,
619 1000000, false, "VP8", 3, 0, 400000,
620 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800621 VideoQualityTest::Params screenshare_params_low;
Erik Språng28bb3912018-07-11 16:06:55 +0200622 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000, 200000,
623 1000000, false, "VP8", 2, 0, 400000,
624 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800625
626 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200627 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
628 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200629 screenshare.ss[0] = {
630 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
631 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200632 fixture->RunWithAnalyzer(screenshare);
ilnikcb8c1462017-03-09 09:23:30 -0800633}
634
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200635TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
636 auto fixture = CreateVideoQualityTestFixture();
637 ParamsWithLogging config;
minyue626bc952016-10-31 05:47:02 -0700638 config.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200639 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
640 1000000, false, "VP8", 2, 1, 400000,
641 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100642 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700643 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
644 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200645 fixture->RunWithAnalyzer(config);
ivica028cf482015-07-30 02:15:56 -0700646}
647
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200648TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
649 auto fixture = CreateVideoQualityTestFixture();
650 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700651 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200652 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
653 1000000, false, "VP8", 2, 1, 400000,
654 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100655 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700656 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
657 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800658 screenshare.pipe.loss_percent = 5;
659 screenshare.pipe.queue_delay_ms = 200;
660 screenshare.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200661 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800662}
663
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200664TEST(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
665 auto fixture = CreateVideoQualityTestFixture();
666 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700667 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200668 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
669 1000000, false, "VP8", 2, 1, 400000,
670 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100671 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700672 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
673 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800674 screenshare.pipe.loss_percent = 10;
675 screenshare.pipe.queue_delay_ms = 200;
676 screenshare.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200677 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800678}
679
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200680TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
681 auto fixture = CreateVideoQualityTestFixture();
682 ParamsWithLogging screenshare;
sprange566e172017-06-08 01:29:15 -0700683 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200684 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
685 1000000, false, "VP8", 2, 1, 400000,
686 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100687 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700688 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
689 kFullStackTestDurationSecs};
690 screenshare.pipe.loss_percent = 5;
691 screenshare.pipe.link_capacity_kbps = 200;
692 screenshare.pipe.queue_length_packets = 30;
693
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200694 fixture->RunWithAnalyzer(screenshare);
sprange566e172017-06-08 01:29:15 -0700695}
696
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200697TEST(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
698 auto fixture = CreateVideoQualityTestFixture();
699 ParamsWithLogging screenshare;
sprang89c4a7e2017-06-30 13:27:40 -0700700 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200701 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
702 1000000, false, "VP8", 2, 1, 400000,
703 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100704 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700705 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
706 kFullStackTestDurationSecs};
707 screenshare.pipe.loss_percent = 1;
708 screenshare.pipe.link_capacity_kbps = 1200;
709 screenshare.pipe.queue_length_packets = 30;
710
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200711 fixture->RunWithAnalyzer(screenshare);
sprang89c4a7e2017-06-30 13:27:40 -0700712}
713
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200714const ParamsWithLogging::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000715 true, 1280, 720, 30, 800000,
716 2500000, 2500000, false, "VP9", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200717 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800718
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200719const ParamsWithLogging::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000720 true, 1280, 720, 30, 800000,
721 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200722 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800723
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200724const ParamsWithLogging::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000725 true, 640, 360, 30, 150000,
726 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200727 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800728
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200729const ParamsWithLogging::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000730 true, 320, 180, 30, 30000,
731 150000, 200000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200732 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800733
Peter Boström12996152016-05-14 02:03:18 +0200734#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200735TEST(FullStackTest, ScreenshareSlidesVP9_2SL) {
736 auto fixture = CreateVideoQualityTestFixture();
737 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700738 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100739 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
740 200000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200741 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100742 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700743 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
744 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200745 screenshare.ss[0] = {
746 std::vector<VideoStream>(), 0, 2, 1, InterLayerPredMode::kOn,
747 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200748 fixture->RunWithAnalyzer(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000749}
ilnik2a8c2f52017-02-15 02:23:28 -0800750
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200751TEST(FullStackTest, VP9SVC_3SL_High) {
752 auto fixture = CreateVideoQualityTestFixture();
753 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800754 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100755 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800756 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
757 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200758
Sergey Silkin57027362018-05-15 09:12:05 +0200759 simulcast.ss[0] = {
760 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
761 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200762 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800763}
764
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200765TEST(FullStackTest, VP9SVC_3SL_Medium) {
766 auto fixture = CreateVideoQualityTestFixture();
767 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800768 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100769 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800770 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
771 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200772 simulcast.ss[0] = {
773 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
774 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200775 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800776}
777
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200778TEST(FullStackTest, VP9SVC_3SL_Low) {
779 auto fixture = CreateVideoQualityTestFixture();
780 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800781 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100782 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800783 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200784 simulcast.ss[0] = {
785 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
786 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200787 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800788}
Sergey Silkin0643fd62018-05-17 12:50:53 +0200789
Ilya Nikolaevskiy14ac7932018-07-12 10:39:41 +0200790// bugs.webrtc.org/9506
791#if !defined(WEBRTC_MAC)
792
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200793TEST(FullStackTest, VP9KSVC_3SL_High) {
794 auto fixture = CreateVideoQualityTestFixture();
795 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200796 simulcast.call.send_side_bwe = true;
797 simulcast.video[0] = kSvcVp9Video;
798 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
799 kFullStackTestDurationSecs};
800 simulcast.ss[0] = {
801 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
802 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200803 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200804}
805
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200806TEST(FullStackTest, VP9KSVC_3SL_Medium) {
807 auto fixture = CreateVideoQualityTestFixture();
808 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200809 simulcast.call.send_side_bwe = true;
810 simulcast.video[0] = kSvcVp9Video;
811 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
812 kFullStackTestDurationSecs};
813 simulcast.ss[0] = {
814 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
815 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200816 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200817}
818
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200819TEST(FullStackTest, VP9KSVC_3SL_Low) {
820 auto fixture = CreateVideoQualityTestFixture();
821 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200822 simulcast.call.send_side_bwe = true;
823 simulcast.video[0] = kSvcVp9Video;
824 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
825 kFullStackTestDurationSecs};
826 simulcast.ss[0] = {
827 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
828 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200829 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200830}
“Michael277a6562018-06-01 14:09:19 -0500831
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200832TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
833 auto fixture = CreateVideoQualityTestFixture();
“Michael277a6562018-06-01 14:09:19 -0500834 VideoQualityTest::Params simulcast;
835 simulcast.call.send_side_bwe = true;
836 simulcast.video[0] = kSvcVp9Video;
837 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
838 kFullStackTestDurationSecs};
839 simulcast.ss[0] = {
840 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
841 std::vector<SpatialLayer>(), false};
842 simulcast.pipe.link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200843 fixture->RunWithAnalyzer(simulcast);
“Michael277a6562018-06-01 14:09:19 -0500844}
Ilya Nikolaevskiy14ac7932018-07-12 10:39:41 +0200845#endif // !defined(WEBRTC_MAC)
“Michael277a6562018-06-01 14:09:19 -0500846
Peter Boström12996152016-05-14 02:03:18 +0200847#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800848
ilnik6b826ef2017-06-16 06:53:48 -0700849// Android bots can't handle FullHD, so disable the test.
Sam Zackrissonc3d8bb12018-05-02 10:22:32 +0200850// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
851#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 06:53:48 -0700852#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
853#else
854#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
855#endif
856
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200857TEST(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
858 auto fixture = CreateVideoQualityTestFixture();
859 ParamsWithLogging simulcast;
ilnik6b826ef2017-06-16 06:53:48 -0700860 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;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200868 std::vector<VideoStream> streams = {
869 VideoQualityTest::DefaultVideoStream(simulcast, 0),
870 VideoQualityTest::DefaultVideoStream(simulcast, 0),
871 VideoQualityTest::DefaultVideoStream(simulcast, 0)
872 };
Sergey Silkin57027362018-05-15 09:12:05 +0200873 simulcast.ss[0] = {
874 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
875 true};
ilnik6b826ef2017-06-16 06:53:48 -0700876 webrtc::test::ScopedFieldTrials override_trials(
877 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/");
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200878 fixture->RunWithAnalyzer(simulcast);
ilnik6b826ef2017-06-16 06:53:48 -0700879}
880
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200881TEST(FullStackTest, SimulcastVP8_3SL_High) {
882 auto fixture = CreateVideoQualityTestFixture();
883 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800884 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100885 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800886 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800887 kFullStackTestDurationSecs};
888 simulcast.pipe.loss_percent = 0;
889 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200890 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100891 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200892 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100893 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200894 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100895 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800896
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100897 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200898 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
899 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
900 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200901 simulcast.ss[0] = {
902 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
903 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200904 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800905}
906
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200907TEST(FullStackTest, SimulcastVP8_3SL_Medium) {
908 auto fixture = CreateVideoQualityTestFixture();
909 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800910 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100911 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800912 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800913 kFullStackTestDurationSecs};
914 simulcast.pipe.loss_percent = 0;
915 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200916 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100917 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200918 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100919 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200920 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100921 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800922
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100923 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200924 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
925 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
926 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200927 simulcast.ss[0] = {
928 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
929 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200930 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800931}
932
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200933TEST(FullStackTest, SimulcastVP8_3SL_Low) {
934 auto fixture = CreateVideoQualityTestFixture();
935 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800936 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100937 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800938 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800939 kFullStackTestDurationSecs};
940 simulcast.pipe.loss_percent = 0;
941 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200942 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100943 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200944 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100945 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200946 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100947 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800948
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100949 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200950 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
951 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
952 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200953 simulcast.ss[0] = {
954 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
955 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200956 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800957}
958
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200959TEST(FullStackTest, LargeRoomVP8_5thumb) {
960 auto fixture = CreateVideoQualityTestFixture();
961 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -0800962 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100963 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800964 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
965 kFullStackTestDurationSecs};
966 large_room.pipe.loss_percent = 0;
967 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200968 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100969 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200970 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100971 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200972 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100973 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800974
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100975 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200976 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
977 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
978 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700979 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 09:12:05 +0200980 large_room.ss[0] = {
981 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
982 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200983 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -0800984}
985
oprypin743117f2017-09-15 05:24:24 -0700986#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
987// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -0800988// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
989#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800990#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800991#else
992#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800993#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800994#endif
995
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200996TEST(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
997 auto fixture = CreateVideoQualityTestFixture();
998 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -0800999 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001000 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001001 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
1002 kFullStackTestDurationSecs};
1003 large_room.pipe.loss_percent = 0;
1004 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001005 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001006 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001007 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001008 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001009 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001010 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001011
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001012 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001013 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1014 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1015 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001016 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 09:12:05 +02001017 large_room.ss[0] = {
1018 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1019 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001020 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001021}
1022
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001023TEST(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1024 auto fixture = CreateVideoQualityTestFixture();
1025 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001026 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001027 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001028 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
1029 kFullStackTestDurationSecs};
1030 large_room.pipe.loss_percent = 0;
1031 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001032 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001033 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001034 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001035 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001036 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001037 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001038
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001039 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001040 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1041 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1042 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001043 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 09:12:05 +02001044 large_room.ss[0] = {
1045 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1046 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001047 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001048}
1049
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001050class DualStreamsTest : public ::testing::TestWithParam<int> {};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001051
1052// Disable dual video test on mobile device becuase it's too heavy.
1053#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1054TEST_P(DualStreamsTest,
1055 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
1056 test::ScopedFieldTrials field_trial(
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001057 std::string(kRoundRobinPacingQueueExperiment) +
1058 std::string(kPacerPushBackExperiment));
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001059 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001060 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001061
1062 // Screenshare Settings.
1063 dual_streams.screenshare[first_stream] = {true, false, 10};
1064 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1065 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001066 2, 400000, false, false, false,
1067 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001068
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001069 ParamsWithLogging screenshare_params_high;
Erik Språng28bb3912018-07-11 16:06:55 +02001070 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 400000, 1000000,
1071 1000000, false, "VP8", 3, 0, 400000,
1072 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001073 VideoQualityTest::Params screenshare_params_low;
Erik Språng28bb3912018-07-11 16:06:55 +02001074 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1075 1000000, false, "VP8", 2, 0, 400000,
1076 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001077 std::vector<VideoStream> screenhsare_streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001078 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1079 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001080
Sergey Silkin57027362018-05-15 09:12:05 +02001081 dual_streams.ss[first_stream] = {
1082 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1083 std::vector<SpatialLayer>(), false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001084
1085 // Video settings.
1086 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
1087
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001088 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001089 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001090 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001091 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001092 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001093 video_params_low.video[0] = kSimulcastVp8VideoLow;
1094 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001095 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1096 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1097 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001098
1099 dual_streams.ss[1 - first_stream] = {
Sergey Silkin57027362018-05-15 09:12:05 +02001100 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1101 false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001102
1103 // Call settings.
1104 dual_streams.call.send_side_bwe = true;
1105 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001106 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1107 std::to_string(first_stream);
1108 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001109 dual_streams.pipe.loss_percent = 1;
1110 dual_streams.pipe.link_capacity_kbps = 7500;
1111 dual_streams.pipe.queue_length_packets = 30;
1112 dual_streams.pipe.queue_delay_ms = 100;
1113
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001114 auto fixture = CreateVideoQualityTestFixture();
1115 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001116}
1117#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1118
1119TEST_P(DualStreamsTest, Conference_Restricted) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001120 test::ScopedFieldTrials field_trial(
1121 std::string(kRoundRobinPacingQueueExperiment) +
1122 std::string(kPacerPushBackExperiment));
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001123 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001124 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001125
1126 // Screenshare Settings.
1127 dual_streams.screenshare[first_stream] = {true, false, 10};
1128 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1129 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001130 2, 400000, false, false, false,
1131 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001132 // Video settings.
1133 dual_streams.video[1 - first_stream] = {
1134 true, 1280, 720, 30, 150000,
1135 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001136 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001137
1138 // Call settings.
1139 dual_streams.call.send_side_bwe = true;
1140 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001141 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1142 std::to_string(first_stream);
1143 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001144 dual_streams.pipe.loss_percent = 1;
1145 dual_streams.pipe.link_capacity_kbps = 5000;
1146 dual_streams.pipe.queue_length_packets = 30;
1147 dual_streams.pipe.queue_delay_ms = 100;
1148
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001149 auto fixture = CreateVideoQualityTestFixture();
1150 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001151}
1152
1153INSTANTIATE_TEST_CASE_P(FullStackTest,
1154 DualStreamsTest,
1155 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -08001156
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001157} // namespace webrtc