blob: 5e08fcff86360bd9cae36e3f12ba1f2e2261a2b1 [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"
23#include "common_types.h" // NOLINT(build/include)
Emircan Uysaler0823eec2018-07-13 17:10:00 -070024#include "media/base/vp9_profile.h"
25#include "modules/video_coding/codecs/vp9/include/vp9.h"
Sebastian Janssonf8518882018-05-31 14:52:59 +020026#include "rtc_base/flags.h"
Mirko Bonadei17f48782018-09-28 08:51:10 +020027#include "system_wrappers/include/field_trial.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020028#include "test/field_trial.h"
29#include "test/gtest.h"
30#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;
Patrik Höglundb6b29e02018-06-21 16:58:01 +020063const char kPacerPushBackExperiment[] =
64 "WebRTC-PacerPushbackExperiment/Enabled/";
Erik Språngd3438aa2018-11-08 16:56:43 +010065const char kVp8TrustedRateControllerFieldTrial[] =
66 "WebRTC-LibvpxVp8TrustedRateController/Enabled/";
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000067
Patrik Höglundb6b29e02018-06-21 16:58:01 +020068struct ParamsWithLogging : public VideoQualityTest::Params {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000069 public:
Patrik Höglundb6b29e02018-06-21 16:58:01 +020070 ParamsWithLogging() {
71 // Use these logging flags by default, for everything.
Mirko Bonadei45a4c412018-07-31 15:07:28 +020072 logging = {flags::RtcEventLogName(), flags::RtpDumpName(),
73 flags::EncodedFramePath()};
Artem Titov75e36472018-10-08 12:28:56 +020074 this->config = BuiltInNetworkBehaviorConfig();
pbos@webrtc.org94015242013-10-16 11:05:37 +000075 }
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000076};
77
Patrik Höglundb6b29e02018-06-21 16:58:01 +020078std::unique_ptr<VideoQualityTestFixtureInterface>
79CreateVideoQualityTestFixture() {
Patrik Höglundd8f3c172018-09-26 14:39:17 +020080 // The components will normally be nullptr (= use defaults), but it's possible
81 // for external test runners to override the list of injected components.
82 auto components = TestDependencyFactory::GetInstance().CreateComponents();
83 return absl::make_unique<VideoQualityTest>(std::move(components));
Patrik Höglundb6b29e02018-06-21 16:58:01 +020084}
85
Erik Språngb6b1cac2018-08-09 16:12:54 +020086// Takes the current active field trials set, and appends some new trials.
87std::string AppendFieldTrials(std::string new_trial_string) {
88 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
89}
Patrik Höglundb6b29e02018-06-21 16:58:01 +020090} // namespace
91
sprangce4aef12015-11-02 07:23:20 -080092// VideoQualityTest::Params params = {
93// { ... }, // Common.
94// { ... }, // Video-specific settings.
95// { ... }, // Screenshare-specific settings.
96// { ... }, // Analyzer settings.
97// pipe, // FakeNetworkPipe::Config
98// { ... }, // Spatial scalability.
99// logs // bool
100// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000101
philipeldd8b0d82018-09-27 11:18:10 +0200102class GenericDescriptorTest : public ::testing::TestWithParam<std::string> {
103 public:
philipelf638bbc2018-10-04 16:57:12 +0200104 GenericDescriptorTest()
Ilya Nikolaevskiy0500b522019-01-22 11:12:51 +0100105 : field_trial_(AppendFieldTrials(GetParam())),
philipelf638bbc2018-10-04 16:57:12 +0200106 generic_descriptor_enabled_(
107 field_trial::IsEnabled("WebRTC-GenericDescriptor")) {}
philipeldd8b0d82018-09-27 11:18:10 +0200108
109 std::string GetTestName(std::string base) {
philipelf638bbc2018-10-04 16:57:12 +0200110 if (generic_descriptor_enabled_)
philipeldd8b0d82018-09-27 11:18:10 +0200111 base += "_generic_descriptor";
112 return base;
113 }
114
philipelf638bbc2018-10-04 16:57:12 +0200115 bool GenericDescriptorEnabled() const { return generic_descriptor_enabled_; }
116
philipeldd8b0d82018-09-27 11:18:10 +0200117 private:
118 test::ScopedFieldTrials field_trial_;
philipelf638bbc2018-10-04 16:57:12 +0200119 bool generic_descriptor_enabled_;
philipeldd8b0d82018-09-27 11:18:10 +0200120};
121
Mirko Bonadei8ef57932018-11-16 14:38:03 +0100122#if defined(RTC_ENABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200123TEST(FullStackTest, ForemanCifWithoutPacketLossVp9) {
124 auto fixture = CreateVideoQualityTestFixture();
125 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800126 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100127 foreman_cif.video[0] = {true, 352, 288, 30, 700000, 700000, 700000,
128 false, "VP9", 1, 0, 0, false, false,
129 true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800130 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
131 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200132 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -0800133}
134
philipeldd8b0d82018-09-27 11:18:10 +0200135TEST_P(GenericDescriptorTest, ForemanCifPlr5Vp9) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200136 auto fixture = CreateVideoQualityTestFixture();
137 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800138 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100139 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
140 false, "VP9", 1, 0, 0, false, false,
141 true, "foreman_cif"};
philipeldd8b0d82018-09-27 11:18:10 +0200142 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_VP9"), 0.0,
143 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200144 foreman_cif.config->loss_percent = 5;
145 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 16:57:12 +0200146 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200147 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -0800148}
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800149
Emircan Uysaler0823eec2018-07-13 17:10:00 -0700150TEST(FullStackTest, GeneratorWithoutPacketLossVp9Profile2) {
151 // Profile 2 might not be available on some platforms until
152 // https://bugs.chromium.org/p/webm/issues/detail?id=1544 is solved.
153 bool profile_2_is_supported = false;
154 for (const auto& codec : SupportedVP9Codecs()) {
155 if (ParseSdpForVP9Profile(codec.parameters)
156 .value_or(VP9Profile::kProfile0) == VP9Profile::kProfile2) {
157 profile_2_is_supported = true;
158 }
159 }
160 if (!profile_2_is_supported)
161 return;
162 auto fixture = CreateVideoQualityTestFixture();
163
164 SdpVideoFormat::Parameters vp92 = {
165 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}};
166 ParamsWithLogging generator;
167 generator.call.send_side_bwe = true;
168 generator.video[0] = {
169 true, 352, 288, 30, 700000, 700000, 700000, false, "VP9",
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100170 1, 0, 0, false, false, true, "GeneratorI010", 0, vp92};
Emircan Uysaler0823eec2018-07-13 17:10:00 -0700171 generator.analyzer = {"generator_net_delay_0_0_plr_0_VP9Profile2", 0.0, 0.0,
172 kFullStackTestDurationSecs};
173 fixture->RunWithAnalyzer(generator);
174}
175
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200176TEST(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
177 auto fixture = CreateVideoQualityTestFixture();
178 ParamsWithLogging foreman_cif;
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800179 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100180 foreman_cif.video[0] = {true, 352, 288, 30, 700000, 700000, 700000,
181 false, "multiplex", 1, 0, 0, false, false,
182 false, "foreman_cif"};
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800183 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
184 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200185 fixture->RunWithAnalyzer(foreman_cif);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800186}
187
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200188TEST(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
189 auto fixture = CreateVideoQualityTestFixture();
190
191 ParamsWithLogging generator;
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700192 generator.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100193 generator.video[0] = {
194 true, 352, 288, 30, 700000, 700000, 700000, false,
195 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700196 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
197 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200198 fixture->RunWithAnalyzer(generator);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800199}
200
Mirko Bonadei8ef57932018-11-16 14:38:03 +0100201#endif // defined(RTC_ENABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -0800202
Patrik Höglund11bf2fa2018-04-09 12:20:50 +0200203#if defined(WEBRTC_LINUX)
204// Crashes on the linux trusty perf bot: bugs.webrtc.org/9129.
205#define MAYBE_ParisQcifWithoutPacketLoss DISABLED_ParisQcifWithoutPacketLoss
206#else
207#define MAYBE_ParisQcifWithoutPacketLoss ParisQcifWithoutPacketLoss
208#endif
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200209TEST(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
210 auto fixture = CreateVideoQualityTestFixture();
211 ParamsWithLogging paris_qcif;
minyue626bc952016-10-31 05:47:02 -0700212 paris_qcif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100213 paris_qcif.video[0] = {true, 176, 144, 30, 300000, 300000,
214 300000, false, "VP8", 1, 0, 0,
215 false, false, true, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -0700216 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
217 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200218 fixture->RunWithAnalyzer(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000219}
220
philipeldd8b0d82018-09-27 11:18:10 +0200221TEST_P(GenericDescriptorTest, ForemanCifWithoutPacketLoss) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200222 auto fixture = CreateVideoQualityTestFixture();
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000223 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200224 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700225 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100226 foreman_cif.video[0] = {true, 352, 288, 30, 700000, 700000, 700000,
227 false, "VP8", 1, 0, 0, false, false,
228 true, "foreman_cif"};
philipeldd8b0d82018-09-27 11:18:10 +0200229 foreman_cif.analyzer = {GetTestName("foreman_cif_net_delay_0_0_plr_0"), 0.0,
230 0.0, kFullStackTestDurationSecs};
philipelf638bbc2018-10-04 16:57:12 +0200231 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200232 fixture->RunWithAnalyzer(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000233}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000234
philipeldd8b0d82018-09-27 11:18:10 +0200235TEST_P(GenericDescriptorTest, ForemanCif30kbpsWithoutPacketLoss) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200236 auto fixture = CreateVideoQualityTestFixture();
237 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800238 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100239 foreman_cif.video[0] = {true, 352, 288, 10, 30000, 30000, 30000,
240 false, "VP8", 1, 0, 0, false, false,
241 true, "foreman_cif"};
philipeldd8b0d82018-09-27 11:18:10 +0200242 foreman_cif.analyzer = {GetTestName("foreman_cif_30kbps_net_delay_0_0_plr_0"),
243 0.0, 0.0, kFullStackTestDurationSecs};
philipelf638bbc2018-10-04 16:57:12 +0200244 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200245 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800246}
247
Erik Språngd3438aa2018-11-08 16:56:43 +0100248// TODO(webrtc:9722): Remove when experiment is cleaned up.
249TEST_P(GenericDescriptorTest,
250 ForemanCif30kbpsWithoutPacketLossTrustedRateControl) {
251 test::ScopedFieldTrials override_field_trials(
252 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
253 auto fixture = CreateVideoQualityTestFixture();
254
255 ParamsWithLogging foreman_cif;
256 foreman_cif.call.send_side_bwe = true;
257 foreman_cif.video[0] = {true, 352, 288, 10, 30000, 30000, 30000,
258 false, "VP8", 1, 0, 0, false, false,
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100259 true, "foreman_cif"};
Erik Språngd3438aa2018-11-08 16:56:43 +0100260 foreman_cif.analyzer = {
261 GetTestName("foreman_cif_30kbps_net_delay_0_0_plr_0_trusted_rate_ctrl"),
262 0.0, 0.0, kFullStackTestDurationSecs};
263 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
264 fixture->RunWithAnalyzer(foreman_cif);
265}
266
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100267// Link capacity below default start rate.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200268TEST(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
269 auto fixture = CreateVideoQualityTestFixture();
Niels Möller0e909822018-08-21 17:34:35 +0200270 ParamsWithLogging foreman_cif;
Niels Möller6aa415e2018-06-07 11:14:13 +0200271 foreman_cif.call.send_side_bwe = true;
272 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
273 500000, 2000000, false, "VP8", 1,
274 0, 0, false, false, true, "foreman_cif"};
275 foreman_cif.analyzer = {"foreman_cif_link_150kbps_net_delay_0_0_plr_0",
276 0.0, 0.0,
277 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200278 foreman_cif.config->link_capacity_kbps = 150;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200279 fixture->RunWithAnalyzer(foreman_cif);
Niels Möller6aa415e2018-06-07 11:14:13 +0200280}
281
philipeldd8b0d82018-09-27 11:18:10 +0200282TEST_P(GenericDescriptorTest, ForemanCifPlr5) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200283 auto fixture = CreateVideoQualityTestFixture();
284 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700285 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100286 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
287 false, "VP8", 1, 0, 0, false, false,
288 true, "foreman_cif"};
philipeldd8b0d82018-09-27 11:18:10 +0200289 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5"), 0.0, 0.0,
Lu Liu6f683242018-09-25 18:48:48 +0000290 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200291 foreman_cif.config->loss_percent = 5;
292 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 16:57:12 +0200293 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200294 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000295}
296
philipeldd8b0d82018-09-27 11:18:10 +0200297TEST_P(GenericDescriptorTest, ForemanCifPlr5Ulpfec) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200298 auto fixture = CreateVideoQualityTestFixture();
299 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800300 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100301 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
302 false, "VP8", 1, 0, 0, true, false,
303 true, "foreman_cif"};
philipeldd8b0d82018-09-27 11:18:10 +0200304 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_ulpfec"),
305 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200306 foreman_cif.config->loss_percent = 5;
307 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 16:57:12 +0200308 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200309 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800310}
311
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200312TEST(FullStackTest, ForemanCifPlr5Flexfec) {
313 auto fixture = CreateVideoQualityTestFixture();
314 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800315 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100316 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
317 false, "VP8", 1, 0, 0, false, true,
318 true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800319 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
320 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200321 foreman_cif.config->loss_percent = 5;
322 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200323 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800324}
325
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200326TEST(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
327 auto fixture = CreateVideoQualityTestFixture();
328 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700329 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100330 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
331 false, "VP8", 1, 0, 0, false, true,
332 true, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700333 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
334 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200335 foreman_cif.config->loss_percent = 3;
336 foreman_cif.config->link_capacity_kbps = 500;
337 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200338 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700339}
340
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200341TEST(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
342 auto fixture = CreateVideoQualityTestFixture();
343 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700344 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100345 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
346 false, "VP8", 1, 0, 0, true, false,
347 true, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700348 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
349 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200350 foreman_cif.config->loss_percent = 3;
351 foreman_cif.config->link_capacity_kbps = 500;
352 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200353 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700354}
355
brandtrdd369c62016-11-16 23:56:57 -0800356#if defined(WEBRTC_USE_H264)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200357TEST(FullStackTest, ForemanCifWithoutPacketlossH264) {
358 auto fixture = CreateVideoQualityTestFixture();
brandtr93c5d032016-11-30 07:50:07 -0800359 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200360 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800361 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100362 foreman_cif.video[0] = {true, 352, 288, 30, 700000, 700000, 700000,
363 false, "H264", 1, 0, 0, false, false,
364 true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800365 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
366 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200367 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800368}
369
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200370TEST(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
371 auto fixture = CreateVideoQualityTestFixture();
372 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800373 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100374 foreman_cif.video[0] = {true, 352, 288, 10, 30000, 30000, 30000,
375 false, "H264", 1, 0, 0, false, false,
376 true, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800377 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
378 0.0, kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200379 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800380}
381
philipeldd8b0d82018-09-27 11:18:10 +0200382TEST_P(GenericDescriptorTest, ForemanCifPlr5H264) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200383 auto fixture = CreateVideoQualityTestFixture();
384 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800385 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100386 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
387 false, "H264", 1, 0, 0, false, false,
388 true, "foreman_cif"};
philipeldd8b0d82018-09-27 11:18:10 +0200389 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_H264"), 0.0,
390 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200391 foreman_cif.config->loss_percent = 5;
392 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 16:57:12 +0200393 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200394 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800395}
396
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200397TEST(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100398 test::ScopedFieldTrials override_field_trials(
Erik Språngb6b1cac2018-08-09 16:12:54 +0200399 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
Erik Språngd3438aa2018-11-08 16:56:43 +0100400 auto fixture = CreateVideoQualityTestFixture();
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100401
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200402 ParamsWithLogging foreman_cif;
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100403 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100404 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
405 false, "H264", 1, 0, 0, false, false,
406 true, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100407 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
408 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200409 foreman_cif.config->loss_percent = 5;
410 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200411 fixture->RunWithAnalyzer(foreman_cif);
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100412}
413
brandtrdd369c62016-11-16 23:56:57 -0800414// Verify that this is worth the bot time, before enabling.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200415TEST(FullStackTest, ForemanCifPlr5H264Flexfec) {
416 auto fixture = CreateVideoQualityTestFixture();
417 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800418 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100419 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
420 false, "H264", 1, 0, 0, false, true,
421 true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800422 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
423 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200424 foreman_cif.config->loss_percent = 5;
425 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200426 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800427}
428
429// Ulpfec with H264 is an unsupported combination, so this test is only useful
430// for debugging. It is therefore disabled by default.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200431TEST(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
432 auto fixture = CreateVideoQualityTestFixture();
433 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800434 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100435 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
436 false, "H264", 1, 0, 0, true, false,
437 true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800438 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
439 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200440 foreman_cif.config->loss_percent = 5;
441 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200442 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800443}
444#endif // defined(WEBRTC_USE_H264)
445
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200446TEST(FullStackTest, ForemanCif500kbps) {
447 auto fixture = CreateVideoQualityTestFixture();
448 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700449 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100450 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
451 false, "VP8", 1, 0, 0, false, false,
452 true, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700453 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
454 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200455 foreman_cif.config->queue_length_packets = 0;
456 foreman_cif.config->queue_delay_ms = 0;
457 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200458 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000459}
460
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200461TEST(FullStackTest, ForemanCif500kbpsLimitedQueue) {
462 auto fixture = CreateVideoQualityTestFixture();
463 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700464 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100465 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
466 false, "VP8", 1, 0, 0, false, false,
467 true, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700468 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
469 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200470 foreman_cif.config->queue_length_packets = 32;
471 foreman_cif.config->queue_delay_ms = 0;
472 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200473 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000474}
475
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200476TEST(FullStackTest, ForemanCif500kbps100ms) {
477 auto fixture = CreateVideoQualityTestFixture();
478 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700479 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100480 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
481 false, "VP8", 1, 0, 0, false, false,
482 true, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700483 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
484 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200485 foreman_cif.config->queue_length_packets = 0;
486 foreman_cif.config->queue_delay_ms = 100;
487 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200488 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000489}
490
philipeldd8b0d82018-09-27 11:18:10 +0200491TEST_P(GenericDescriptorTest, ForemanCif500kbps100msLimitedQueue) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200492 auto fixture = CreateVideoQualityTestFixture();
493 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700494 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100495 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
496 false, "VP8", 1, 0, 0, false, false,
497 true, "foreman_cif"};
philipeldd8b0d82018-09-27 11:18:10 +0200498 foreman_cif.analyzer = {GetTestName("foreman_cif_500kbps_100ms_32pkts_queue"),
499 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200500 foreman_cif.config->queue_length_packets = 32;
501 foreman_cif.config->queue_delay_ms = 100;
502 foreman_cif.config->link_capacity_kbps = 500;
philipelf638bbc2018-10-04 16:57:12 +0200503 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200504 fixture->RunWithAnalyzer(foreman_cif);
stefanb1797672016-08-11 07:00:57 -0700505}
506
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200507TEST(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
508 auto fixture = CreateVideoQualityTestFixture();
509 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800510 foreman_cif.call.send_side_bwe = false;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100511 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
512 false, "VP8", 1, 0, 0, false, false,
513 true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800514 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
515 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200516 foreman_cif.config->queue_length_packets = 32;
517 foreman_cif.config->queue_delay_ms = 100;
518 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200519 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000520}
521
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200522TEST(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
523 auto fixture = CreateVideoQualityTestFixture();
524 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700525 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 15:39:08 +0100526 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 2000000, 2000000,
527 false, "VP8", 1, 0, 0, false, false,
528 true, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700529 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
530 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200531 foreman_cif.config->queue_length_packets = 32;
532 foreman_cif.config->queue_delay_ms = 100;
533 foreman_cif.config->link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200534 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000535}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000536
sprangff19d352017-09-06 07:14:02 -0700537// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200538TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
539 auto fixture = CreateVideoQualityTestFixture();
540 ParamsWithLogging conf_motion_hd;
minyue626bc952016-10-31 05:47:02 -0700541 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100542 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000543 true, 1280, 720, 50, 30000,
544 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200545 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700546 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
547 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200548 conf_motion_hd.config->queue_length_packets = 32;
549 conf_motion_hd.config->queue_delay_ms = 100;
550 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200551 fixture->RunWithAnalyzer(conf_motion_hd);
stefanb1797672016-08-11 07:00:57 -0700552}
553
Erik Språngd3438aa2018-11-08 16:56:43 +0100554// TODO(webrtc:9722): Remove when experiment is cleaned up.
555TEST(FullStackTest, ConferenceMotionHd1TLModerateLimitsWhitelistVp8) {
556 test::ScopedFieldTrials override_field_trials(
557 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200558 auto fixture = CreateVideoQualityTestFixture();
Erik Språngd3438aa2018-11-08 16:56:43 +0100559
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200560 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700561 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100562 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000563 true, 1280, 720, 50, 30000,
564 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200565 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
Erik Språngd3438aa2018-11-08 16:56:43 +0100566 conf_motion_hd.analyzer = {
567 "conference_motion_hd_1tl_moderate_limits_trusted_rate_ctrl", 0.0, 0.0,
568 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200569 conf_motion_hd.config->queue_length_packets = 50;
570 conf_motion_hd.config->loss_percent = 3;
571 conf_motion_hd.config->queue_delay_ms = 100;
572 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200573 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700574}
575
philipeldd8b0d82018-09-27 11:18:10 +0200576TEST_P(GenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200577 auto fixture = CreateVideoQualityTestFixture();
578 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700579 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100580 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000581 true, 1280, 720, 50, 30000,
582 3000000, 3000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200583 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
philipeldd8b0d82018-09-27 11:18:10 +0200584 conf_motion_hd.analyzer = {
585 GetTestName("conference_motion_hd_2tl_moderate_limits"), 0.0, 0.0,
586 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200587 conf_motion_hd.config->queue_length_packets = 50;
588 conf_motion_hd.config->loss_percent = 3;
589 conf_motion_hd.config->queue_delay_ms = 100;
590 conf_motion_hd.config->link_capacity_kbps = 2000;
philipelf638bbc2018-10-04 16:57:12 +0200591 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200592 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700593}
594
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200595TEST(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
596 auto fixture = CreateVideoQualityTestFixture();
597 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700598 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100599 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000600 true, 1280, 720, 50, 30000,
601 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200602 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700603 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
604 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200605 conf_motion_hd.config->queue_length_packets = 50;
606 conf_motion_hd.config->loss_percent = 3;
607 conf_motion_hd.config->queue_delay_ms = 100;
608 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200609 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700610}
611
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200612TEST(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
613 auto fixture = CreateVideoQualityTestFixture();
614 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700615 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100616 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000617 true, 1280, 720, 50, 30000,
618 3000000, 3000000, false, "VP8", 4,
Niels Möller6aa415e2018-06-07 11:14:13 +0200619 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700620 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
621 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200622 conf_motion_hd.config->queue_length_packets = 50;
623 conf_motion_hd.config->loss_percent = 3;
624 conf_motion_hd.config->queue_delay_ms = 100;
625 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200626 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700627}
628
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200629TEST(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
Erik Språngb6b1cac2018-08-09 16:12:54 +0200630 test::ScopedFieldTrials field_trial(
631 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
Erik Språngd3438aa2018-11-08 16:56:43 +0100632 auto fixture = CreateVideoQualityTestFixture();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200633 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700634 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100635 conf_motion_hd.video[0] = {
Rasmus Brandt35836932018-10-23 09:17:24 +0200636 true, 1280, 720, 50,
637 30000, 3000000, 3000000, false,
638 "VP8", 3, -1, 0,
639 false, false, false, "ConferenceMotion_1280_720_50"};
640 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
641 0.0, 0.0, kFullStackTestDurationSecs};
642 conf_motion_hd.config->queue_length_packets = 50;
643 conf_motion_hd.config->loss_percent = 3;
644 conf_motion_hd.config->queue_delay_ms = 100;
645 conf_motion_hd.config->link_capacity_kbps = 2000;
646 fixture->RunWithAnalyzer(conf_motion_hd);
647}
648
649TEST(FullStackTest,
650 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
651 auto fixture = CreateVideoQualityTestFixture();
652 test::ScopedFieldTrials field_trial(
653 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
654 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
655 ParamsWithLogging conf_motion_hd;
656 conf_motion_hd.call.send_side_bwe = true;
657 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000658 true, 1280, 720, 50, 30000,
659 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200660 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
Rasmus Brandt35836932018-10-23 09:17:24 +0200661 conf_motion_hd.analyzer = {
662 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
663 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200664 conf_motion_hd.config->queue_length_packets = 50;
665 conf_motion_hd.config->loss_percent = 3;
666 conf_motion_hd.config->queue_delay_ms = 100;
667 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200668 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700669}
670
Mirko Bonadei8ef57932018-11-16 14:38:03 +0100671#if defined(RTC_ENABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200672TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
673 auto fixture = CreateVideoQualityTestFixture();
674 ParamsWithLogging conf_motion_hd;
jianj390e64d2017-02-03 09:51:23 -0800675 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100676 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000677 true, 1280, 720, 50, 30000,
678 3000000, 3000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200679 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800680 conf_motion_hd.analyzer = {
681 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
682 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200683 conf_motion_hd.config->queue_length_packets = 32;
684 conf_motion_hd.config->queue_delay_ms = 100;
685 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200686 fixture->RunWithAnalyzer(conf_motion_hd);
jianj390e64d2017-02-03 09:51:23 -0800687}
688#endif
689
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200690TEST(FullStackTest, ScreenshareSlidesVP8_2TL) {
691 auto fixture = CreateVideoQualityTestFixture();
692 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700693 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200694 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
695 1000000, false, "VP8", 2, 1, 400000,
696 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100697 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700698 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
699 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200700 fixture->RunWithAnalyzer(screenshare);
Erik Språng6ee69aa2015-09-03 15:58:05 +0200701}
702
Ilya Nikolaevskiyf08dd9d2018-10-09 17:22:15 +0200703#if !defined(WEBRTC_MAC)
Oskar Sundbom8bacf252019-01-08 16:40:08 +0100704// All the tests using this constant are disabled on Mac.
Ilya Nikolaevskiyf08dd9d2018-10-09 17:22:15 +0200705const char kScreenshareSimulcastExperiment[] =
706 "WebRTC-SimulcastScreenshare/Enabled/";
707
Oskar Sundbom8bacf252019-01-08 16:40:08 +0100708// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
709#if !defined(WEBRTC_WIN)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200710TEST(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
Erik Språngd3438aa2018-11-08 16:56:43 +0100711 test::ScopedFieldTrials field_trial(
712 AppendFieldTrials(kScreenshareSimulcastExperiment));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200713 auto fixture = CreateVideoQualityTestFixture();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200714 ParamsWithLogging screenshare;
ilnikcb8c1462017-03-09 09:23:30 -0800715 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100716 screenshare.screenshare[0] = {true, false, 10};
717 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
718 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200719 2, 400000, false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800720 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
721 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200722 ParamsWithLogging screenshare_params_high;
Erik Språng28bb3912018-07-11 16:06:55 +0200723 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 400000, 1000000,
724 1000000, false, "VP8", 3, 0, 400000,
725 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800726 VideoQualityTest::Params screenshare_params_low;
Erik Språng28bb3912018-07-11 16:06:55 +0200727 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000, 200000,
728 1000000, false, "VP8", 2, 0, 400000,
729 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800730
731 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200732 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
733 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200734 screenshare.ss[0] = {
735 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
736 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200737 fixture->RunWithAnalyzer(screenshare);
ilnikcb8c1462017-03-09 09:23:30 -0800738}
Oskar Sundbom8bacf252019-01-08 16:40:08 +0100739#endif // !defined(WEBRTC_WIN)
Ilya Nikolaevskiyf08dd9d2018-10-09 17:22:15 +0200740#endif // !defined(WEBRTC_MAC)
ilnikcb8c1462017-03-09 09:23:30 -0800741
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200742TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
743 auto fixture = CreateVideoQualityTestFixture();
744 ParamsWithLogging config;
minyue626bc952016-10-31 05:47:02 -0700745 config.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200746 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
747 1000000, false, "VP8", 2, 1, 400000,
748 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100749 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700750 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
751 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200752 fixture->RunWithAnalyzer(config);
ivica028cf482015-07-30 02:15:56 -0700753}
754
philipeldd8b0d82018-09-27 11:18:10 +0200755TEST_P(GenericDescriptorTest, ScreenshareSlidesVP8_2TL_LossyNet) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200756 auto fixture = CreateVideoQualityTestFixture();
757 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700758 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200759 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
760 1000000, false, "VP8", 2, 1, 400000,
761 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100762 screenshare.screenshare[0] = {true, false, 10};
philipeldd8b0d82018-09-27 11:18:10 +0200763 screenshare.analyzer = {GetTestName("screenshare_slides_lossy_net"), 0.0, 0.0,
Lu Liu6f683242018-09-25 18:48:48 +0000764 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200765 screenshare.config->loss_percent = 5;
766 screenshare.config->queue_delay_ms = 200;
767 screenshare.config->link_capacity_kbps = 500;
philipelf638bbc2018-10-04 16:57:12 +0200768 screenshare.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200769 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800770}
771
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200772TEST(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
773 auto fixture = CreateVideoQualityTestFixture();
774 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700775 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200776 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
777 1000000, false, "VP8", 2, 1, 400000,
778 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100779 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700780 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
781 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200782 screenshare.config->loss_percent = 10;
783 screenshare.config->queue_delay_ms = 200;
784 screenshare.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200785 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800786}
787
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200788TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
789 auto fixture = CreateVideoQualityTestFixture();
790 ParamsWithLogging screenshare;
sprange566e172017-06-08 01:29:15 -0700791 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200792 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
793 1000000, false, "VP8", 2, 1, 400000,
794 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100795 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700796 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
797 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200798 screenshare.config->loss_percent = 5;
799 screenshare.config->link_capacity_kbps = 200;
800 screenshare.config->queue_length_packets = 30;
sprange566e172017-06-08 01:29:15 -0700801
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200802 fixture->RunWithAnalyzer(screenshare);
sprange566e172017-06-08 01:29:15 -0700803}
804
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200805TEST(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
806 auto fixture = CreateVideoQualityTestFixture();
807 ParamsWithLogging screenshare;
sprang89c4a7e2017-06-30 13:27:40 -0700808 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200809 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
810 1000000, false, "VP8", 2, 1, 400000,
811 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100812 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700813 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
814 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +0200815 screenshare.config->loss_percent = 1;
816 screenshare.config->link_capacity_kbps = 1200;
817 screenshare.config->queue_length_packets = 30;
sprang89c4a7e2017-06-30 13:27:40 -0700818
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200819 fixture->RunWithAnalyzer(screenshare);
sprang89c4a7e2017-06-30 13:27:40 -0700820}
821
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200822const ParamsWithLogging::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000823 true, 1280, 720, 30, 800000,
824 2500000, 2500000, false, "VP9", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200825 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800826
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200827const ParamsWithLogging::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000828 true, 1280, 720, 30, 800000,
829 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200830 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800831
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200832const ParamsWithLogging::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000833 true, 640, 360, 30, 150000,
834 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200835 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800836
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200837const ParamsWithLogging::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000838 true, 320, 180, 30, 30000,
839 150000, 200000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200840 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800841
Mirko Bonadei8ef57932018-11-16 14:38:03 +0100842#if defined(RTC_ENABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200843TEST(FullStackTest, ScreenshareSlidesVP9_2SL) {
844 auto fixture = CreateVideoQualityTestFixture();
845 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700846 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100847 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
848 200000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200849 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100850 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700851 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
852 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200853 screenshare.ss[0] = {
854 std::vector<VideoStream>(), 0, 2, 1, InterLayerPredMode::kOn,
855 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200856 fixture->RunWithAnalyzer(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000857}
ilnik2a8c2f52017-02-15 02:23:28 -0800858
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200859TEST(FullStackTest, VP9SVC_3SL_High) {
860 auto fixture = CreateVideoQualityTestFixture();
861 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800862 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100863 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800864 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
865 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200866
Sergey Silkin57027362018-05-15 09:12:05 +0200867 simulcast.ss[0] = {
868 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
869 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200870 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800871}
872
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200873TEST(FullStackTest, VP9SVC_3SL_Medium) {
874 auto fixture = CreateVideoQualityTestFixture();
875 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800876 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100877 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800878 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
879 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200880 simulcast.ss[0] = {
881 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
882 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200883 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800884}
885
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200886TEST(FullStackTest, VP9SVC_3SL_Low) {
887 auto fixture = CreateVideoQualityTestFixture();
888 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800889 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100890 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800891 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200892 simulcast.ss[0] = {
893 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
894 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200895 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800896}
Sergey Silkin0643fd62018-05-17 12:50:53 +0200897
Sergey Silkin7f978f12018-09-10 12:01:49 +0000898// bugs.webrtc.org/9506
899#if !defined(WEBRTC_MAC)
900
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200901TEST(FullStackTest, VP9KSVC_3SL_High) {
Sergey Silkine7ce8882018-10-03 18:04:57 +0200902 webrtc::test::ScopedFieldTrials override_trials(
903 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200904 auto fixture = CreateVideoQualityTestFixture();
905 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200906 simulcast.call.send_side_bwe = true;
907 simulcast.video[0] = kSvcVp9Video;
908 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
909 kFullStackTestDurationSecs};
910 simulcast.ss[0] = {
911 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
912 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200913 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200914}
915
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200916TEST(FullStackTest, VP9KSVC_3SL_Medium) {
Sergey Silkine7ce8882018-10-03 18:04:57 +0200917 webrtc::test::ScopedFieldTrials override_trials(
918 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200919 auto fixture = CreateVideoQualityTestFixture();
920 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200921 simulcast.call.send_side_bwe = true;
922 simulcast.video[0] = kSvcVp9Video;
923 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
924 kFullStackTestDurationSecs};
925 simulcast.ss[0] = {
926 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
927 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200928 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200929}
930
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200931TEST(FullStackTest, VP9KSVC_3SL_Low) {
Sergey Silkine7ce8882018-10-03 18:04:57 +0200932 webrtc::test::ScopedFieldTrials override_trials(
933 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200934 auto fixture = CreateVideoQualityTestFixture();
935 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200936 simulcast.call.send_side_bwe = true;
937 simulcast.video[0] = kSvcVp9Video;
938 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
939 kFullStackTestDurationSecs};
940 simulcast.ss[0] = {
941 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
942 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200943 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200944}
“Michael277a6562018-06-01 14:09:19 -0500945
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200946TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
Sergey Silkine7ce8882018-10-03 18:04:57 +0200947 webrtc::test::ScopedFieldTrials override_trials(
948 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200949 auto fixture = CreateVideoQualityTestFixture();
Niels Möller0e909822018-08-21 17:34:35 +0200950 ParamsWithLogging simulcast;
“Michael277a6562018-06-01 14:09:19 -0500951 simulcast.call.send_side_bwe = true;
952 simulcast.video[0] = kSvcVp9Video;
953 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
954 kFullStackTestDurationSecs};
955 simulcast.ss[0] = {
Sergey Silkine7ce8882018-10-03 18:04:57 +0200956 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
“Michael277a6562018-06-01 14:09:19 -0500957 std::vector<SpatialLayer>(), false};
Artem Titovf18b3522018-08-28 16:54:24 +0200958 simulcast.config->link_capacity_kbps = 1000;
Sergey Silkine7ce8882018-10-03 18:04:57 +0200959 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200960 fixture->RunWithAnalyzer(simulcast);
“Michael277a6562018-06-01 14:09:19 -0500961}
Erik Språngd3438aa2018-11-08 16:56:43 +0100962
963// TODO(webrtc:9722): Remove when experiment is cleaned up.
964TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
965 webrtc::test::ScopedFieldTrials override_trials(
966 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"
967 "WebRTC-LibvpxVp9TrustedRateController/Enabled/"));
968 auto fixture = CreateVideoQualityTestFixture();
969 ParamsWithLogging simulcast;
970 simulcast.call.send_side_bwe = true;
971 simulcast.video[0] = kSvcVp9Video;
972 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
973 0.0, 0.0, kFullStackTestDurationSecs};
974 simulcast.ss[0] = {
975 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
976 std::vector<SpatialLayer>(), false};
977 simulcast.config->link_capacity_kbps = 1000;
978 simulcast.config->queue_delay_ms = 100;
979 fixture->RunWithAnalyzer(simulcast);
980}
Sergey Silkin7f978f12018-09-10 12:01:49 +0000981#endif // !defined(WEBRTC_MAC)
982
Mirko Bonadei8ef57932018-11-16 14:38:03 +0100983#endif // defined(RTC_ENABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800984
ilnik6b826ef2017-06-16 06:53:48 -0700985// Android bots can't handle FullHD, so disable the test.
Ilya Nikolaevskiy7e5203f2018-09-10 12:04:50 +0000986// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
987#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 06:53:48 -0700988#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
989#else
990#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
991#endif
992
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200993TEST(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
994 auto fixture = CreateVideoQualityTestFixture();
995 ParamsWithLogging simulcast;
ilnik6b826ef2017-06-16 06:53:48 -0700996 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100997 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
998 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200999 2, 400000, false, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -07001000 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
1001 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001002 simulcast.config->loss_percent = 0;
1003 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001004 std::vector<VideoStream> streams = {
1005 VideoQualityTest::DefaultVideoStream(simulcast, 0),
1006 VideoQualityTest::DefaultVideoStream(simulcast, 0),
1007 VideoQualityTest::DefaultVideoStream(simulcast, 0)
1008 };
Sergey Silkin57027362018-05-15 09:12:05 +02001009 simulcast.ss[0] = {
1010 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1011 true};
Erik Språngb6b1cac2018-08-09 16:12:54 +02001012 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1013 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001014 fixture->RunWithAnalyzer(simulcast);
ilnik6b826ef2017-06-16 06:53:48 -07001015}
1016
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001017TEST(FullStackTest, SimulcastVP8_3SL_High) {
1018 auto fixture = CreateVideoQualityTestFixture();
1019 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -08001020 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001021 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -08001022 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -08001023 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001024 simulcast.config->loss_percent = 0;
1025 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001026 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001027 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001028 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001029 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001030 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001031 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -08001032
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001033 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001034 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1035 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1036 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +02001037 simulcast.ss[0] = {
1038 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1039 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001040 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -08001041}
1042
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001043TEST(FullStackTest, SimulcastVP8_3SL_Medium) {
1044 auto fixture = CreateVideoQualityTestFixture();
1045 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -08001046 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001047 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -08001048 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -08001049 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001050 simulcast.config->loss_percent = 0;
1051 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001052 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001053 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001054 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001055 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001056 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001057 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -08001058
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001059 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001060 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1061 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1062 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +02001063 simulcast.ss[0] = {
1064 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1065 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001066 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -08001067}
1068
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001069TEST(FullStackTest, SimulcastVP8_3SL_Low) {
1070 auto fixture = CreateVideoQualityTestFixture();
1071 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -08001072 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001073 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -08001074 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -08001075 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001076 simulcast.config->loss_percent = 0;
1077 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001078 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001079 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001080 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001081 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001082 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001083 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -08001084
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001085 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001086 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1087 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1088 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +02001089 simulcast.ss[0] = {
1090 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1091 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001092 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -08001093}
1094
Emircan Uysaler7c03bdc2019-01-16 15:07:56 -05001095// This test assumes ideal network conditions with target bandwidth being
1096// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1097// Android32 bots can't handle this high bitrate, so disable test for those.
1098#if defined(WEBRTC_ANDROID)
Emircan Uysaler62f55322019-01-16 17:48:47 -05001099#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
Emircan Uysaler7c03bdc2019-01-16 15:07:56 -05001100#else
1101#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1102#endif // defined(WEBRTC_ANDROID)
1103TEST(FullStackTest, MAYBE_HighBitrateWithFakeCodec) {
1104 auto fixture = CreateVideoQualityTestFixture();
1105 const int target_bitrate = 100000000;
1106 ParamsWithLogging generator;
1107 generator.call.send_side_bwe = true;
1108 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1109 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1110 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1111 generator.video[0] = {true,
1112 360,
1113 240,
1114 30,
1115 target_bitrate / 2,
1116 target_bitrate,
1117 target_bitrate * 2,
1118 false,
1119 "FakeCodec",
1120 1,
1121 0,
1122 0,
1123 false,
1124 false,
1125 false,
1126 "Generator"};
1127 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1128 kFullStackTestDurationSecs};
1129 fixture->RunWithAnalyzer(generator);
1130}
1131
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001132TEST(FullStackTest, LargeRoomVP8_5thumb) {
1133 auto fixture = CreateVideoQualityTestFixture();
1134 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001135 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001136 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001137 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
1138 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001139 large_room.config->loss_percent = 0;
1140 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001141 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001142 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001143 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001144 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001145 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001146 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001147
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001148 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001149 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1150 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1151 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001152 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 09:12:05 +02001153 large_room.ss[0] = {
1154 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1155 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001156 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001157}
1158
oprypin743117f2017-09-15 05:24:24 -07001159#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1160// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -08001161// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1162#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -08001163#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -08001164#else
1165#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -08001166#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -08001167#endif
1168
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001169TEST(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1170 auto fixture = CreateVideoQualityTestFixture();
1171 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001172 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001173 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001174 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
1175 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001176 large_room.config->loss_percent = 0;
1177 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001178 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001179 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001180 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001181 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001182 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001183 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001184
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001185 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001186 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1187 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1188 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001189 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 09:12:05 +02001190 large_room.ss[0] = {
1191 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1192 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001193 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001194}
1195
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001196TEST(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1197 auto fixture = CreateVideoQualityTestFixture();
1198 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001199 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001200 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001201 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
1202 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001203 large_room.config->loss_percent = 0;
1204 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001205 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001206 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001207 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001208 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001209 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001210 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001211
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001212 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001213 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1214 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1215 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001216 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 09:12:05 +02001217 large_room.ss[0] = {
1218 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1219 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001220 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001221}
1222
Mirko Bonadeic84f6612019-01-31 12:20:57 +01001223INSTANTIATE_TEST_SUITE_P(
1224 FullStackTest,
1225 GenericDescriptorTest,
1226 ::testing::Values("WebRTC-GenericDescriptor/Disabled/",
1227 "WebRTC-GenericDescriptor/Enabled/"));
philipeldd8b0d82018-09-27 11:18:10 +02001228
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001229class DualStreamsTest : public ::testing::TestWithParam<int> {};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001230
1231// Disable dual video test on mobile device becuase it's too heavy.
Ilya Nikolaevskiyf08dd9d2018-10-09 17:22:15 +02001232// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1233#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001234TEST_P(DualStreamsTest,
1235 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
1236 test::ScopedFieldTrials field_trial(
Erik Språngb65aa012018-09-24 11:35:19 +02001237 AppendFieldTrials(std::string(kPacerPushBackExperiment) +
1238 std::string(kScreenshareSimulcastExperiment)));
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001239 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001240 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001241
1242 // Screenshare Settings.
1243 dual_streams.screenshare[first_stream] = {true, false, 10};
1244 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1245 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001246 2, 400000, false, false, false,
1247 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001248
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001249 ParamsWithLogging screenshare_params_high;
Erik Språng28bb3912018-07-11 16:06:55 +02001250 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 400000, 1000000,
1251 1000000, false, "VP8", 3, 0, 400000,
1252 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001253 VideoQualityTest::Params screenshare_params_low;
Erik Språng28bb3912018-07-11 16:06:55 +02001254 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1255 1000000, false, "VP8", 2, 0, 400000,
1256 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001257 std::vector<VideoStream> screenhsare_streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001258 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1259 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001260
Sergey Silkin57027362018-05-15 09:12:05 +02001261 dual_streams.ss[first_stream] = {
1262 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1263 std::vector<SpatialLayer>(), false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001264
1265 // Video settings.
1266 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
1267
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001268 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001269 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001270 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001271 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001272 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001273 video_params_low.video[0] = kSimulcastVp8VideoLow;
1274 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001275 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1276 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1277 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001278
1279 dual_streams.ss[1 - first_stream] = {
Sergey Silkin57027362018-05-15 09:12:05 +02001280 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1281 false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001282
1283 // Call settings.
1284 dual_streams.call.send_side_bwe = true;
1285 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001286 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1287 std::to_string(first_stream);
1288 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001289 dual_streams.config->loss_percent = 1;
1290 dual_streams.config->link_capacity_kbps = 7500;
1291 dual_streams.config->queue_length_packets = 30;
1292 dual_streams.config->queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001293
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001294 auto fixture = CreateVideoQualityTestFixture();
1295 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001296}
Ilya Nikolaevskiyf08dd9d2018-10-09 17:22:15 +02001297#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1298 // !defined(WEBRTC_MAC)
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001299
1300TEST_P(DualStreamsTest, Conference_Restricted) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001301 test::ScopedFieldTrials field_trial(
Ilya Nikolaevskiycb960622018-09-04 09:07:31 +00001302 AppendFieldTrials(std::string(kPacerPushBackExperiment)));
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001303 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001304 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001305
1306 // Screenshare Settings.
1307 dual_streams.screenshare[first_stream] = {true, false, 10};
1308 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1309 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001310 2, 400000, false, false, false,
1311 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001312 // Video settings.
1313 dual_streams.video[1 - first_stream] = {
1314 true, 1280, 720, 30, 150000,
1315 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001316 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001317
1318 // Call settings.
1319 dual_streams.call.send_side_bwe = true;
1320 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001321 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1322 std::to_string(first_stream);
1323 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 16:54:24 +02001324 dual_streams.config->loss_percent = 1;
1325 dual_streams.config->link_capacity_kbps = 5000;
1326 dual_streams.config->queue_length_packets = 30;
1327 dual_streams.config->queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001328
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001329 auto fixture = CreateVideoQualityTestFixture();
1330 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001331}
1332
Mirko Bonadeic84f6612019-01-31 12:20:57 +01001333INSTANTIATE_TEST_SUITE_P(FullStackTest,
1334 DualStreamsTest,
1335 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -08001336
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001337} // namespace webrtc