blob: 8651d124ae58f9dd396bcd1e1381394374387f60 [file] [log] [blame]
pbos@webrtc.orgaf8d5af2013-07-09 08:02:331/*
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 15:47:4910#include <memory>
11#include <string>
12#include <utility>
13#include <vector>
pbos@webrtc.orgaf8d5af2013-07-09 08:02:3314
Yves Gerey3e707812018-11-28 15:47:4915#include "absl/memory/memory.h"
16#include "absl/types/optional.h"
17#include "api/test/simulated_network.h"
Patrik Höglundd8f3c172018-09-26 12:39:1718#include "api/test/test_dependency_factory.h"
Yves Gerey3e707812018-11-28 15:47:4919#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-14 00:10:0024#include "media/base/vp9_profile.h"
25#include "modules/video_coding/codecs/vp9/include/vp9.h"
Sebastian Janssonf8518882018-05-31 12:52:5926#include "rtc_base/flags.h"
Mirko Bonadei17f48782018-09-28 06:51:1027#include "system_wrappers/include/field_trial.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3128#include "test/field_trial.h"
29#include "test/gtest.h"
30#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:3331
pbos@webrtc.orgaf8d5af2013-07-09 08:02:3332namespace webrtc {
Sebastian Janssonf8518882018-05-31 12:52:5933namespace flags {
34
Mirko Bonadei2dfa9982018-10-18 09:35:3235WEBRTC_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 12:52:5939std::string RtcEventLogName() {
40 return static_cast<std::string>(FLAG_rtc_event_log_name);
41}
Mirko Bonadei2dfa9982018-10-18 09:35:3242WEBRTC_DEFINE_string(rtp_dump_name,
43 "",
44 "Filename for dumped received RTP stream.");
Sebastian Janssonf8518882018-05-31 12:52:5945std::string RtpDumpName() {
46 return static_cast<std::string>(FLAG_rtp_dump_name);
47}
Mirko Bonadei2dfa9982018-10-18 09:35:3248WEBRTC_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 12:52:5953std::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:3360
sprang89c4a7e2017-06-30 20:27:4061namespace {
brandtrdd369c62016-11-17 07:56:5762static const int kFullStackTestDurationSecs = 45;
Patrik Höglundb6b29e02018-06-21 14:58:0163const char kPacerPushBackExperiment[] =
64 "WebRTC-PacerPushbackExperiment/Enabled/";
Erik Språngd3438aa2018-11-08 15:56:4365const char kVp8TrustedRateControllerFieldTrial[] =
66 "WebRTC-LibvpxVp8TrustedRateController/Enabled/";
pbos@webrtc.orgb613b5a2013-12-03 10:13:0467
Patrik Höglundb6b29e02018-06-21 14:58:0168struct ParamsWithLogging : public VideoQualityTest::Params {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:3369 public:
Patrik Höglundb6b29e02018-06-21 14:58:0170 ParamsWithLogging() {
71 // Use these logging flags by default, for everything.
Mirko Bonadei45a4c412018-07-31 13:07:2872 logging = {flags::RtcEventLogName(), flags::RtpDumpName(),
73 flags::EncodedFramePath()};
Artem Titov75e36472018-10-08 10:28:5674 this->config = BuiltInNetworkBehaviorConfig();
pbos@webrtc.org94015242013-10-16 11:05:3775 }
pbos@webrtc.orgaf8d5af2013-07-09 08:02:3376};
77
Patrik Höglundb6b29e02018-06-21 14:58:0178std::unique_ptr<VideoQualityTestFixtureInterface>
79CreateVideoQualityTestFixture() {
Patrik Höglundd8f3c172018-09-26 12:39:1780 // 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 14:58:0184}
85
Erik Språngb6b1cac2018-08-09 14:12:5486// 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 14:58:0190} // namespace
91
sprangce4aef12015-11-02 15:23:2092// 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:33101
philipeldd8b0d82018-09-27 09:18:10102class GenericDescriptorTest : public ::testing::TestWithParam<std::string> {
103 public:
philipelf638bbc2018-10-04 14:57:12104 GenericDescriptorTest()
Ilya Nikolaevskiy0500b522019-01-22 10:12:51105 : field_trial_(AppendFieldTrials(GetParam())),
philipelf638bbc2018-10-04 14:57:12106 generic_descriptor_enabled_(
107 field_trial::IsEnabled("WebRTC-GenericDescriptor")) {}
philipeldd8b0d82018-09-27 09:18:10108
109 std::string GetTestName(std::string base) {
philipelf638bbc2018-10-04 14:57:12110 if (generic_descriptor_enabled_)
philipeldd8b0d82018-09-27 09:18:10111 base += "_generic_descriptor";
112 return base;
113 }
114
philipelf638bbc2018-10-04 14:57:12115 bool GenericDescriptorEnabled() const { return generic_descriptor_enabled_; }
116
philipeldd8b0d82018-09-27 09:18:10117 private:
118 test::ScopedFieldTrials field_trial_;
philipelf638bbc2018-10-04 14:57:12119 bool generic_descriptor_enabled_;
philipeldd8b0d82018-09-27 09:18:10120};
121
Mirko Bonadei8ef57932018-11-16 13:38:03122#if defined(RTC_ENABLE_VP9)
Patrik Höglundb6b29e02018-06-21 14:58:01123TEST(FullStackTest, ForemanCifWithoutPacketLossVp9) {
124 auto fixture = CreateVideoQualityTestFixture();
125 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07126 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08127 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 15:50:07130 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
131 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01132 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 21:16:43133}
134
philipeldd8b0d82018-09-27 09:18:10135TEST_P(GenericDescriptorTest, ForemanCifPlr5Vp9) {
Patrik Höglundb6b29e02018-06-21 14:58:01136 auto fixture = CreateVideoQualityTestFixture();
137 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07138 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08139 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 09:18:10142 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_VP9"), 0.0,
143 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24144 foreman_cif.config->loss_percent = 5;
145 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 14:57:12146 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01147 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 21:16:43148}
Emircan Uysaler03e6ec92018-03-09 23:03:26149
Emircan Uysaler0823eec2018-07-14 00:10:00150TEST(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 14:39:08170 1, 0, 0, false, false, true, "GeneratorI010", 0, vp92};
Emircan Uysaler0823eec2018-07-14 00:10:00171 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 14:58:01176TEST(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
177 auto fixture = CreateVideoQualityTestFixture();
178 ParamsWithLogging foreman_cif;
Emircan Uysaler03e6ec92018-03-09 23:03:26179 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08180 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 23:03:26183 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
184 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01185 fixture->RunWithAnalyzer(foreman_cif);
Emircan Uysaler03e6ec92018-03-09 23:03:26186}
187
Patrik Höglundb6b29e02018-06-21 14:58:01188TEST(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
189 auto fixture = CreateVideoQualityTestFixture();
190
191 ParamsWithLogging generator;
Emircan Uysalerf1ff3bd2018-03-12 18:53:21192 generator.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08193 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 18:53:21196 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
197 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01198 fixture->RunWithAnalyzer(generator);
Emircan Uysaler03e6ec92018-03-09 23:03:26199}
200
Mirko Bonadei8ef57932018-11-16 13:38:03201#endif // defined(RTC_ENABLE_VP9)
asapersson88b0a222016-02-12 21:16:43202
Patrik Höglund11bf2fa2018-04-09 10:20:50203#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 14:58:01209TEST(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
210 auto fixture = CreateVideoQualityTestFixture();
211 ParamsWithLogging paris_qcif;
minyue626bc952016-10-31 12:47:02212 paris_qcif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08213 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 12:47:02216 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
217 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01218 fixture->RunWithAnalyzer(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52219}
220
philipeldd8b0d82018-09-27 09:18:10221TEST_P(GenericDescriptorTest, ForemanCifWithoutPacketLoss) {
Patrik Höglundb6b29e02018-06-21 14:58:01222 auto fixture = CreateVideoQualityTestFixture();
stefan@webrtc.orgb8e9e442014-07-09 11:29:06223 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 14:58:01224 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 12:47:02225 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08226 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 09:18:10229 foreman_cif.analyzer = {GetTestName("foreman_cif_net_delay_0_0_plr_0"), 0.0,
230 0.0, kFullStackTestDurationSecs};
philipelf638bbc2018-10-04 14:57:12231 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01232 fixture->RunWithAnalyzer(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52233}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33234
philipeldd8b0d82018-09-27 09:18:10235TEST_P(GenericDescriptorTest, ForemanCif30kbpsWithoutPacketLoss) {
Patrik Höglundb6b29e02018-06-21 14:58:01236 auto fixture = CreateVideoQualityTestFixture();
237 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 14:54:01238 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08239 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 09:18:10242 foreman_cif.analyzer = {GetTestName("foreman_cif_30kbps_net_delay_0_0_plr_0"),
243 0.0, 0.0, kFullStackTestDurationSecs};
philipelf638bbc2018-10-04 14:57:12244 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01245 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 14:54:01246}
247
Erik Språngd3438aa2018-11-08 15:56:43248// 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 14:39:08259 true, "foreman_cif"};
Erik Språngd3438aa2018-11-08 15:56:43260 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 14:39:08267// Link capacity below default start rate.
Patrik Höglundb6b29e02018-06-21 14:58:01268TEST(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
269 auto fixture = CreateVideoQualityTestFixture();
Niels Möller0e909822018-08-21 15:34:35270 ParamsWithLogging foreman_cif;
Niels Möller6aa415e2018-06-07 09:14:13271 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 14:54:24278 foreman_cif.config->link_capacity_kbps = 150;
Patrik Höglundb6b29e02018-06-21 14:58:01279 fixture->RunWithAnalyzer(foreman_cif);
Niels Möller6aa415e2018-06-07 09:14:13280}
281
Erik Språng616b2332019-02-11 13:16:28282// Restricted network and encoder overproducing by 30%.
283TEST(FullStackTest, ForemanCifLink150kbpsBadRateController) {
284 auto fixture = CreateVideoQualityTestFixture();
285 ParamsWithLogging foreman_cif;
286 foreman_cif.call.send_side_bwe = true;
287 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
288 false, "VP8", 1, 0, 0, false, false,
289 true, "foreman_cif", 0, {}, 1.30};
290 foreman_cif.analyzer = {
291 "foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30", 0.0, 0.0,
292 kFullStackTestDurationSecs};
293 foreman_cif.config->link_capacity_kbps = 150;
294 foreman_cif.config->queue_length_packets = 30;
295 foreman_cif.config->queue_delay_ms = 100;
296 fixture->RunWithAnalyzer(foreman_cif);
297}
298
philipeldd8b0d82018-09-27 09:18:10299TEST_P(GenericDescriptorTest, ForemanCifPlr5) {
Patrik Höglundb6b29e02018-06-21 14:58:01300 auto fixture = CreateVideoQualityTestFixture();
301 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 12:47:02302 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08303 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
304 false, "VP8", 1, 0, 0, false, false,
305 true, "foreman_cif"};
philipeldd8b0d82018-09-27 09:18:10306 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5"), 0.0, 0.0,
Lu Liu6f683242018-09-25 18:48:48307 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24308 foreman_cif.config->loss_percent = 5;
309 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 14:57:12310 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01311 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgc216b9a2014-10-14 10:38:49312}
313
philipeldd8b0d82018-09-27 09:18:10314TEST_P(GenericDescriptorTest, ForemanCifPlr5Ulpfec) {
Patrik Höglundb6b29e02018-06-21 14:58:01315 auto fixture = CreateVideoQualityTestFixture();
316 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07317 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08318 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
319 false, "VP8", 1, 0, 0, true, false,
320 true, "foreman_cif"};
philipeldd8b0d82018-09-27 09:18:10321 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_ulpfec"),
322 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24323 foreman_cif.config->loss_percent = 5;
324 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 14:57:12325 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01326 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 15:50:07327}
328
Patrik Höglundb6b29e02018-06-21 14:58:01329TEST(FullStackTest, ForemanCifPlr5Flexfec) {
330 auto fixture = CreateVideoQualityTestFixture();
331 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07332 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08333 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
334 false, "VP8", 1, 0, 0, false, true,
335 true, "foreman_cif"};
brandtr93c5d032016-11-30 15:50:07336 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
337 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24338 foreman_cif.config->loss_percent = 5;
339 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 14:58:01340 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 15:50:07341}
342
Patrik Höglundb6b29e02018-06-21 14:58:01343TEST(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
344 auto fixture = CreateVideoQualityTestFixture();
345 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 10:03:02346 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08347 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
348 false, "VP8", 1, 0, 0, false, true,
349 true, "foreman_cif"};
stefan889d9652017-07-05 10:03:02350 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
351 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24352 foreman_cif.config->loss_percent = 3;
353 foreman_cif.config->link_capacity_kbps = 500;
354 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 14:58:01355 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 10:03:02356}
357
Patrik Höglundb6b29e02018-06-21 14:58:01358TEST(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
359 auto fixture = CreateVideoQualityTestFixture();
360 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 10:03:02361 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08362 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
363 false, "VP8", 1, 0, 0, true, false,
364 true, "foreman_cif"};
stefan889d9652017-07-05 10:03:02365 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
366 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24367 foreman_cif.config->loss_percent = 3;
368 foreman_cif.config->link_capacity_kbps = 500;
369 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 14:58:01370 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 10:03:02371}
372
brandtrdd369c62016-11-17 07:56:57373#if defined(WEBRTC_USE_H264)
Patrik Höglundb6b29e02018-06-21 14:58:01374TEST(FullStackTest, ForemanCifWithoutPacketlossH264) {
375 auto fixture = CreateVideoQualityTestFixture();
brandtr93c5d032016-11-30 15:50:07376 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 14:58:01377 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07378 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08379 foreman_cif.video[0] = {true, 352, 288, 30, 700000, 700000, 700000,
380 false, "H264", 1, 0, 0, false, false,
381 true, "foreman_cif"};
brandtr93c5d032016-11-30 15:50:07382 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
383 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01384 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-17 07:56:57385}
386
Patrik Höglundb6b29e02018-06-21 14:58:01387TEST(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
388 auto fixture = CreateVideoQualityTestFixture();
389 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 14:54:01390 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08391 foreman_cif.video[0] = {true, 352, 288, 10, 30000, 30000, 30000,
392 false, "H264", 1, 0, 0, false, false,
393 true, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 14:54:01394 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
395 0.0, kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01396 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 14:54:01397}
398
philipeldd8b0d82018-09-27 09:18:10399TEST_P(GenericDescriptorTest, ForemanCifPlr5H264) {
Patrik Höglundb6b29e02018-06-21 14:58:01400 auto fixture = CreateVideoQualityTestFixture();
401 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07402 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08403 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
404 false, "H264", 1, 0, 0, false, false,
405 true, "foreman_cif"};
philipeldd8b0d82018-09-27 09:18:10406 foreman_cif.analyzer = {GetTestName("foreman_cif_delay_50_0_plr_5_H264"), 0.0,
407 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24408 foreman_cif.config->loss_percent = 5;
409 foreman_cif.config->queue_delay_ms = 50;
philipelf638bbc2018-10-04 14:57:12410 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01411 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-17 07:56:57412}
413
Patrik Höglundb6b29e02018-06-21 14:58:01414TEST(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
Rasmus Brandt88f080a2017-11-02 13:28:06415 test::ScopedFieldTrials override_field_trials(
Erik Språngb6b1cac2018-08-09 14:12:54416 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
Erik Språngd3438aa2018-11-08 15:56:43417 auto fixture = CreateVideoQualityTestFixture();
Rasmus Brandt88f080a2017-11-02 13:28:06418
Patrik Höglundb6b29e02018-06-21 14:58:01419 ParamsWithLogging foreman_cif;
Rasmus Brandt88f080a2017-11-02 13:28:06420 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08421 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
422 false, "H264", 1, 0, 0, false, false,
423 true, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 13:28:06424 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
425 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24426 foreman_cif.config->loss_percent = 5;
427 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 14:58:01428 fixture->RunWithAnalyzer(foreman_cif);
Rasmus Brandt88f080a2017-11-02 13:28:06429}
430
brandtrdd369c62016-11-17 07:56:57431// Verify that this is worth the bot time, before enabling.
Patrik Höglundb6b29e02018-06-21 14:58:01432TEST(FullStackTest, ForemanCifPlr5H264Flexfec) {
433 auto fixture = CreateVideoQualityTestFixture();
434 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07435 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08436 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
437 false, "H264", 1, 0, 0, false, true,
438 true, "foreman_cif"};
brandtr93c5d032016-11-30 15:50:07439 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
440 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24441 foreman_cif.config->loss_percent = 5;
442 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 14:58:01443 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-17 07:56:57444}
445
446// Ulpfec with H264 is an unsupported combination, so this test is only useful
447// for debugging. It is therefore disabled by default.
Patrik Höglundb6b29e02018-06-21 14:58:01448TEST(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
449 auto fixture = CreateVideoQualityTestFixture();
450 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07451 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08452 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
453 false, "H264", 1, 0, 0, true, false,
454 true, "foreman_cif"};
brandtr93c5d032016-11-30 15:50:07455 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
456 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24457 foreman_cif.config->loss_percent = 5;
458 foreman_cif.config->queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 14:58:01459 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-17 07:56:57460}
461#endif // defined(WEBRTC_USE_H264)
462
Patrik Höglundb6b29e02018-06-21 14:58:01463TEST(FullStackTest, ForemanCif500kbps) {
464 auto fixture = CreateVideoQualityTestFixture();
465 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 12:47:02466 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08467 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
468 false, "VP8", 1, 0, 0, false, false,
469 true, "foreman_cif"};
minyue626bc952016-10-31 12:47:02470 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
471 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24472 foreman_cif.config->queue_length_packets = 0;
473 foreman_cif.config->queue_delay_ms = 0;
474 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 14:58:01475 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06476}
477
Patrik Höglundb6b29e02018-06-21 14:58:01478TEST(FullStackTest, ForemanCif500kbpsLimitedQueue) {
479 auto fixture = CreateVideoQualityTestFixture();
480 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 12:47:02481 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08482 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
483 false, "VP8", 1, 0, 0, false, false,
484 true, "foreman_cif"};
minyue626bc952016-10-31 12:47:02485 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
486 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24487 foreman_cif.config->queue_length_packets = 32;
488 foreman_cif.config->queue_delay_ms = 0;
489 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 14:58:01490 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06491}
492
Patrik Höglundb6b29e02018-06-21 14:58:01493TEST(FullStackTest, ForemanCif500kbps100ms) {
494 auto fixture = CreateVideoQualityTestFixture();
495 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 12:47:02496 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08497 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
498 false, "VP8", 1, 0, 0, false, false,
499 true, "foreman_cif"};
minyue626bc952016-10-31 12:47:02500 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
501 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24502 foreman_cif.config->queue_length_packets = 0;
503 foreman_cif.config->queue_delay_ms = 100;
504 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 14:58:01505 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06506}
507
philipeldd8b0d82018-09-27 09:18:10508TEST_P(GenericDescriptorTest, ForemanCif500kbps100msLimitedQueue) {
Patrik Höglundb6b29e02018-06-21 14:58:01509 auto fixture = CreateVideoQualityTestFixture();
510 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 12:47:02511 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08512 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
513 false, "VP8", 1, 0, 0, false, false,
514 true, "foreman_cif"};
philipeldd8b0d82018-09-27 09:18:10515 foreman_cif.analyzer = {GetTestName("foreman_cif_500kbps_100ms_32pkts_queue"),
516 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24517 foreman_cif.config->queue_length_packets = 32;
518 foreman_cif.config->queue_delay_ms = 100;
519 foreman_cif.config->link_capacity_kbps = 500;
philipelf638bbc2018-10-04 14:57:12520 foreman_cif.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01521 fixture->RunWithAnalyzer(foreman_cif);
stefanb1797672016-08-11 14:00:57522}
523
Patrik Höglundb6b29e02018-06-21 14:58:01524TEST(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
525 auto fixture = CreateVideoQualityTestFixture();
526 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 15:50:07527 foreman_cif.call.send_side_bwe = false;
Stefan Holmer1f7a0082019-01-11 14:39:08528 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 500000, 2000000,
529 false, "VP8", 1, 0, 0, false, false,
530 true, "foreman_cif"};
brandtr93c5d032016-11-30 15:50:07531 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
532 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24533 foreman_cif.config->queue_length_packets = 32;
534 foreman_cif.config->queue_delay_ms = 100;
535 foreman_cif.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 14:58:01536 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06537}
538
Patrik Höglundb6b29e02018-06-21 14:58:01539TEST(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
540 auto fixture = CreateVideoQualityTestFixture();
541 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 12:47:02542 foreman_cif.call.send_side_bwe = true;
Stefan Holmer1f7a0082019-01-11 14:39:08543 foreman_cif.video[0] = {true, 352, 288, 30, 30000, 2000000, 2000000,
544 false, "VP8", 1, 0, 0, false, false,
545 true, "foreman_cif"};
minyue626bc952016-10-31 12:47:02546 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
547 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24548 foreman_cif.config->queue_length_packets = 32;
549 foreman_cif.config->queue_delay_ms = 100;
550 foreman_cif.config->link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 14:58:01551 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06552}
sprang@webrtc.org131bea82015-02-18 12:46:06553
sprangff19d352017-09-06 14:14:02554// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Patrik Höglundb6b29e02018-06-21 14:58:01555TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
556 auto fixture = CreateVideoQualityTestFixture();
557 ParamsWithLogging conf_motion_hd;
minyue626bc952016-10-31 12:47:02558 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59559 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12560 true, 1280, 720, 50, 30000,
561 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 09:14:13562 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 12:47:02563 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
564 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24565 conf_motion_hd.config->queue_length_packets = 32;
566 conf_motion_hd.config->queue_delay_ms = 100;
567 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 14:58:01568 fixture->RunWithAnalyzer(conf_motion_hd);
stefanb1797672016-08-11 14:00:57569}
570
Erik Språngd3438aa2018-11-08 15:56:43571// TODO(webrtc:9722): Remove when experiment is cleaned up.
572TEST(FullStackTest, ConferenceMotionHd1TLModerateLimitsWhitelistVp8) {
573 test::ScopedFieldTrials override_field_trials(
574 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
Patrik Höglundb6b29e02018-06-21 14:58:01575 auto fixture = CreateVideoQualityTestFixture();
Erik Språngd3438aa2018-11-08 15:56:43576
Patrik Höglundb6b29e02018-06-21 14:58:01577 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 14:14:02578 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59579 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12580 true, 1280, 720, 50, 30000,
581 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 09:14:13582 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
Erik Språngd3438aa2018-11-08 15:56:43583 conf_motion_hd.analyzer = {
584 "conference_motion_hd_1tl_moderate_limits_trusted_rate_ctrl", 0.0, 0.0,
585 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24586 conf_motion_hd.config->queue_length_packets = 50;
587 conf_motion_hd.config->loss_percent = 3;
588 conf_motion_hd.config->queue_delay_ms = 100;
589 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 14:58:01590 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 14:14:02591}
592
philipeldd8b0d82018-09-27 09:18:10593TEST_P(GenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Patrik Höglundb6b29e02018-06-21 14:58:01594 auto fixture = CreateVideoQualityTestFixture();
595 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 14:14:02596 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59597 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12598 true, 1280, 720, 50, 30000,
599 3000000, 3000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 09:14:13600 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
philipeldd8b0d82018-09-27 09:18:10601 conf_motion_hd.analyzer = {
602 GetTestName("conference_motion_hd_2tl_moderate_limits"), 0.0, 0.0,
603 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24604 conf_motion_hd.config->queue_length_packets = 50;
605 conf_motion_hd.config->loss_percent = 3;
606 conf_motion_hd.config->queue_delay_ms = 100;
607 conf_motion_hd.config->link_capacity_kbps = 2000;
philipelf638bbc2018-10-04 14:57:12608 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01609 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 14:14:02610}
611
Patrik Höglundb6b29e02018-06-21 14:58:01612TEST(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
613 auto fixture = CreateVideoQualityTestFixture();
614 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 14:14:02615 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59616 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12617 true, 1280, 720, 50, 30000,
618 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 09:14:13619 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 14:14:02620 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
621 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24622 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 14:58:01626 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 14:14:02627}
628
Patrik Höglundb6b29e02018-06-21 14:58:01629TEST(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
630 auto fixture = CreateVideoQualityTestFixture();
631 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 14:14:02632 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59633 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12634 true, 1280, 720, 50, 30000,
635 3000000, 3000000, false, "VP8", 4,
Niels Möller6aa415e2018-06-07 09:14:13636 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 14:14:02637 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
638 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24639 conf_motion_hd.config->queue_length_packets = 50;
640 conf_motion_hd.config->loss_percent = 3;
641 conf_motion_hd.config->queue_delay_ms = 100;
642 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 14:58:01643 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 14:14:02644}
645
Patrik Höglundb6b29e02018-06-21 14:58:01646TEST(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
Erik Språngb6b1cac2018-08-09 14:12:54647 test::ScopedFieldTrials field_trial(
648 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
Erik Språngd3438aa2018-11-08 15:56:43649 auto fixture = CreateVideoQualityTestFixture();
Patrik Höglundb6b29e02018-06-21 14:58:01650 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 14:14:02651 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59652 conf_motion_hd.video[0] = {
Rasmus Brandt35836932018-10-23 07:17:24653 true, 1280, 720, 50,
654 30000, 3000000, 3000000, false,
655 "VP8", 3, -1, 0,
656 false, false, false, "ConferenceMotion_1280_720_50"};
657 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
658 0.0, 0.0, kFullStackTestDurationSecs};
659 conf_motion_hd.config->queue_length_packets = 50;
660 conf_motion_hd.config->loss_percent = 3;
661 conf_motion_hd.config->queue_delay_ms = 100;
662 conf_motion_hd.config->link_capacity_kbps = 2000;
663 fixture->RunWithAnalyzer(conf_motion_hd);
664}
665
666TEST(FullStackTest,
667 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
668 auto fixture = CreateVideoQualityTestFixture();
669 test::ScopedFieldTrials field_trial(
670 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
671 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
672 ParamsWithLogging conf_motion_hd;
673 conf_motion_hd.call.send_side_bwe = true;
674 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12675 true, 1280, 720, 50, 30000,
676 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 09:14:13677 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
Rasmus Brandt35836932018-10-23 07:17:24678 conf_motion_hd.analyzer = {
679 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
680 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24681 conf_motion_hd.config->queue_length_packets = 50;
682 conf_motion_hd.config->loss_percent = 3;
683 conf_motion_hd.config->queue_delay_ms = 100;
684 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 14:58:01685 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 14:14:02686}
687
Mirko Bonadei8ef57932018-11-16 13:38:03688#if defined(RTC_ENABLE_VP9)
Patrik Höglundb6b29e02018-06-21 14:58:01689TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
690 auto fixture = CreateVideoQualityTestFixture();
691 ParamsWithLogging conf_motion_hd;
jianj390e64d2017-02-03 17:51:23692 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59693 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12694 true, 1280, 720, 50, 30000,
695 3000000, 3000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 09:14:13696 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 17:51:23697 conf_motion_hd.analyzer = {
698 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
699 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24700 conf_motion_hd.config->queue_length_packets = 32;
701 conf_motion_hd.config->queue_delay_ms = 100;
702 conf_motion_hd.config->link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 14:58:01703 fixture->RunWithAnalyzer(conf_motion_hd);
jianj390e64d2017-02-03 17:51:23704}
705#endif
706
Patrik Höglundb6b29e02018-06-21 14:58:01707TEST(FullStackTest, ScreenshareSlidesVP8_2TL) {
708 auto fixture = CreateVideoQualityTestFixture();
709 ParamsWithLogging screenshare;
minyue626bc952016-10-31 12:47:02710 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 14:06:55711 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
712 1000000, false, "VP8", 2, 1, 400000,
713 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59714 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 12:47:02715 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
716 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01717 fixture->RunWithAnalyzer(screenshare);
Erik Språng6ee69aa2015-09-03 13:58:05718}
719
Ilya Nikolaevskiyf08dd9d2018-10-09 15:22:15720#if !defined(WEBRTC_MAC)
Oskar Sundbom8bacf252019-01-08 15:40:08721// All the tests using this constant are disabled on Mac.
Ilya Nikolaevskiyf08dd9d2018-10-09 15:22:15722const char kScreenshareSimulcastExperiment[] =
723 "WebRTC-SimulcastScreenshare/Enabled/";
724
Oskar Sundbom8bacf252019-01-08 15:40:08725// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
726#if !defined(WEBRTC_WIN)
Ilya Nikolaevskiydda5fdc2019-02-27 09:00:06727TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Simulcast) {
Erik Språngd3438aa2018-11-08 15:56:43728 test::ScopedFieldTrials field_trial(
729 AppendFieldTrials(kScreenshareSimulcastExperiment));
Patrik Höglundb6b29e02018-06-21 14:58:01730 auto fixture = CreateVideoQualityTestFixture();
Patrik Höglundb6b29e02018-06-21 14:58:01731 ParamsWithLogging screenshare;
ilnikcb8c1462017-03-09 17:23:30732 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59733 screenshare.screenshare[0] = {true, false, 10};
Ilya Nikolaevskiydda5fdc2019-02-27 09:00:06734 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
Ilya Nikolaevskiyaec663e2019-02-27 11:52:11735 2500000, false, "VP8", 2, 1, 400000,
Ilya Nikolaevskiydda5fdc2019-02-27 09:00:06736 false, false, false, ""};
ilnikcb8c1462017-03-09 17:23:30737 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
738 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01739 ParamsWithLogging screenshare_params_high;
Ilya Nikolaevskiydda5fdc2019-02-27 09:00:06740 screenshare_params_high.video[0] = {
741 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
742 "VP8", 2, 0, 400000, false, false, false, ""};
ilnikcb8c1462017-03-09 17:23:30743 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiydda5fdc2019-02-27 09:00:06744 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
Erik Språng28bb3912018-07-11 14:06:55745 1000000, false, "VP8", 2, 0, 400000,
746 false, false, false, ""};
ilnikcb8c1462017-03-09 17:23:30747
748 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 14:58:01749 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
750 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 07:12:05751 screenshare.ss[0] = {
752 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
753 false};
Patrik Höglundb6b29e02018-06-21 14:58:01754 fixture->RunWithAnalyzer(screenshare);
ilnikcb8c1462017-03-09 17:23:30755}
Oskar Sundbom8bacf252019-01-08 15:40:08756#endif // !defined(WEBRTC_WIN)
Ilya Nikolaevskiyf08dd9d2018-10-09 15:22:15757#endif // !defined(WEBRTC_MAC)
ilnikcb8c1462017-03-09 17:23:30758
Patrik Höglundb6b29e02018-06-21 14:58:01759TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
760 auto fixture = CreateVideoQualityTestFixture();
761 ParamsWithLogging config;
minyue626bc952016-10-31 12:47:02762 config.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 14:06:55763 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
764 1000000, false, "VP8", 2, 1, 400000,
765 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59766 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 12:47:02767 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
768 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01769 fixture->RunWithAnalyzer(config);
ivica028cf482015-07-30 09:15:56770}
771
philipeldd8b0d82018-09-27 09:18:10772TEST_P(GenericDescriptorTest, ScreenshareSlidesVP8_2TL_LossyNet) {
Patrik Höglundb6b29e02018-06-21 14:58:01773 auto fixture = CreateVideoQualityTestFixture();
774 ParamsWithLogging screenshare;
minyue626bc952016-10-31 12:47:02775 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 14:06:55776 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
777 1000000, false, "VP8", 2, 1, 400000,
778 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59779 screenshare.screenshare[0] = {true, false, 10};
philipeldd8b0d82018-09-27 09:18:10780 screenshare.analyzer = {GetTestName("screenshare_slides_lossy_net"), 0.0, 0.0,
Lu Liu6f683242018-09-25 18:48:48781 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24782 screenshare.config->loss_percent = 5;
783 screenshare.config->queue_delay_ms = 200;
784 screenshare.config->link_capacity_kbps = 500;
philipelf638bbc2018-10-04 14:57:12785 screenshare.call.generic_descriptor = GenericDescriptorEnabled();
Patrik Höglundb6b29e02018-06-21 14:58:01786 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 14:10:23787}
788
Patrik Höglundb6b29e02018-06-21 14:58:01789TEST(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
790 auto fixture = CreateVideoQualityTestFixture();
791 ParamsWithLogging screenshare;
minyue626bc952016-10-31 12:47:02792 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 14:06:55793 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
794 1000000, false, "VP8", 2, 1, 400000,
795 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59796 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 12:47:02797 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
798 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24799 screenshare.config->loss_percent = 10;
800 screenshare.config->queue_delay_ms = 200;
801 screenshare.config->link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 14:58:01802 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 14:10:23803}
804
Patrik Höglundb6b29e02018-06-21 14:58:01805TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
806 auto fixture = CreateVideoQualityTestFixture();
807 ParamsWithLogging screenshare;
sprange566e172017-06-08 08:29:15808 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 14:06:55809 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
810 1000000, false, "VP8", 2, 1, 400000,
811 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59812 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 08:29:15813 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
814 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24815 screenshare.config->loss_percent = 5;
816 screenshare.config->link_capacity_kbps = 200;
817 screenshare.config->queue_length_packets = 30;
sprange566e172017-06-08 08:29:15818
Patrik Höglundb6b29e02018-06-21 14:58:01819 fixture->RunWithAnalyzer(screenshare);
sprange566e172017-06-08 08:29:15820}
821
Patrik Höglundb6b29e02018-06-21 14:58:01822TEST(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
823 auto fixture = CreateVideoQualityTestFixture();
824 ParamsWithLogging screenshare;
sprang89c4a7e2017-06-30 20:27:40825 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 14:06:55826 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
827 1000000, false, "VP8", 2, 1, 400000,
828 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59829 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 20:27:40830 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
831 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:24832 screenshare.config->loss_percent = 1;
833 screenshare.config->link_capacity_kbps = 1200;
834 screenshare.config->queue_length_packets = 30;
sprang89c4a7e2017-06-30 20:27:40835
Patrik Höglundb6b29e02018-06-21 14:58:01836 fixture->RunWithAnalyzer(screenshare);
sprang89c4a7e2017-06-30 20:27:40837}
838
Patrik Höglundb6b29e02018-06-21 14:58:01839const ParamsWithLogging::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12840 true, 1280, 720, 30, 800000,
841 2500000, 2500000, false, "VP9", 3,
Niels Möller6aa415e2018-06-07 09:14:13842 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 12:42:54843
Patrik Höglundb6b29e02018-06-21 14:58:01844const ParamsWithLogging::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12845 true, 1280, 720, 30, 800000,
846 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 09:14:13847 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 12:42:54848
Patrik Höglundb6b29e02018-06-21 14:58:01849const ParamsWithLogging::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12850 true, 640, 360, 30, 150000,
851 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 09:14:13852 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 12:42:54853
Patrik Höglundb6b29e02018-06-21 14:58:01854const ParamsWithLogging::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12855 true, 320, 180, 30, 30000,
856 150000, 200000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 09:14:13857 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 12:42:54858
Mirko Bonadei8ef57932018-11-16 13:38:03859#if defined(RTC_ENABLE_VP9)
Patrik Höglundb6b29e02018-06-21 14:58:01860TEST(FullStackTest, ScreenshareSlidesVP9_2SL) {
861 auto fixture = CreateVideoQualityTestFixture();
862 ParamsWithLogging screenshare;
minyue626bc952016-10-31 12:47:02863 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59864 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
865 200000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 09:14:13866 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59867 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 12:47:02868 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
869 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 07:12:05870 screenshare.ss[0] = {
871 std::vector<VideoStream>(), 0, 2, 1, InterLayerPredMode::kOn,
872 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 14:58:01873 fixture->RunWithAnalyzer(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06874}
ilnik2a8c2f52017-02-15 10:23:28875
Patrik Höglundb6b29e02018-06-21 14:58:01876TEST(FullStackTest, VP9SVC_3SL_High) {
877 auto fixture = CreateVideoQualityTestFixture();
878 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 10:23:28879 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59880 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 10:23:28881 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
882 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 14:58:01883
Sergey Silkin57027362018-05-15 07:12:05884 simulcast.ss[0] = {
885 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
886 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 14:58:01887 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 10:23:28888}
889
Patrik Höglundb6b29e02018-06-21 14:58:01890TEST(FullStackTest, VP9SVC_3SL_Medium) {
891 auto fixture = CreateVideoQualityTestFixture();
892 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 10:23:28893 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59894 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 10:23:28895 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
896 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 07:12:05897 simulcast.ss[0] = {
898 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
899 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 14:58:01900 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 10:23:28901}
902
Patrik Höglundb6b29e02018-06-21 14:58:01903TEST(FullStackTest, VP9SVC_3SL_Low) {
904 auto fixture = CreateVideoQualityTestFixture();
905 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 10:23:28906 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:59907 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 10:23:28908 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 07:12:05909 simulcast.ss[0] = {
910 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
911 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 14:58:01912 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 10:23:28913}
Sergey Silkin0643fd62018-05-17 10:50:53914
Sergey Silkin7f978f12018-09-10 12:01:49915// bugs.webrtc.org/9506
916#if !defined(WEBRTC_MAC)
917
Patrik Höglundb6b29e02018-06-21 14:58:01918TEST(FullStackTest, VP9KSVC_3SL_High) {
Sergey Silkine7ce8882018-10-03 16:04:57919 webrtc::test::ScopedFieldTrials override_trials(
920 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 14:58:01921 auto fixture = CreateVideoQualityTestFixture();
922 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 10:50:53923 simulcast.call.send_side_bwe = true;
924 simulcast.video[0] = kSvcVp9Video;
925 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
926 kFullStackTestDurationSecs};
927 simulcast.ss[0] = {
928 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
929 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 14:58:01930 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 10:50:53931}
932
Patrik Höglundb6b29e02018-06-21 14:58:01933TEST(FullStackTest, VP9KSVC_3SL_Medium) {
Sergey Silkine7ce8882018-10-03 16:04:57934 webrtc::test::ScopedFieldTrials override_trials(
935 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 14:58:01936 auto fixture = CreateVideoQualityTestFixture();
937 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 10:50:53938 simulcast.call.send_side_bwe = true;
939 simulcast.video[0] = kSvcVp9Video;
940 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
941 kFullStackTestDurationSecs};
942 simulcast.ss[0] = {
943 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
944 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 14:58:01945 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 10:50:53946}
947
Patrik Höglundb6b29e02018-06-21 14:58:01948TEST(FullStackTest, VP9KSVC_3SL_Low) {
Sergey Silkine7ce8882018-10-03 16:04:57949 webrtc::test::ScopedFieldTrials override_trials(
950 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 14:58:01951 auto fixture = CreateVideoQualityTestFixture();
952 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 10:50:53953 simulcast.call.send_side_bwe = true;
954 simulcast.video[0] = kSvcVp9Video;
955 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
956 kFullStackTestDurationSecs};
957 simulcast.ss[0] = {
958 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
959 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 14:58:01960 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 10:50:53961}
“Michael277a6562018-06-01 19:09:19962
Patrik Höglundb6b29e02018-06-21 14:58:01963TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
Sergey Silkine7ce8882018-10-03 16:04:57964 webrtc::test::ScopedFieldTrials override_trials(
965 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Patrik Höglundb6b29e02018-06-21 14:58:01966 auto fixture = CreateVideoQualityTestFixture();
Niels Möller0e909822018-08-21 15:34:35967 ParamsWithLogging simulcast;
“Michael277a6562018-06-01 19:09:19968 simulcast.call.send_side_bwe = true;
969 simulcast.video[0] = kSvcVp9Video;
970 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
971 kFullStackTestDurationSecs};
972 simulcast.ss[0] = {
Sergey Silkine7ce8882018-10-03 16:04:57973 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
“Michael277a6562018-06-01 19:09:19974 std::vector<SpatialLayer>(), false};
Artem Titovf18b3522018-08-28 14:54:24975 simulcast.config->link_capacity_kbps = 1000;
Sergey Silkine7ce8882018-10-03 16:04:57976 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 14:58:01977 fixture->RunWithAnalyzer(simulcast);
“Michael277a6562018-06-01 19:09:19978}
Erik Språngd3438aa2018-11-08 15:56:43979
980// TODO(webrtc:9722): Remove when experiment is cleaned up.
981TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
982 webrtc::test::ScopedFieldTrials override_trials(
983 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"
984 "WebRTC-LibvpxVp9TrustedRateController/Enabled/"));
985 auto fixture = CreateVideoQualityTestFixture();
986 ParamsWithLogging simulcast;
987 simulcast.call.send_side_bwe = true;
988 simulcast.video[0] = kSvcVp9Video;
989 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
990 0.0, 0.0, kFullStackTestDurationSecs};
991 simulcast.ss[0] = {
992 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
993 std::vector<SpatialLayer>(), false};
994 simulcast.config->link_capacity_kbps = 1000;
995 simulcast.config->queue_delay_ms = 100;
996 fixture->RunWithAnalyzer(simulcast);
997}
Sergey Silkin7f978f12018-09-10 12:01:49998#endif // !defined(WEBRTC_MAC)
999
Mirko Bonadei8ef57932018-11-16 13:38:031000#endif // defined(RTC_ENABLE_VP9)
brandtr93c5d032016-11-30 15:50:071001
ilnik6b826ef2017-06-16 13:53:481002// Android bots can't handle FullHD, so disable the test.
Ilya Nikolaevskiy7e5203f2018-09-10 12:04:501003// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1004#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 13:53:481005#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
1006#else
1007#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
1008#endif
1009
Patrik Höglundb6b29e02018-06-21 14:58:011010TEST(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
1011 auto fixture = CreateVideoQualityTestFixture();
1012 ParamsWithLogging simulcast;
ilnik6b826ef2017-06-16 13:53:481013 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591014 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
1015 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 09:14:131016 2, 400000, false, false, false, "Generator"};
ilnik6b826ef2017-06-16 13:53:481017 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
1018 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241019 simulcast.config->loss_percent = 0;
1020 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 14:58:011021 std::vector<VideoStream> streams = {
1022 VideoQualityTest::DefaultVideoStream(simulcast, 0),
1023 VideoQualityTest::DefaultVideoStream(simulcast, 0),
1024 VideoQualityTest::DefaultVideoStream(simulcast, 0)
1025 };
Sergey Silkin57027362018-05-15 07:12:051026 simulcast.ss[0] = {
1027 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1028 true};
Erik Språngb6b1cac2018-08-09 14:12:541029 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1030 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Patrik Höglundb6b29e02018-06-21 14:58:011031 fixture->RunWithAnalyzer(simulcast);
ilnik6b826ef2017-06-16 13:53:481032}
1033
Patrik Höglundb6b29e02018-06-21 14:58:011034TEST(FullStackTest, SimulcastVP8_3SL_High) {
1035 auto fixture = CreateVideoQualityTestFixture();
1036 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 12:58:531037 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591038 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 10:23:281039 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 12:58:531040 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241041 simulcast.config->loss_percent = 0;
1042 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 14:58:011043 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591044 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 14:58:011045 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591046 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 14:58:011047 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591048 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 12:58:531049
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591050 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 14:58:011051 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1052 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1053 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 07:12:051054 simulcast.ss[0] = {
1055 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1056 false};
Patrik Höglundb6b29e02018-06-21 14:58:011057 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 12:58:531058}
1059
Patrik Höglundb6b29e02018-06-21 14:58:011060TEST(FullStackTest, SimulcastVP8_3SL_Medium) {
1061 auto fixture = CreateVideoQualityTestFixture();
1062 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 12:58:531063 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591064 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 10:23:281065 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 12:58:531066 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241067 simulcast.config->loss_percent = 0;
1068 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 14:58:011069 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591070 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 14:58:011071 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591072 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 14:58:011073 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591074 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 12:58:531075
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591076 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 14:58:011077 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1078 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1079 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 07:12:051080 simulcast.ss[0] = {
1081 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1082 false};
Patrik Höglundb6b29e02018-06-21 14:58:011083 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 12:58:531084}
1085
Patrik Höglundb6b29e02018-06-21 14:58:011086TEST(FullStackTest, SimulcastVP8_3SL_Low) {
1087 auto fixture = CreateVideoQualityTestFixture();
1088 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 12:58:531089 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591090 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 10:23:281091 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 12:58:531092 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241093 simulcast.config->loss_percent = 0;
1094 simulcast.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 14:58:011095 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591096 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 14:58:011097 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591098 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 14:58:011099 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591100 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 12:58:531101
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591102 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 14:58:011103 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1104 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1105 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 07:12:051106 simulcast.ss[0] = {
1107 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1108 false};
Patrik Höglundb6b29e02018-06-21 14:58:011109 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 12:58:531110}
1111
Emircan Uysaler7c03bdc2019-01-16 20:07:561112// This test assumes ideal network conditions with target bandwidth being
1113// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1114// Android32 bots can't handle this high bitrate, so disable test for those.
1115#if defined(WEBRTC_ANDROID)
Emircan Uysaler62f55322019-01-16 22:48:471116#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
Emircan Uysaler7c03bdc2019-01-16 20:07:561117#else
1118#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1119#endif // defined(WEBRTC_ANDROID)
1120TEST(FullStackTest, MAYBE_HighBitrateWithFakeCodec) {
1121 auto fixture = CreateVideoQualityTestFixture();
1122 const int target_bitrate = 100000000;
1123 ParamsWithLogging generator;
1124 generator.call.send_side_bwe = true;
1125 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1126 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1127 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1128 generator.video[0] = {true,
1129 360,
1130 240,
1131 30,
1132 target_bitrate / 2,
1133 target_bitrate,
1134 target_bitrate * 2,
1135 false,
1136 "FakeCodec",
1137 1,
1138 0,
1139 0,
1140 false,
1141 false,
1142 false,
1143 "Generator"};
1144 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1145 kFullStackTestDurationSecs};
1146 fixture->RunWithAnalyzer(generator);
1147}
1148
Patrik Höglundb6b29e02018-06-21 14:58:011149TEST(FullStackTest, LargeRoomVP8_5thumb) {
1150 auto fixture = CreateVideoQualityTestFixture();
1151 ParamsWithLogging large_room;
ilnika014cc52017-03-07 12:21:041152 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591153 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 12:21:041154 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
1155 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241156 large_room.config->loss_percent = 0;
1157 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 14:58:011158 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591159 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 14:58:011160 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591161 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 14:58:011162 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591163 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 12:21:041164
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591165 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 14:58:011166 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1167 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1168 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 07:47:031169 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 07:12:051170 large_room.ss[0] = {
1171 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1172 false};
Patrik Höglundb6b29e02018-06-21 14:58:011173 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 12:21:041174}
1175
oprypin743117f2017-09-15 12:24:241176#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1177// Fails on mobile devices:
ilnikf89a7382017-03-07 14:15:271178// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1179#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 09:17:351180#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 14:15:271181#else
1182#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 09:17:351183#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 14:15:271184#endif
1185
Patrik Höglundb6b29e02018-06-21 14:58:011186TEST(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1187 auto fixture = CreateVideoQualityTestFixture();
1188 ParamsWithLogging large_room;
ilnika014cc52017-03-07 12:21:041189 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591190 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 12:21:041191 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
1192 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241193 large_room.config->loss_percent = 0;
1194 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 14:58:011195 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591196 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 14:58:011197 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591198 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 14:58:011199 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591200 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 12:21:041201
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591202 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 14:58:011203 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1204 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1205 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 07:47:031206 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 07:12:051207 large_room.ss[0] = {
1208 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1209 false};
Patrik Höglundb6b29e02018-06-21 14:58:011210 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 12:21:041211}
1212
Patrik Höglundb6b29e02018-06-21 14:58:011213TEST(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1214 auto fixture = CreateVideoQualityTestFixture();
1215 ParamsWithLogging large_room;
ilnika014cc52017-03-07 12:21:041216 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591217 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 12:21:041218 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
1219 kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241220 large_room.config->loss_percent = 0;
1221 large_room.config->queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 14:58:011222 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591223 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 14:58:011224 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591225 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 14:58:011226 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591227 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 12:21:041228
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591229 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 14:58:011230 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1231 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1232 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 07:47:031233 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 07:12:051234 large_room.ss[0] = {
1235 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1236 false};
Patrik Höglundb6b29e02018-06-21 14:58:011237 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 12:21:041238}
1239
Mirko Bonadeic84f6612019-01-31 11:20:571240INSTANTIATE_TEST_SUITE_P(
1241 FullStackTest,
1242 GenericDescriptorTest,
1243 ::testing::Values("WebRTC-GenericDescriptor/Disabled/",
1244 "WebRTC-GenericDescriptor/Enabled/"));
philipeldd8b0d82018-09-27 09:18:101245
Patrik Höglundb6b29e02018-06-21 14:58:011246class DualStreamsTest : public ::testing::TestWithParam<int> {};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591247
1248// Disable dual video test on mobile device becuase it's too heavy.
Ilya Nikolaevskiyf08dd9d2018-10-09 15:22:151249// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1250#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591251TEST_P(DualStreamsTest,
Ilya Nikolaevskiydda5fdc2019-02-27 09:00:061252 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591253 test::ScopedFieldTrials field_trial(
Erik Språngb65aa012018-09-24 09:35:191254 AppendFieldTrials(std::string(kPacerPushBackExperiment) +
1255 std::string(kScreenshareSimulcastExperiment)));
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591256 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 14:58:011257 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591258
1259 // Screenshare Settings.
1260 dual_streams.screenshare[first_stream] = {true, false, 10};
Ilya Nikolaevskiyaec663e2019-02-27 11:52:111261 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1262 2500000, false, "VP8", 2, 1, 400000,
1263 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591264
Patrik Höglundb6b29e02018-06-21 14:58:011265 ParamsWithLogging screenshare_params_high;
Ilya Nikolaevskiydda5fdc2019-02-27 09:00:061266 screenshare_params_high.video[0] = {
1267 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1268 "VP8", 2, 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591269 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiydda5fdc2019-02-27 09:00:061270 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
Erik Språng28bb3912018-07-11 14:06:551271 1000000, false, "VP8", 2, 0, 400000,
1272 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591273 std::vector<VideoStream> screenhsare_streams = {
Patrik Höglundb6b29e02018-06-21 14:58:011274 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1275 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591276
Sergey Silkin57027362018-05-15 07:12:051277 dual_streams.ss[first_stream] = {
1278 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1279 std::vector<SpatialLayer>(), false};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591280
1281 // Video settings.
1282 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
1283
Patrik Höglundb6b29e02018-06-21 14:58:011284 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591285 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 14:58:011286 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591287 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 14:58:011288 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591289 video_params_low.video[0] = kSimulcastVp8VideoLow;
1290 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 14:58:011291 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1292 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1293 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591294
1295 dual_streams.ss[1 - first_stream] = {
Sergey Silkin57027362018-05-15 07:12:051296 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1297 false};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591298
1299 // Call settings.
1300 dual_streams.call.send_side_bwe = true;
1301 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 17:54:471302 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1303 std::to_string(first_stream);
1304 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241305 dual_streams.config->loss_percent = 1;
1306 dual_streams.config->link_capacity_kbps = 7500;
1307 dual_streams.config->queue_length_packets = 30;
1308 dual_streams.config->queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591309
Patrik Höglundb6b29e02018-06-21 14:58:011310 auto fixture = CreateVideoQualityTestFixture();
1311 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591312}
Ilya Nikolaevskiyf08dd9d2018-10-09 15:22:151313#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1314 // !defined(WEBRTC_MAC)
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591315
1316TEST_P(DualStreamsTest, Conference_Restricted) {
Patrik Höglundb6b29e02018-06-21 14:58:011317 test::ScopedFieldTrials field_trial(
Ilya Nikolaevskiycb960622018-09-04 09:07:311318 AppendFieldTrials(std::string(kPacerPushBackExperiment)));
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591319 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 14:58:011320 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591321
1322 // Screenshare Settings.
1323 dual_streams.screenshare[first_stream] = {true, false, 10};
1324 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1325 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 09:14:131326 2, 400000, false, false, false,
1327 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591328 // Video settings.
1329 dual_streams.video[1 - first_stream] = {
1330 true, 1280, 720, 30, 150000,
1331 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 09:14:131332 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591333
1334 // Call settings.
1335 dual_streams.call.send_side_bwe = true;
1336 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 17:54:471337 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1338 std::to_string(first_stream);
1339 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Artem Titovf18b3522018-08-28 14:54:241340 dual_streams.config->loss_percent = 1;
1341 dual_streams.config->link_capacity_kbps = 5000;
1342 dual_streams.config->queue_length_packets = 30;
1343 dual_streams.config->queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591344
Patrik Höglundb6b29e02018-06-21 14:58:011345 auto fixture = CreateVideoQualityTestFixture();
1346 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 17:02:591347}
1348
Mirko Bonadeic84f6612019-01-31 11:20:571349INSTANTIATE_TEST_SUITE_P(FullStackTest,
1350 DualStreamsTest,
1351 ::testing::Values(0, 1));
ilnika014cc52017-03-07 12:21:041352
pbos@webrtc.orgaf8d5af2013-07-09 08:02:331353} // namespace webrtc