blob: 6fae630f2562805e3684932d6b458dccb2501c9d [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 */
Yves Gerey3e707812018-11-28 16:47:49 +010010#include <memory>
11#include <string>
12#include <utility>
13#include <vector>
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000014
Yves Gerey3e707812018-11-28 16:47:49 +010015#include "absl/memory/memory.h"
16#include "absl/types/optional.h"
17#include "api/test/simulated_network.h"
Patrik Höglundd8f3c172018-09-26 14:39:17 +020018#include "api/test/test_dependency_factory.h"
Yves Gerey3e707812018-11-28 16:47:49 +010019#include "api/test/video_quality_test_fixture.h"
20#include "api/video_codecs/sdp_video_format.h"
21#include "api/video_codecs/video_codec.h"
22#include "api/video_codecs/video_encoder_config.h"
Emircan Uysaler0823eec2018-07-13 17:10:00 -070023#include "media/base/vp9_profile.h"
24#include "modules/video_coding/codecs/vp9/include/vp9.h"
Sebastian Janssonf8518882018-05-31 14:52:59 +020025#include "rtc_base/flags.h"
Mirko Bonadei17f48782018-09-28 08:51:10 +020026#include "system_wrappers/include/field_trial.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020027#include "test/field_trial.h"
28#include "test/gtest.h"
Rasmus Brandt3c589be2019-03-13 11:32:40 +010029#include "test/testsupport/file_utils.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020030#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000031
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000032namespace webrtc {
Sebastian Janssonf8518882018-05-31 14:52:59 +020033namespace flags {
34
Mirko Bonadei2dfa9982018-10-18 11:35:32 +020035WEBRTC_DEFINE_string(rtc_event_log_name,
36 "",
37 "Filename for rtc event log. Two files "
38 "with \"_send\" and \"_recv\" suffixes will be created.");
Sebastian Janssonf8518882018-05-31 14:52:59 +020039std::string RtcEventLogName() {
40 return static_cast<std::string>(FLAG_rtc_event_log_name);
41}
Mirko Bonadei2dfa9982018-10-18 11:35:32 +020042WEBRTC_DEFINE_string(rtp_dump_name,
43 "",
44 "Filename for dumped received RTP stream.");
Sebastian Janssonf8518882018-05-31 14:52:59 +020045std::string RtpDumpName() {
46 return static_cast<std::string>(FLAG_rtp_dump_name);
47}
Mirko Bonadei2dfa9982018-10-18 11:35:32 +020048WEBRTC_DEFINE_string(
49 encoded_frame_path,
50 "",
51 "The base path for encoded frame logs. Created files will have "
52 "the form <encoded_frame_path>.<n>.(recv|send.<m>).ivf");
Sebastian Janssonf8518882018-05-31 14:52:59 +020053std::string EncodedFramePath() {
54 return static_cast<std::string>(FLAG_encoded_frame_path);
55}
56} // namespace flags
57} // namespace webrtc
58
59namespace webrtc {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000060
sprang89c4a7e2017-06-30 13:27:40 -070061namespace {
brandtrdd369c62016-11-16 23:56:57 -080062static const int kFullStackTestDurationSecs = 45;
Erik Språngd3438aa2018-11-08 16:56:43 +010063const char kVp8TrustedRateControllerFieldTrial[] =
64 "WebRTC-LibvpxVp8TrustedRateController/Enabled/";
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000065
Patrik Höglundb6b29e02018-06-21 16:58:01 +020066struct ParamsWithLogging : public VideoQualityTest::Params {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000067 public:
Patrik Höglundb6b29e02018-06-21 16:58:01 +020068 ParamsWithLogging() {
69 // Use these logging flags by default, for everything.
Mirko Bonadei45a4c412018-07-31 15:07:28 +020070 logging = {flags::RtcEventLogName(), flags::RtpDumpName(),
71 flags::EncodedFramePath()};
Artem Titov75e36472018-10-08 12:28:56 +020072 this->config = BuiltInNetworkBehaviorConfig();
pbos@webrtc.org94015242013-10-16 11:05:37 +000073 }
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000074};
75
Patrik Höglundb6b29e02018-06-21 16:58:01 +020076std::unique_ptr<VideoQualityTestFixtureInterface>
77CreateVideoQualityTestFixture() {
Patrik Höglundd8f3c172018-09-26 14:39:17 +020078 // The components will normally be nullptr (= use defaults), but it's possible
79 // for external test runners to override the list of injected components.
80 auto components = TestDependencyFactory::GetInstance().CreateComponents();
81 return absl::make_unique<VideoQualityTest>(std::move(components));
Patrik Höglundb6b29e02018-06-21 16:58:01 +020082}
83
Erik Språngb6b1cac2018-08-09 16:12:54 +020084// Takes the current active field trials set, and appends some new trials.
85std::string AppendFieldTrials(std::string new_trial_string) {
86 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
87}
Rasmus Brandt3c589be2019-03-13 11:32:40 +010088
89std::string ClipNameToClipPath(const char* clip_name) {
90 return test::ResourcePath(clip_name, "yuv");
91}
Patrik Höglundb6b29e02018-06-21 16:58:01 +020092} // namespace
93
sprangce4aef12015-11-02 07:23:20 -080094// VideoQualityTest::Params params = {
95// { ... }, // Common.
96// { ... }, // Video-specific settings.
97// { ... }, // Screenshare-specific settings.
98// { ... }, // Analyzer settings.
99// pipe, // FakeNetworkPipe::Config
100// { ... }, // Spatial scalability.
101// logs // bool
102// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000103
philipeldd8b0d82018-09-27 11:18:10 +0200104class GenericDescriptorTest : public ::testing::TestWithParam<std::string> {
105 public:
philipelf638bbc2018-10-04 16:57:12 +0200106 GenericDescriptorTest()
Ilya Nikolaevskiy0500b522019-01-22 11:12:51 +0100107 : field_trial_(AppendFieldTrials(GetParam())),
philipelf638bbc2018-10-04 16:57:12 +0200108 generic_descriptor_enabled_(
109 field_trial::IsEnabled("WebRTC-GenericDescriptor")) {}
philipeldd8b0d82018-09-27 11:18:10 +0200110
111 std::string GetTestName(std::string base) {
philipelf638bbc2018-10-04 16:57:12 +0200112 if (generic_descriptor_enabled_)
philipeldd8b0d82018-09-27 11:18:10 +0200113 base += "_generic_descriptor";
114 return base;
115 }
116
philipelf638bbc2018-10-04 16:57:12 +0200117 bool GenericDescriptorEnabled() const { return generic_descriptor_enabled_; }
118
philipeldd8b0d82018-09-27 11:18:10 +0200119 private:
120 test::ScopedFieldTrials field_trial_;
philipelf638bbc2018-10-04 16:57:12 +0200121 bool generic_descriptor_enabled_;
philipeldd8b0d82018-09-27 11:18:10 +0200122};
123
Mirko Bonadei8ef57932018-11-16 14:38:03 +0100124#if defined(RTC_ENABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200125TEST(FullStackTest, ForemanCifWithoutPacketLossVp9) {
126 auto fixture = CreateVideoQualityTestFixture();
127 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800128 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100129 foreman_cif.video[0] = {
130 true, 352, 288, 30,
131 700000, 700000, 700000, false,
132 "VP9", 1, 0, 0,
133 false, false, true, ClipNameToClipPath("foreman_cif")};
brandtr93c5d032016-11-30 07:50:07 -0800134 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
135 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200136 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -0800137}
138
philipeldd8b0d82018-09-27 11:18:10 +0200139TEST_P(GenericDescriptorTest, ForemanCifPlr5Vp9) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200140 auto fixture = CreateVideoQualityTestFixture();
141 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800142 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100143 foreman_cif.video[0] = {
144 true, 352, 288, 30,
145 30000, 500000, 2000000, false,
146 "VP9", 1, 0, 0,
147 false, false, true, ClipNameToClipPath("foreman_cif")};
philipeldd8b0d82018-09-27 11:18:10 +0200148 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_VP9"), 0.0,
149 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200150 foreman_cif.config->loss_percent = 5;
151 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 16:57:12 +0200152 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200153 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -0800154}
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800155
Emircan Uysaler0823eec2018-07-13 17:10:00 -0700156TEST(FullStackTest, GeneratorWithoutPacketLossVp9Profile2) {
157 // Profile 2 might not be available on some platforms until
158 // https://bugs.chromium.org/p/webm/issues/detail?id=1544 is solved.
159 bool profile_2_is_supported = false;
160 for (const auto& codec : SupportedVP9Codecs()) {
161 if (ParseSdpForVP9Profile(codec.parameters)
162 .value_or(VP9Profile::kProfile0) == VP9Profile::kProfile2) {
163 profile_2_is_supported = true;
164 }
165 }
166 if (!profile_2_is_supported)
167 return;
168 auto fixture = CreateVideoQualityTestFixture();
169
170 SdpVideoFormat::Parameters vp92 = {
171 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}};
172 ParamsWithLogging generator;
173 generator.call.send_side_bwe = true;
174 generator.video[0] = {
175 true, 352, 288, 30, 700000, 700000, 700000, false, "VP9",
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100176 1, 0, 0, false, false, true, "GeneratorI010", 0, vp92};
Emircan Uysaler0823eec2018-07-13 17:10:00 -0700177 generator.analyzer = {"generator_net_delay_0_0_plr_0_VP9Profile2", 0.0, 0.0,
178 kFullStackTestDurationSecs};
179 fixture->RunWithAnalyzer(generator);
180}
181
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200182TEST(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
183 auto fixture = CreateVideoQualityTestFixture();
184 ParamsWithLogging foreman_cif;
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800185 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100186 foreman_cif.video[0] = {
187 true, 352, 288, 30,
188 700000, 700000, 700000, false,
189 "multiplex", 1, 0, 0,
190 false, false, false, ClipNameToClipPath("foreman_cif")};
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800191 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
192 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200193 fixture->RunWithAnalyzer(foreman_cif);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800194}
195
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200196TEST(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
197 auto fixture = CreateVideoQualityTestFixture();
198
199 ParamsWithLogging generator;
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700200 generator.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100201 generator.video[0] = {
202 true, 352, 288, 30, 700000, 700000, 700000, false,
203 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700204 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
205 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200206 fixture->RunWithAnalyzer(generator);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800207}
208
Mirko Bonadei8ef57932018-11-16 14:38:03 +0100209#endif // defined(RTC_ENABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -0800210
Patrik Höglund11bf2fa2018-04-09 12:20:50 +0200211#if defined(WEBRTC_LINUX)
212// Crashes on the linux trusty perf bot: bugs.webrtc.org/9129.
213#define MAYBE_ParisQcifWithoutPacketLoss DISABLED_ParisQcifWithoutPacketLoss
214#else
215#define MAYBE_ParisQcifWithoutPacketLoss ParisQcifWithoutPacketLoss
216#endif
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200217TEST(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
218 auto fixture = CreateVideoQualityTestFixture();
219 ParamsWithLogging paris_qcif;
minyue626bc952016-10-31 05:47:02 -0700220 paris_qcif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100221 paris_qcif.video[0] = {
222 true, 176, 144, 30,
223 300000, 300000, 300000, false,
224 "VP8", 1, 0, 0,
225 false, false, true, ClipNameToClipPath("paris_qcif")};
minyue626bc952016-10-31 05:47:02 -0700226 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
227 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200228 fixture->RunWithAnalyzer(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000229}
230
philipeldd8b0d82018-09-27 11:18:10 +0200231TEST_P(GenericDescriptorTest, ForemanCifWithoutPacketLoss) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200232 auto fixture = CreateVideoQualityTestFixture();
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000233 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200234 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700235 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100236 foreman_cif.video[0] = {
237 true, 352, 288, 30,
238 700000, 700000, 700000, false,
239 "VP8", 1, 0, 0,
240 false, false, true, ClipNameToClipPath("foreman_cif")};
philipeldd8b0d82018-09-27 11:18:10 +0200241 foreman_cif.analyzer = {GetTestName("foreman_cif_net_delay_0_0_plr_0"), 0.0,
242 0.0, kFullStackTestDurationSecs};
philipelf638bbc2018-10-04 16:57:12 +0200243 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200244 fixture->RunWithAnalyzer(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000245}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000246
philipeldd8b0d82018-09-27 11:18:10 +0200247TEST_P(GenericDescriptorTest, ForemanCif30kbpsWithoutPacketLoss) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200248 auto fixture = CreateVideoQualityTestFixture();
249 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800250 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100251 foreman_cif.video[0] = {
252 true, 352, 288, 10,
253 30000, 30000, 30000, false,
254 "VP8", 1, 0, 0,
255 false, false, true, ClipNameToClipPath("foreman_cif")};
philipeldd8b0d82018-09-27 11:18:10 +0200256 foreman_cif.analyzer = {GetTestName("foreman_cif_30kbps_net_delay_0_0_plr_0"),
257 0.0, 0.0, kFullStackTestDurationSecs};
philipelf638bbc2018-10-04 16:57:12 +0200258 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200259 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800260}
261
Erik Språngd3438aa2018-11-08 16:56:43 +0100262// TODO(webrtc:9722): Remove when experiment is cleaned up.
263TEST_P(GenericDescriptorTest,
264 ForemanCif30kbpsWithoutPacketLossTrustedRateControl) {
265 test::ScopedFieldTrials override_field_trials(
266 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
267 auto fixture = CreateVideoQualityTestFixture();
268
269 ParamsWithLogging foreman_cif;
270 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100271 foreman_cif.video[0] = {
272 true, 352, 288, 10,
273 30000, 30000, 30000, false,
274 "VP8", 1, 0, 0,
275 false, false, true, ClipNameToClipPath("foreman_cif")};
Erik Språngd3438aa2018-11-08 16:56:43 +0100276 foreman_cif.analyzer = {
277 GetTestName("foreman_cif_30kbps_net_delay_0_0_plr_0_trusted_rate_ctrl"),
278 0.0, 0.0, kFullStackTestDurationSecs};
279 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
280 fixture->RunWithAnalyzer(foreman_cif);
281}
282
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100283// Link capacity below default start rate.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200284TEST(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
285 auto fixture = CreateVideoQualityTestFixture();
Niels Möller0e909822018-08-21 17:34:35 +0200286 ParamsWithLogging foreman_cif;
Niels Möller6aa415e2018-06-07 11:14:13 +0200287 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100288 foreman_cif.video[0] = {
289 true, 352, 288, 30,
290 30000, 500000, 2000000, false,
291 "VP8", 1, 0, 0,
292 false, false, true, ClipNameToClipPath("foreman_cif")};
Jonas Olssona4d87372019-07-05 19:08:33 +0200293 foreman_cif.analyzer = {"foreman_cif_link_150kbps_net_delay_0_0_plr_0", 0.0,
294 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200295 foreman_cif.config->link_capacity_kbps = 150;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200296 fixture->RunWithAnalyzer(foreman_cif);
Niels Möller6aa415e2018-06-07 11:14:13 +0200297}
298
Erik Språng616b2332019-02-11 14:16:28 +0100299// Restricted network and encoder overproducing by 30%.
300TEST(FullStackTest, ForemanCifLink150kbpsBadRateController) {
301 auto fixture = CreateVideoQualityTestFixture();
302 ParamsWithLogging foreman_cif;
303 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100304 foreman_cif.video[0] = {
305 true, 352, 288, 30,
306 30000, 500000, 2000000, false,
307 "VP8", 1, 0, 0,
308 false, false, true, ClipNameToClipPath("foreman_cif"),
309 0, {}, 1.30};
Erik Språng616b2332019-02-11 14:16:28 +0100310 foreman_cif.analyzer = {
311 "foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30", 0.0, 0.0,
312 kFullStackTestDurationSecs};
313 foreman_cif.config->link_capacity_kbps = 150;
314 foreman_cif.config->queue_length_packets = 30;
315 foreman_cif.config->queue_delay_ms = 100;
316 fixture->RunWithAnalyzer(foreman_cif);
317}
318
Erik Språng8b8d01a2019-03-02 20:54:55 +0100319// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
320// Packet rate and loss are low enough that loss will happen with ~3s interval.
321// This triggers protection overhead to toggle between zero and non-zero.
322// Link queue is restrictive enough to trigger loss on probes.
323TEST(FullStackTest, ForemanCifMediaCapacitySmallLossAndQueue) {
324 auto fixture = CreateVideoQualityTestFixture();
325 ParamsWithLogging foreman_cif;
326 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100327 foreman_cif.video[0] = {
328 true, 352, 288, 30,
329 30000, 500000, 2000000, false,
330 "VP8", 1, 0, 0,
331 false, false, true, ClipNameToClipPath("foreman_cif"),
332 0, {}, 1.30};
Erik Språng8b8d01a2019-03-02 20:54:55 +0100333 foreman_cif.analyzer = {"foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
334 0.0, 0.0, kFullStackTestDurationSecs};
335 foreman_cif.config->link_capacity_kbps = 250;
336 foreman_cif.config->queue_length_packets = 10;
337 foreman_cif.config->queue_delay_ms = 100;
338 foreman_cif.config->loss_percent = 1;
339 fixture->RunWithAnalyzer(foreman_cif);
340}
341
philipeldd8b0d82018-09-27 11:18:10 +0200342TEST_P(GenericDescriptorTest, ForemanCifPlr5) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200343 auto fixture = CreateVideoQualityTestFixture();
344 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700345 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100346 foreman_cif.video[0] = {
347 true, 352, 288, 30,
348 30000, 500000, 2000000, false,
349 "VP8", 1, 0, 0,
350 false, false, true, ClipNameToClipPath("foreman_cif")};
philipeldd8b0d82018-09-27 11:18:10 +0200351 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5"), 0.0, 0.0,
Lu Liu6f683242018-09-25 18:48:48 +0000352 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200353 foreman_cif.config->loss_percent = 5;
354 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 16:57:12 +0200355 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200356 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000357}
358
philipeldd8b0d82018-09-27 11:18:10 +0200359TEST_P(GenericDescriptorTest, ForemanCifPlr5Ulpfec) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200360 auto fixture = CreateVideoQualityTestFixture();
361 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800362 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100363 foreman_cif.video[0] = {
364 true, 352, 288, 30,
365 30000, 500000, 2000000, false,
366 "VP8", 1, 0, 0,
367 true, false, true, ClipNameToClipPath("foreman_cif")};
philipeldd8b0d82018-09-27 11:18:10 +0200368 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_ulpfec"),
369 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200370 foreman_cif.config->loss_percent = 5;
371 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 16:57:12 +0200372 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200373 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800374}
375
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200376TEST(FullStackTest, ForemanCifPlr5Flexfec) {
377 auto fixture = CreateVideoQualityTestFixture();
378 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800379 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100380 foreman_cif.video[0] = {
381 true, 352, 288, 30,
382 30000, 500000, 2000000, false,
383 "VP8", 1, 0, 0,
384 false, true, true, ClipNameToClipPath("foreman_cif")};
brandtr93c5d032016-11-30 07:50:07 -0800385 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
386 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200387 foreman_cif.config->loss_percent = 5;
388 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200389 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800390}
391
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200392TEST(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
393 auto fixture = CreateVideoQualityTestFixture();
394 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700395 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100396 foreman_cif.video[0] = {
397 true, 352, 288, 30,
398 30000, 500000, 2000000, false,
399 "VP8", 1, 0, 0,
400 false, true, true, ClipNameToClipPath("foreman_cif")};
stefan889d9652017-07-05 03:03:02 -0700401 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
402 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200403 foreman_cif.config->loss_percent = 3;
404 foreman_cif.config->link_capacity_kbps = 500;
405 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200406 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700407}
408
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200409TEST(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
410 auto fixture = CreateVideoQualityTestFixture();
411 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700412 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100413 foreman_cif.video[0] = {
414 true, 352, 288, 30,
415 30000, 500000, 2000000, false,
416 "VP8", 1, 0, 0,
417 true, false, true, ClipNameToClipPath("foreman_cif")};
stefan889d9652017-07-05 03:03:02 -0700418 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
419 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200420 foreman_cif.config->loss_percent = 3;
421 foreman_cif.config->link_capacity_kbps = 500;
422 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200423 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700424}
425
brandtrdd369c62016-11-16 23:56:57 -0800426#if defined(WEBRTC_USE_H264)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200427TEST(FullStackTest, ForemanCifWithoutPacketlossH264) {
428 auto fixture = CreateVideoQualityTestFixture();
brandtr93c5d032016-11-30 07:50:07 -0800429 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200430 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800431 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100432 foreman_cif.video[0] = {
433 true, 352, 288, 30,
434 700000, 700000, 700000, false,
435 "H264", 1, 0, 0,
436 false, false, true, ClipNameToClipPath("foreman_cif")};
brandtr93c5d032016-11-30 07:50:07 -0800437 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
438 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200439 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800440}
441
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200442TEST(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
443 auto fixture = CreateVideoQualityTestFixture();
444 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800445 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100446 foreman_cif.video[0] = {
447 true, 352, 288, 10,
448 30000, 30000, 30000, false,
449 "H264", 1, 0, 0,
450 false, false, true, ClipNameToClipPath("foreman_cif")};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800451 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
452 0.0, kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200453 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800454}
455
philipeldd8b0d82018-09-27 11:18:10 +0200456TEST_P(GenericDescriptorTest, ForemanCifPlr5H264) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200457 auto fixture = CreateVideoQualityTestFixture();
458 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800459 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100460 foreman_cif.video[0] = {
461 true, 352, 288, 30,
462 30000, 500000, 2000000, false,
463 "H264", 1, 0, 0,
464 false, false, true, ClipNameToClipPath("foreman_cif")};
philipeldd8b0d82018-09-27 11:18:10 +0200465 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_H264"), 0.0,
466 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200467 foreman_cif.config->loss_percent = 5;
468 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 16:57:12 +0200469 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200470 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800471}
472
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200473TEST(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100474 test::ScopedFieldTrials override_field_trials(
Erik Språngb6b1cac2018-08-09 16:12:54 +0200475 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
Erik Språngd3438aa2018-11-08 16:56:43 +0100476 auto fixture = CreateVideoQualityTestFixture();
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100477
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200478 ParamsWithLogging foreman_cif;
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100479 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100480 foreman_cif.video[0] = {
481 true, 352, 288, 30,
482 30000, 500000, 2000000, false,
483 "H264", 1, 0, 0,
484 false, false, true, ClipNameToClipPath("foreman_cif")};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100485 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
486 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200487 foreman_cif.config->loss_percent = 5;
488 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200489 fixture->RunWithAnalyzer(foreman_cif);
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100490}
491
brandtrdd369c62016-11-16 23:56:57 -0800492// Verify that this is worth the bot time, before enabling.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200493TEST(FullStackTest, ForemanCifPlr5H264Flexfec) {
494 auto fixture = CreateVideoQualityTestFixture();
495 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800496 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100497 foreman_cif.video[0] = {
498 true, 352, 288, 30,
499 30000, 500000, 2000000, false,
500 "H264", 1, 0, 0,
501 false, true, true, ClipNameToClipPath("foreman_cif")};
brandtr93c5d032016-11-30 07:50:07 -0800502 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
503 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200504 foreman_cif.config->loss_percent = 5;
505 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200506 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800507}
508
509// Ulpfec with H264 is an unsupported combination, so this test is only useful
510// for debugging. It is therefore disabled by default.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200511TEST(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
512 auto fixture = CreateVideoQualityTestFixture();
513 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800514 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100515 foreman_cif.video[0] = {
516 true, 352, 288, 30,
517 30000, 500000, 2000000, false,
518 "H264", 1, 0, 0,
519 true, false, true, ClipNameToClipPath("foreman_cif")};
brandtr93c5d032016-11-30 07:50:07 -0800520 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
521 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200522 foreman_cif.config->loss_percent = 5;
523 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200524 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800525}
526#endif // defined(WEBRTC_USE_H264)
527
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200528TEST(FullStackTest, ForemanCif500kbps) {
529 auto fixture = CreateVideoQualityTestFixture();
530 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700531 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100532 foreman_cif.video[0] = {
533 true, 352, 288, 30,
534 30000, 500000, 2000000, false,
535 "VP8", 1, 0, 0,
536 false, false, true, ClipNameToClipPath("foreman_cif")};
minyue626bc952016-10-31 05:47:02 -0700537 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
538 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200539 foreman_cif.config->queue_length_packets = 0;
540 foreman_cif.config->queue_delay_ms = 0;
541 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200542 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000543}
544
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200545TEST(FullStackTest, ForemanCif500kbpsLimitedQueue) {
546 auto fixture = CreateVideoQualityTestFixture();
547 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700548 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100549 foreman_cif.video[0] = {
550 true, 352, 288, 30,
551 30000, 500000, 2000000, false,
552 "VP8", 1, 0, 0,
553 false, false, true, ClipNameToClipPath("foreman_cif")};
minyue626bc952016-10-31 05:47:02 -0700554 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
555 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200556 foreman_cif.config->queue_length_packets = 32;
557 foreman_cif.config->queue_delay_ms = 0;
558 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200559 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000560}
561
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200562TEST(FullStackTest, ForemanCif500kbps100ms) {
563 auto fixture = CreateVideoQualityTestFixture();
564 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700565 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100566 foreman_cif.video[0] = {
567 true, 352, 288, 30,
568 30000, 500000, 2000000, false,
569 "VP8", 1, 0, 0,
570 false, false, true, ClipNameToClipPath("foreman_cif")};
minyue626bc952016-10-31 05:47:02 -0700571 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
572 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200573 foreman_cif.config->queue_length_packets = 0;
574 foreman_cif.config->queue_delay_ms = 100;
575 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200576 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000577}
578
philipeldd8b0d82018-09-27 11:18:10 +0200579TEST_P(GenericDescriptorTest, ForemanCif500kbps100msLimitedQueue) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200580 auto fixture = CreateVideoQualityTestFixture();
581 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700582 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100583 foreman_cif.video[0] = {
584 true, 352, 288, 30,
585 30000, 500000, 2000000, false,
586 "VP8", 1, 0, 0,
587 false, false, true, ClipNameToClipPath("foreman_cif")};
philipeldd8b0d82018-09-27 11:18:10 +0200588 foreman_cif.analyzer = {GetTestName("foreman_cif_500kbps_100ms_32pkts_queue"),
589 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200590 foreman_cif.config->queue_length_packets = 32;
591 foreman_cif.config->queue_delay_ms = 100;
592 foreman_cif.config->link_capacity_kbps = 500;
philipelf638bbc2018-10-04 16:57:12 +0200593 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200594 fixture->RunWithAnalyzer(foreman_cif);
stefanb1797672016-08-11 07:00:57 -0700595}
596
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200597TEST(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
598 auto fixture = CreateVideoQualityTestFixture();
599 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800600 foreman_cif.call.send_side_bwe = false;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100601 foreman_cif.video[0] = {
602 true, 352, 288, 30,
603 30000, 500000, 2000000, false,
604 "VP8", 1, 0, 0,
605 false, false, true, ClipNameToClipPath("foreman_cif")};
brandtr93c5d032016-11-30 07:50:07 -0800606 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
607 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200608 foreman_cif.config->queue_length_packets = 32;
609 foreman_cif.config->queue_delay_ms = 100;
610 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200611 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000612}
613
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200614TEST(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
615 auto fixture = CreateVideoQualityTestFixture();
616 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700617 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100618 foreman_cif.video[0] = {
619 true, 352, 288, 30,
620 30000, 2000000, 2000000, false,
621 "VP8", 1, 0, 0,
622 false, false, true, ClipNameToClipPath("foreman_cif")};
minyue626bc952016-10-31 05:47:02 -0700623 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
624 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200625 foreman_cif.config->queue_length_packets = 32;
626 foreman_cif.config->queue_delay_ms = 100;
627 foreman_cif.config->link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200628 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000629}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000630
sprangff19d352017-09-06 07:14:02 -0700631// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200632TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
633 auto fixture = CreateVideoQualityTestFixture();
634 ParamsWithLogging conf_motion_hd;
minyue626bc952016-10-31 05:47:02 -0700635 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100636 conf_motion_hd.video[0] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100637 true, 1280,
638 720, 50,
639 30000, 3000000,
640 3000000, false,
641 "VP8", 1,
642 0, 0,
643 false, false,
644 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
minyue626bc952016-10-31 05:47:02 -0700645 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
646 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200647 conf_motion_hd.config->queue_length_packets = 32;
648 conf_motion_hd.config->queue_delay_ms = 100;
649 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200650 fixture->RunWithAnalyzer(conf_motion_hd);
stefanb1797672016-08-11 07:00:57 -0700651}
652
Erik Språngd3438aa2018-11-08 16:56:43 +0100653// TODO(webrtc:9722): Remove when experiment is cleaned up.
654TEST(FullStackTest, ConferenceMotionHd1TLModerateLimitsWhitelistVp8) {
655 test::ScopedFieldTrials override_field_trials(
656 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200657 auto fixture = CreateVideoQualityTestFixture();
Erik Språngd3438aa2018-11-08 16:56:43 +0100658
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200659 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700660 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100661 conf_motion_hd.video[0] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100662 true, 1280,
663 720, 50,
664 30000, 3000000,
665 3000000, false,
666 "VP8", 1,
667 -1, 0,
668 false, false,
669 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
Erik Språngd3438aa2018-11-08 16:56:43 +0100670 conf_motion_hd.analyzer = {
671 "conference_motion_hd_1tl_moderate_limits_trusted_rate_ctrl", 0.0, 0.0,
672 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200673 conf_motion_hd.config->queue_length_packets = 50;
674 conf_motion_hd.config->loss_percent = 3;
675 conf_motion_hd.config->queue_delay_ms = 100;
676 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200677 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700678}
679
philipeldd8b0d82018-09-27 11:18:10 +0200680TEST_P(GenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200681 auto fixture = CreateVideoQualityTestFixture();
682 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700683 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100684 conf_motion_hd.video[0] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100685 true, 1280,
686 720, 50,
687 30000, 3000000,
688 3000000, false,
689 "VP8", 2,
690 -1, 0,
691 false, false,
692 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
philipeldd8b0d82018-09-27 11:18:10 +0200693 conf_motion_hd.analyzer = {
694 GetTestName("conference_motion_hd_2tl_moderate_limits"), 0.0, 0.0,
695 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200696 conf_motion_hd.config->queue_length_packets = 50;
697 conf_motion_hd.config->loss_percent = 3;
698 conf_motion_hd.config->queue_delay_ms = 100;
699 conf_motion_hd.config->link_capacity_kbps = 2000;
philipelf638bbc2018-10-04 16:57:12 +0200700 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200701 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700702}
703
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200704TEST(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
705 auto fixture = CreateVideoQualityTestFixture();
706 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700707 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100708 conf_motion_hd.video[0] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100709 true, 1280,
710 720, 50,
711 30000, 3000000,
712 3000000, false,
713 "VP8", 3,
714 -1, 0,
715 false, false,
716 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
sprangff19d352017-09-06 07:14:02 -0700717 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
718 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200719 conf_motion_hd.config->queue_length_packets = 50;
720 conf_motion_hd.config->loss_percent = 3;
721 conf_motion_hd.config->queue_delay_ms = 100;
722 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200723 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700724}
725
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200726TEST(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
727 auto fixture = CreateVideoQualityTestFixture();
728 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700729 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100730 conf_motion_hd.video[0] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100731 true, 1280,
732 720, 50,
733 30000, 3000000,
734 3000000, false,
735 "VP8", 4,
736 -1, 0,
737 false, false,
738 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
sprangff19d352017-09-06 07:14:02 -0700739 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
740 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200741 conf_motion_hd.config->queue_length_packets = 50;
742 conf_motion_hd.config->loss_percent = 3;
743 conf_motion_hd.config->queue_delay_ms = 100;
744 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200745 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700746}
747
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200748TEST(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
Erik Språngb6b1cac2018-08-09 16:12:54 +0200749 test::ScopedFieldTrials field_trial(
750 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
Erik Språngd3438aa2018-11-08 16:56:43 +0100751 auto fixture = CreateVideoQualityTestFixture();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200752 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700753 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100754 conf_motion_hd.video[0] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100755 true, 1280,
756 720, 50,
757 30000, 3000000,
758 3000000, false,
759 "VP8", 3,
760 -1, 0,
761 false, false,
762 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
Rasmus Brandt35836932018-10-23 09:17:24 +0200763 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
764 0.0, 0.0, kFullStackTestDurationSecs};
765 conf_motion_hd.config->queue_length_packets = 50;
766 conf_motion_hd.config->loss_percent = 3;
767 conf_motion_hd.config->queue_delay_ms = 100;
768 conf_motion_hd.config->link_capacity_kbps = 2000;
769 fixture->RunWithAnalyzer(conf_motion_hd);
770}
771
772TEST(FullStackTest,
773 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
774 auto fixture = CreateVideoQualityTestFixture();
775 test::ScopedFieldTrials field_trial(
776 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
777 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
778 ParamsWithLogging conf_motion_hd;
779 conf_motion_hd.call.send_side_bwe = true;
780 conf_motion_hd.video[0] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100781 true, 1280,
782 720, 50,
783 30000, 3000000,
784 3000000, false,
785 "VP8", 3,
786 -1, 0,
787 false, false,
788 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
Rasmus Brandt35836932018-10-23 09:17:24 +0200789 conf_motion_hd.analyzer = {
790 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
791 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200792 conf_motion_hd.config->queue_length_packets = 50;
793 conf_motion_hd.config->loss_percent = 3;
794 conf_motion_hd.config->queue_delay_ms = 100;
795 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200796 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700797}
798
Mirko Bonadei8ef57932018-11-16 14:38:03 +0100799#if defined(RTC_ENABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200800TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
801 auto fixture = CreateVideoQualityTestFixture();
802 ParamsWithLogging conf_motion_hd;
jianj390e64d2017-02-03 09:51:23 -0800803 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100804 conf_motion_hd.video[0] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +0100805 true, 1280,
806 720, 50,
807 30000, 3000000,
808 3000000, false,
809 "VP9", 1,
810 0, 0,
811 false, false,
812 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
jianj390e64d2017-02-03 09:51:23 -0800813 conf_motion_hd.analyzer = {
814 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
815 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200816 conf_motion_hd.config->queue_length_packets = 32;
817 conf_motion_hd.config->queue_delay_ms = 100;
818 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200819 fixture->RunWithAnalyzer(conf_motion_hd);
jianj390e64d2017-02-03 09:51:23 -0800820}
821#endif
822
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200823TEST(FullStackTest, ScreenshareSlidesVP8_2TL) {
824 auto fixture = CreateVideoQualityTestFixture();
825 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700826 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200827 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
828 1000000, false, "VP8", 2, 1, 400000,
829 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100830 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700831 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
832 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200833 fixture->RunWithAnalyzer(screenshare);
Erik Språng6ee69aa2015-09-03 15:58:05 +0200834}
835
Florent Castelli66b38602019-07-10 16:57:57 +0200836#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
Oskar Sundbom8bacf252019-01-08 16:40:08 +0100837// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
Ilya Nikolaevskiy7b412252019-03-06 16:40:42 +0100838const char kScreenshareSimulcastVariableFramerateExperiment[] =
Ilya Nikolaevskiy7b412252019-03-06 16:40:42 +0100839 "WebRTC-VP8VariableFramerateScreenshare/"
840 "Enabled,min_fps:5.0,min_qp:15,undershoot:30/";
Ilya Nikolaevskiydda5fdc2019-02-27 10:00:06 +0100841TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Simulcast) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200842 auto fixture = CreateVideoQualityTestFixture();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200843 ParamsWithLogging screenshare;
ilnikcb8c1462017-03-09 09:23:30 -0800844 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100845 screenshare.screenshare[0] = {true, false, 10};
Ilya Nikolaevskiydda5fdc2019-02-27 10:00:06 +0100846 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
Ilya Nikolaevskiyaec663e2019-02-27 12:52:11 +0100847 2500000, false, "VP8", 2, 1, 400000,
Ilya Nikolaevskiydda5fdc2019-02-27 10:00:06 +0100848 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800849 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
850 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200851 ParamsWithLogging screenshare_params_high;
Ilya Nikolaevskiydda5fdc2019-02-27 10:00:06 +0100852 screenshare_params_high.video[0] = {
853 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
854 "VP8", 2, 0, 400000, false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800855 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiydda5fdc2019-02-27 10:00:06 +0100856 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
Erik Språng28bb3912018-07-11 16:06:55 +0200857 1000000, false, "VP8", 2, 0, 400000,
858 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800859
860 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200861 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
862 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200863 screenshare.ss[0] = {
864 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
865 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200866 fixture->RunWithAnalyzer(screenshare);
ilnikcb8c1462017-03-09 09:23:30 -0800867}
Ilya Nikolaevskiy7b412252019-03-06 16:40:42 +0100868
869TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_Variable_Framerate) {
870 test::ScopedFieldTrials field_trial(
871 AppendFieldTrials(kScreenshareSimulcastVariableFramerateExperiment));
872 auto fixture = CreateVideoQualityTestFixture();
873 ParamsWithLogging screenshare;
874 screenshare.call.send_side_bwe = true;
875 screenshare.screenshare[0] = {true, false, 10};
876 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
877 2500000, false, "VP8", 2, 1, 400000,
878 false, false, false, ""};
879 screenshare.analyzer = {"screenshare_slides_simulcast_variable_framerate",
880 0.0, 0.0, kFullStackTestDurationSecs};
881 ParamsWithLogging screenshare_params_high;
882 screenshare_params_high.video[0] = {
883 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
884 "VP8", 2, 0, 400000, false, false, false, ""};
885 VideoQualityTest::Params screenshare_params_low;
886 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
887 1000000, false, "VP8", 2, 0, 400000,
888 false, false, false, ""};
889
890 std::vector<VideoStream> streams = {
891 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
892 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
893 screenshare.ss[0] = {
894 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
895 false};
896 fixture->RunWithAnalyzer(screenshare);
897}
Ilya Nikolaevskiy9699f092019-03-12 14:02:26 +0100898
899TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Ilya Nikolaevskiy9699f092019-03-12 14:02:26 +0100900 auto fixture = CreateVideoQualityTestFixture();
901 ParamsWithLogging screenshare;
902 screenshare.call.send_side_bwe = true;
903 screenshare.screenshare[0] = {true, false, 10};
904 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
905 2500000, false, "VP8", 2, 1, 400000,
906 false, false, false, ""};
907 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
908 kFullStackTestDurationSecs};
909 VideoQualityTest::Params screenshare_params_high;
910 screenshare_params_high.video[0] = {
911 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
912 "VP8", 2, 0, 400000, false, false, false, ""};
913 VideoQualityTest::Params screenshare_params_low;
914 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
915 1000000, false, "VP8", 2, 0, 400000,
916 false, false, false, ""};
917
918 std::vector<VideoStream> streams = {
919 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
920 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
921 screenshare.ss[0] = {
922 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
923 false};
924 fixture->RunWithAnalyzer(screenshare);
925}
926
Florent Castelli66b38602019-07-10 16:57:57 +0200927#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
ilnikcb8c1462017-03-09 09:23:30 -0800928
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200929TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
930 auto fixture = CreateVideoQualityTestFixture();
931 ParamsWithLogging config;
minyue626bc952016-10-31 05:47:02 -0700932 config.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200933 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
934 1000000, false, "VP8", 2, 1, 400000,
935 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100936 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700937 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
938 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200939 fixture->RunWithAnalyzer(config);
ivica028cf482015-07-30 02:15:56 -0700940}
941
philipeldd8b0d82018-09-27 11:18:10 +0200942TEST_P(GenericDescriptorTest, ScreenshareSlidesVP8_2TL_LossyNet) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200943 auto fixture = CreateVideoQualityTestFixture();
944 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700945 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200946 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
947 1000000, false, "VP8", 2, 1, 400000,
948 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100949 screenshare.screenshare[0] = {true, false, 10};
philipeldd8b0d82018-09-27 11:18:10 +0200950 screenshare.analyzer = {GetTestName("screenshare_slides_lossy_net"), 0.0, 0.0,
Lu Liu6f683242018-09-25 18:48:48 +0000951 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200952 screenshare.config->loss_percent = 5;
953 screenshare.config->queue_delay_ms = 200;
954 screenshare.config->link_capacity_kbps = 500;
philipelf638bbc2018-10-04 16:57:12 +0200955 screenshare.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200956 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800957}
958
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200959TEST(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
960 auto fixture = CreateVideoQualityTestFixture();
961 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700962 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200963 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
964 1000000, false, "VP8", 2, 1, 400000,
965 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100966 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700967 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
968 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200969 screenshare.config->loss_percent = 10;
970 screenshare.config->queue_delay_ms = 200;
971 screenshare.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200972 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800973}
974
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200975TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
976 auto fixture = CreateVideoQualityTestFixture();
977 ParamsWithLogging screenshare;
sprange566e172017-06-08 01:29:15 -0700978 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200979 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
980 1000000, false, "VP8", 2, 1, 400000,
981 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100982 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700983 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
984 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200985 screenshare.config->loss_percent = 5;
986 screenshare.config->link_capacity_kbps = 200;
987 screenshare.config->queue_length_packets = 30;
sprange566e172017-06-08 01:29:15 -0700988
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200989 fixture->RunWithAnalyzer(screenshare);
sprange566e172017-06-08 01:29:15 -0700990}
991
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200992TEST(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
993 auto fixture = CreateVideoQualityTestFixture();
994 ParamsWithLogging screenshare;
sprang89c4a7e2017-06-30 13:27:40 -0700995 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200996 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
997 1000000, false, "VP8", 2, 1, 400000,
998 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100999 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -07001000 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1001 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001002 screenshare.config->loss_percent = 1;
1003 screenshare.config->link_capacity_kbps = 1200;
1004 screenshare.config->queue_length_packets = 30;
sprang89c4a7e2017-06-30 13:27:40 -07001005
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001006 fixture->RunWithAnalyzer(screenshare);
sprang89c4a7e2017-06-30 13:27:40 -07001007}
1008
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001009// Since ParamsWithLogging::Video is not trivially destructible, we can't
1010// store these structs as const globals.
1011ParamsWithLogging::Video SvcVp9Video() {
1012 return ParamsWithLogging::Video{
1013 true, 1280,
1014 720, 30,
1015 800000, 2500000,
1016 2500000, false,
1017 "VP9", 3,
1018 2, 400000,
1019 false, false,
1020 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1021}
ilnik566c43b2017-03-07 04:42:54 -08001022
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001023ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1024 return ParamsWithLogging::Video{
1025 true, 1280,
1026 720, 30,
1027 800000, 2500000,
1028 2500000, false,
1029 "VP8", 3,
1030 2, 400000,
1031 false, false,
1032 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1033}
ilnik566c43b2017-03-07 04:42:54 -08001034
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001035ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1036 return ParamsWithLogging::Video{
1037 true, 640,
1038 360, 30,
1039 150000, 500000,
1040 700000, false,
1041 "VP8", 3,
1042 2, 400000,
1043 false, false,
1044 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1045}
ilnik566c43b2017-03-07 04:42:54 -08001046
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001047ParamsWithLogging::Video SimulcastVp8VideoLow() {
1048 return ParamsWithLogging::Video{
1049 true, 320,
1050 180, 30,
1051 30000, 150000,
1052 200000, false,
1053 "VP8", 3,
1054 2, 400000,
1055 false, false,
1056 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1057}
ilnik566c43b2017-03-07 04:42:54 -08001058
Mirko Bonadei8ef57932018-11-16 14:38:03 +01001059#if defined(RTC_ENABLE_VP9)
Ilya Nikolaevskiy61170682019-03-06 16:04:32 +01001060
1061TEST(FullStackTest, ScreenshareSlidesVP9_3SL_High_Fps) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001062 auto fixture = CreateVideoQualityTestFixture();
1063 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -07001064 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy61170682019-03-06 16:04:32 +01001065 screenshare.video[0] = {true, 1850, 1110, 30, 50000, 200000,
1066 2000000, false, "VP9", 1, 0, 400000,
1067 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001068 screenshare.screenshare[0] = {true, false, 10};
Ilya Nikolaevskiy61170682019-03-06 16:04:32 +01001069 screenshare.analyzer = {"screenshare_slides_vp9_3sl_high_fps", 0.0, 0.0,
minyue626bc952016-10-31 05:47:02 -07001070 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +02001071 screenshare.ss[0] = {
Ilya Nikolaevskiy61170682019-03-06 16:04:32 +01001072 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
1073 std::vector<SpatialLayer>(), true};
1074 fixture->RunWithAnalyzer(screenshare);
1075}
1076
1077TEST(FullStackTest, ScreenshareSlidesVP9_3SL_Variable_Fps) {
1078 webrtc::test::ScopedFieldTrials override_trials(
1079 AppendFieldTrials("WebRTC-VP9VariableFramerateScreenshare/"
1080 "Enabled,min_qp:32,min_fps:5.0,undershoot:30,frames_"
1081 "before_steady_state:5/"));
1082 auto fixture = CreateVideoQualityTestFixture();
1083 ParamsWithLogging screenshare;
1084 screenshare.call.send_side_bwe = true;
1085 screenshare.video[0] = {true, 1850, 1110, 30, 50000, 200000,
1086 2000000, false, "VP9", 1, 0, 400000,
1087 false, false, false, ""};
1088 screenshare.screenshare[0] = {true, false, 10};
1089 screenshare.analyzer = {"screenshare_slides_vp9_3sl_variable_fps", 0.0, 0.0,
1090 kFullStackTestDurationSecs};
1091 screenshare.ss[0] = {
1092 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
1093 std::vector<SpatialLayer>(), true};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001094 fixture->RunWithAnalyzer(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +00001095}
ilnik2a8c2f52017-02-15 02:23:28 -08001096
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001097TEST(FullStackTest, VP9SVC_3SL_High) {
1098 auto fixture = CreateVideoQualityTestFixture();
1099 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -08001100 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001101 simulcast.video[0] = SvcVp9Video();
ilnik2a8c2f52017-02-15 02:23:28 -08001102 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
1103 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001104
Sergey Silkin57027362018-05-15 09:12:05 +02001105 simulcast.ss[0] = {
1106 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
1107 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001108 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -08001109}
1110
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001111TEST(FullStackTest, VP9SVC_3SL_Medium) {
1112 auto fixture = CreateVideoQualityTestFixture();
1113 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -08001114 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001115 simulcast.video[0] = SvcVp9Video();
ilnik2a8c2f52017-02-15 02:23:28 -08001116 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
1117 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +02001118 simulcast.ss[0] = {
1119 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
1120 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001121 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -08001122}
1123
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001124TEST(FullStackTest, VP9SVC_3SL_Low) {
1125 auto fixture = CreateVideoQualityTestFixture();
1126 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -08001127 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001128 simulcast.video[0] = SvcVp9Video();
ilnik2a8c2f52017-02-15 02:23:28 -08001129 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +02001130 simulcast.ss[0] = {
1131 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
1132 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001133 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -08001134}
Sergey Silkin0643fd62018-05-17 12:50:53 +02001135
Sergey Silkin7f978f12018-09-10 12:01:49 +00001136// bugs.webrtc.org/9506
1137#if !defined(WEBRTC_MAC)
1138
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001139TEST(FullStackTest, VP9KSVC_3SL_High) {
Sergey Silkine7ce8882018-10-03 18:04:57 +02001140 webrtc::test::ScopedFieldTrials override_trials(
1141 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001142 auto fixture = CreateVideoQualityTestFixture();
1143 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +02001144 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001145 simulcast.video[0] = SvcVp9Video();
Sergey Silkin0643fd62018-05-17 12:50:53 +02001146 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
1147 kFullStackTestDurationSecs};
1148 simulcast.ss[0] = {
1149 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1150 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001151 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +02001152}
1153
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001154TEST(FullStackTest, VP9KSVC_3SL_Medium) {
Sergey Silkine7ce8882018-10-03 18:04:57 +02001155 webrtc::test::ScopedFieldTrials override_trials(
1156 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001157 auto fixture = CreateVideoQualityTestFixture();
1158 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +02001159 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001160 simulcast.video[0] = SvcVp9Video();
Sergey Silkin0643fd62018-05-17 12:50:53 +02001161 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
1162 kFullStackTestDurationSecs};
1163 simulcast.ss[0] = {
1164 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1165 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001166 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +02001167}
1168
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001169TEST(FullStackTest, VP9KSVC_3SL_Low) {
Sergey Silkine7ce8882018-10-03 18:04:57 +02001170 webrtc::test::ScopedFieldTrials override_trials(
1171 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001172 auto fixture = CreateVideoQualityTestFixture();
1173 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +02001174 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001175 simulcast.video[0] = SvcVp9Video();
Sergey Silkin0643fd62018-05-17 12:50:53 +02001176 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
1177 kFullStackTestDurationSecs};
1178 simulcast.ss[0] = {
1179 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1180 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001181 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +02001182}
“Michael277a6562018-06-01 14:09:19 -05001183
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001184TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
Sergey Silkine7ce8882018-10-03 18:04:57 +02001185 webrtc::test::ScopedFieldTrials override_trials(
1186 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001187 auto fixture = CreateVideoQualityTestFixture();
Niels Möller0e909822018-08-21 17:34:35 +02001188 ParamsWithLogging simulcast;
“Michael277a6562018-06-01 14:09:19 -05001189 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001190 simulcast.video[0] = SvcVp9Video();
“Michael277a6562018-06-01 14:09:19 -05001191 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1192 kFullStackTestDurationSecs};
1193 simulcast.ss[0] = {
Sergey Silkine7ce8882018-10-03 18:04:57 +02001194 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
“Michael277a6562018-06-01 14:09:19 -05001195 std::vector<SpatialLayer>(), false};
Artem Titovf18b3522018-08-28 16:54:24 +02001196 simulcast.config->link_capacity_kbps = 1000;
Sergey Silkine7ce8882018-10-03 18:04:57 +02001197 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001198 fixture->RunWithAnalyzer(simulcast);
“Michael277a6562018-06-01 14:09:19 -05001199}
Erik Språngd3438aa2018-11-08 16:56:43 +01001200
1201// TODO(webrtc:9722): Remove when experiment is cleaned up.
1202TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1203 webrtc::test::ScopedFieldTrials override_trials(
1204 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"
1205 "WebRTC-LibvpxVp9TrustedRateController/Enabled/"));
1206 auto fixture = CreateVideoQualityTestFixture();
1207 ParamsWithLogging simulcast;
1208 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001209 simulcast.video[0] = SvcVp9Video();
Erik Språngd3438aa2018-11-08 16:56:43 +01001210 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1211 0.0, 0.0, kFullStackTestDurationSecs};
1212 simulcast.ss[0] = {
1213 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1214 std::vector<SpatialLayer>(), false};
1215 simulcast.config->link_capacity_kbps = 1000;
1216 simulcast.config->queue_delay_ms = 100;
1217 fixture->RunWithAnalyzer(simulcast);
1218}
Sergey Silkin7f978f12018-09-10 12:01:49 +00001219#endif // !defined(WEBRTC_MAC)
1220
Mirko Bonadei8ef57932018-11-16 14:38:03 +01001221#endif // defined(RTC_ENABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -08001222
ilnik6b826ef2017-06-16 06:53:48 -07001223// Android bots can't handle FullHD, so disable the test.
Ilya Nikolaevskiy7e5203f2018-09-10 12:04:50 +00001224// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1225#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 06:53:48 -07001226#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
1227#else
1228#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
1229#endif
1230
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001231TEST(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
1232 auto fixture = CreateVideoQualityTestFixture();
1233 ParamsWithLogging simulcast;
ilnik6b826ef2017-06-16 06:53:48 -07001234 simulcast.call.send_side_bwe = true;
Jonas Olssona4d87372019-07-05 19:08:33 +02001235 simulcast.video[0] = {true, 1920, 1080, 30, 800000, 2500000,
1236 2500000, false, "VP8", 3, 2, 400000,
1237 false, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -07001238 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
1239 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001240 simulcast.config->loss_percent = 0;
1241 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001242 std::vector<VideoStream> streams = {
Jonas Olssona4d87372019-07-05 19:08:33 +02001243 VideoQualityTest::DefaultVideoStream(simulcast, 0),
1244 VideoQualityTest::DefaultVideoStream(simulcast, 0),
1245 VideoQualityTest::DefaultVideoStream(simulcast, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +02001246 simulcast.ss[0] = {
1247 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1248 true};
Erik Språngb6b1cac2018-08-09 16:12:54 +02001249 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1250 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001251 fixture->RunWithAnalyzer(simulcast);
ilnik6b826ef2017-06-16 06:53:48 -07001252}
1253
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001254TEST(FullStackTest, SimulcastVP8_3SL_High) {
1255 auto fixture = CreateVideoQualityTestFixture();
1256 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -08001257 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001258 simulcast.video[0] = SimulcastVp8VideoHigh();
ilnik2a8c2f52017-02-15 02:23:28 -08001259 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -08001260 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001261 simulcast.config->loss_percent = 0;
1262 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001263 ParamsWithLogging video_params_high;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001264 video_params_high.video[0] = SimulcastVp8VideoHigh();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001265 ParamsWithLogging video_params_medium;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001266 video_params_medium.video[0] = SimulcastVp8VideoMedium();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001267 ParamsWithLogging video_params_low;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001268 video_params_low.video[0] = SimulcastVp8VideoLow();
ilnik3dd5ad92017-02-09 04:58:53 -08001269
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001270 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001271 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1272 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1273 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +02001274 simulcast.ss[0] = {
1275 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1276 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001277 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -08001278}
1279
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001280TEST(FullStackTest, SimulcastVP8_3SL_Medium) {
1281 auto fixture = CreateVideoQualityTestFixture();
1282 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -08001283 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001284 simulcast.video[0] = SimulcastVp8VideoHigh();
ilnik2a8c2f52017-02-15 02:23:28 -08001285 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -08001286 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001287 simulcast.config->loss_percent = 0;
1288 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001289 ParamsWithLogging video_params_high;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001290 video_params_high.video[0] = SimulcastVp8VideoHigh();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001291 ParamsWithLogging video_params_medium;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001292 video_params_medium.video[0] = SimulcastVp8VideoMedium();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001293 ParamsWithLogging video_params_low;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001294 video_params_low.video[0] = SimulcastVp8VideoLow();
ilnik3dd5ad92017-02-09 04:58:53 -08001295
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001296 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001297 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1298 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1299 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +02001300 simulcast.ss[0] = {
1301 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1302 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001303 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -08001304}
1305
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001306TEST(FullStackTest, SimulcastVP8_3SL_Low) {
1307 auto fixture = CreateVideoQualityTestFixture();
1308 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -08001309 simulcast.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001310 simulcast.video[0] = SimulcastVp8VideoHigh();
ilnik2a8c2f52017-02-15 02:23:28 -08001311 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -08001312 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001313 simulcast.config->loss_percent = 0;
1314 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001315 ParamsWithLogging video_params_high;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001316 video_params_high.video[0] = SimulcastVp8VideoHigh();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001317 ParamsWithLogging video_params_medium;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001318 video_params_medium.video[0] = SimulcastVp8VideoMedium();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001319 ParamsWithLogging video_params_low;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001320 video_params_low.video[0] = SimulcastVp8VideoLow();
ilnik3dd5ad92017-02-09 04:58:53 -08001321
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001322 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001323 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1324 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1325 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +02001326 simulcast.ss[0] = {
1327 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1328 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001329 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -08001330}
1331
Emircan Uysaler7c03bdc2019-01-16 15:07:56 -05001332// This test assumes ideal network conditions with target bandwidth being
1333// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1334// Android32 bots can't handle this high bitrate, so disable test for those.
1335#if defined(WEBRTC_ANDROID)
Emircan Uysaler62f55322019-01-16 17:48:47 -05001336#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
Emircan Uysaler7c03bdc2019-01-16 15:07:56 -05001337#else
1338#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1339#endif // defined(WEBRTC_ANDROID)
1340TEST(FullStackTest, MAYBE_HighBitrateWithFakeCodec) {
1341 auto fixture = CreateVideoQualityTestFixture();
1342 const int target_bitrate = 100000000;
1343 ParamsWithLogging generator;
1344 generator.call.send_side_bwe = true;
1345 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1346 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1347 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1348 generator.video[0] = {true,
1349 360,
1350 240,
1351 30,
1352 target_bitrate / 2,
1353 target_bitrate,
1354 target_bitrate * 2,
1355 false,
1356 "FakeCodec",
1357 1,
1358 0,
1359 0,
1360 false,
1361 false,
1362 false,
1363 "Generator"};
1364 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1365 kFullStackTestDurationSecs};
1366 fixture->RunWithAnalyzer(generator);
1367}
1368
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001369TEST(FullStackTest, LargeRoomVP8_5thumb) {
1370 auto fixture = CreateVideoQualityTestFixture();
1371 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001372 large_room.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001373 large_room.video[0] = SimulcastVp8VideoHigh();
ilnika014cc52017-03-07 04:21:04 -08001374 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
1375 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001376 large_room.config->loss_percent = 0;
1377 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001378 ParamsWithLogging video_params_high;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001379 video_params_high.video[0] = SimulcastVp8VideoHigh();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001380 ParamsWithLogging video_params_medium;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001381 video_params_medium.video[0] = SimulcastVp8VideoMedium();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001382 ParamsWithLogging video_params_low;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001383 video_params_low.video[0] = SimulcastVp8VideoLow();
ilnika014cc52017-03-07 04:21:04 -08001384
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001385 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001386 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1387 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1388 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001389 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 09:12:05 +02001390 large_room.ss[0] = {
1391 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1392 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001393 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001394}
1395
oprypin743117f2017-09-15 05:24:24 -07001396#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1397// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -08001398// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1399#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -08001400#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -08001401#else
1402#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -08001403#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -08001404#endif
1405
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001406TEST(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1407 auto fixture = CreateVideoQualityTestFixture();
1408 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001409 large_room.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001410 large_room.video[0] = SimulcastVp8VideoHigh();
ilnika014cc52017-03-07 04:21:04 -08001411 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
1412 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001413 large_room.config->loss_percent = 0;
1414 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001415 ParamsWithLogging video_params_high;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001416 video_params_high.video[0] = SimulcastVp8VideoHigh();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001417 ParamsWithLogging video_params_medium;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001418 video_params_medium.video[0] = SimulcastVp8VideoMedium();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001419 ParamsWithLogging video_params_low;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001420 video_params_low.video[0] = SimulcastVp8VideoLow();
ilnika014cc52017-03-07 04:21:04 -08001421
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001422 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001423 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1424 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1425 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001426 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 09:12:05 +02001427 large_room.ss[0] = {
1428 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1429 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001430 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001431}
1432
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001433TEST(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1434 auto fixture = CreateVideoQualityTestFixture();
1435 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001436 large_room.call.send_side_bwe = true;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001437 large_room.video[0] = SimulcastVp8VideoHigh();
ilnika014cc52017-03-07 04:21:04 -08001438 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
1439 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001440 large_room.config->loss_percent = 0;
1441 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001442 ParamsWithLogging video_params_high;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001443 video_params_high.video[0] = SimulcastVp8VideoHigh();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001444 ParamsWithLogging video_params_medium;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001445 video_params_medium.video[0] = SimulcastVp8VideoMedium();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001446 ParamsWithLogging video_params_low;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001447 video_params_low.video[0] = SimulcastVp8VideoLow();
ilnika014cc52017-03-07 04:21:04 -08001448
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001449 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001450 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1451 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1452 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001453 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 09:12:05 +02001454 large_room.ss[0] = {
1455 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1456 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001457 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001458}
1459
Mirko Bonadeic84f6612019-01-31 12:20:57 +01001460INSTANTIATE_TEST_SUITE_P(
1461 FullStackTest,
1462 GenericDescriptorTest,
1463 ::testing::Values("WebRTC-GenericDescriptor/Disabled/",
1464 "WebRTC-GenericDescriptor/Enabled/"));
philipeldd8b0d82018-09-27 11:18:10 +02001465
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001466class DualStreamsTest : public ::testing::TestWithParam<int> {};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001467
1468// Disable dual video test on mobile device becuase it's too heavy.
Ilya Nikolaevskiyf08dd9d2018-10-09 17:22:15 +02001469// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1470#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001471TEST_P(DualStreamsTest,
Ilya Nikolaevskiydda5fdc2019-02-27 10:00:06 +01001472 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001473 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001474 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001475
1476 // Screenshare Settings.
1477 dual_streams.screenshare[first_stream] = {true, false, 10};
Ilya Nikolaevskiyaec663e2019-02-27 12:52:11 +01001478 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1479 2500000, false, "VP8", 2, 1, 400000,
1480 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001481
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001482 ParamsWithLogging screenshare_params_high;
Ilya Nikolaevskiydda5fdc2019-02-27 10:00:06 +01001483 screenshare_params_high.video[0] = {
1484 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1485 "VP8", 2, 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001486 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiydda5fdc2019-02-27 10:00:06 +01001487 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
Erik Språng28bb3912018-07-11 16:06:55 +02001488 1000000, false, "VP8", 2, 0, 400000,
1489 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001490 std::vector<VideoStream> screenhsare_streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001491 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1492 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001493
Sergey Silkin57027362018-05-15 09:12:05 +02001494 dual_streams.ss[first_stream] = {
1495 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1496 std::vector<SpatialLayer>(), false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001497
1498 // Video settings.
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001499 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001500
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001501 ParamsWithLogging video_params_high;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001502 video_params_high.video[0] = SimulcastVp8VideoHigh();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001503 ParamsWithLogging video_params_medium;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001504 video_params_medium.video[0] = SimulcastVp8VideoMedium();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001505 ParamsWithLogging video_params_low;
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001506 video_params_low.video[0] = SimulcastVp8VideoLow();
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001507 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001508 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1509 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1510 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001511
1512 dual_streams.ss[1 - first_stream] = {
Sergey Silkin57027362018-05-15 09:12:05 +02001513 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1514 false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001515
1516 // Call settings.
1517 dual_streams.call.send_side_bwe = true;
1518 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001519 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1520 std::to_string(first_stream);
1521 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001522 dual_streams.config->loss_percent = 1;
1523 dual_streams.config->link_capacity_kbps = 7500;
1524 dual_streams.config->queue_length_packets = 30;
1525 dual_streams.config->queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001526
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001527 auto fixture = CreateVideoQualityTestFixture();
1528 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001529}
Ilya Nikolaevskiyf08dd9d2018-10-09 17:22:15 +02001530#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1531 // !defined(WEBRTC_MAC)
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001532
1533TEST_P(DualStreamsTest, Conference_Restricted) {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001534 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001535 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001536
1537 // Screenshare Settings.
1538 dual_streams.screenshare[first_stream] = {true, false, 10};
Jonas Olssona4d87372019-07-05 19:08:33 +02001539 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1540 2500000, false, "VP8", 3, 2, 400000,
1541 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001542 // Video settings.
1543 dual_streams.video[1 - first_stream] = {
Rasmus Brandt3c589be2019-03-13 11:32:40 +01001544 true, 1280,
1545 720, 30,
1546 150000, 500000,
1547 700000, false,
1548 "VP8", 3,
1549 2, 400000,
1550 false, false,
1551 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001552
1553 // Call settings.
1554 dual_streams.call.send_side_bwe = true;
1555 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001556 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1557 std::to_string(first_stream);
1558 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001559 dual_streams.config->loss_percent = 1;
1560 dual_streams.config->link_capacity_kbps = 5000;
1561 dual_streams.config->queue_length_packets = 30;
1562 dual_streams.config->queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001563
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001564 auto fixture = CreateVideoQualityTestFixture();
1565 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001566}
1567
Mirko Bonadeic84f6612019-01-31 12:20:57 +01001568INSTANTIATE_TEST_SUITE_P(FullStackTest,
1569 DualStreamsTest,
1570 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -08001571
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001572} // namespace webrtc