blob: afe1da0f5a98cb149dbe0534118e37e478e5f334 [file] [log] [blame]
Artem Titov137f6c82019-05-17 10:51:15 +02001/*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10#include <memory>
11#include <string>
12#include <utility>
13#include <vector>
14
15#include "absl/memory/memory.h"
16#include "api/test/create_network_emulation_manager.h"
17#include "api/test/create_peerconnection_quality_test_fixture.h"
18#include "api/test/network_emulation_manager.h"
19#include "api/test/peerconnection_quality_test_fixture.h"
20#include "api/test/simulated_network.h"
21#include "call/simulated_network.h"
22#include "media/base/vp9_profile.h"
23#include "modules/video_coding/codecs/vp9/include/vp9.h"
24#include "system_wrappers/include/field_trial.h"
25#include "test/field_trial.h"
26#include "test/gtest.h"
27#include "test/pc/e2e/network_quality_metrics_reporter.h"
28#include "test/testsupport/file_utils.h"
29
30namespace webrtc {
31
32using PeerConfigurer =
33 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer;
34using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
35using VideoConfig =
36 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
37using AudioConfig =
38 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
39using VideoGeneratorType =
40 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoGeneratorType;
Artem Titov39483c62019-07-19 17:03:52 +020041using ScreenShareConfig =
42 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
43using VideoSimulcastConfig =
44 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoSimulcastConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020045
46namespace {
47
48constexpr int kTestDurationSec = 45;
49constexpr char kVp8TrustedRateControllerFieldTrial[] =
50 "WebRTC-LibvpxVp8TrustedRateController/Enabled/";
51
52EmulatedNetworkNode* CreateEmulatedNodeWithConfig(
53 NetworkEmulationManager* emulation,
54 const BuiltInNetworkBehaviorConfig& config) {
55 return emulation->CreateEmulatedNode(
56 absl::make_unique<SimulatedNetwork>(config));
57}
58
59std::pair<EmulatedNetworkManagerInterface*, EmulatedNetworkManagerInterface*>
60CreateTwoNetworkLinks(NetworkEmulationManager* emulation,
61 const BuiltInNetworkBehaviorConfig& config) {
62 auto* alice_node = CreateEmulatedNodeWithConfig(emulation, config);
63 auto* bob_node = CreateEmulatedNodeWithConfig(emulation, config);
64
65 auto* alice_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
66 auto* bob_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
67
68 emulation->CreateRoute(alice_endpoint, {alice_node}, bob_endpoint);
69 emulation->CreateRoute(bob_endpoint, {bob_node}, alice_endpoint);
70
71 return {
72 emulation->CreateEmulatedNetworkManagerInterface({alice_endpoint}),
73 emulation->CreateEmulatedNetworkManagerInterface({bob_endpoint}),
74 };
75}
76
77std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture>
78CreateTestFixture(const std::string& test_case_name,
79 std::pair<EmulatedNetworkManagerInterface*,
80 EmulatedNetworkManagerInterface*> network_links,
81 rtc::FunctionView<void(PeerConfigurer*)> alice_configurer,
82 rtc::FunctionView<void(PeerConfigurer*)> bob_configurer) {
83 auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
84 test_case_name, /*audio_quality_analyzer=*/nullptr,
85 /*video_quality_analyzer=*/nullptr);
86 fixture->AddPeer(network_links.first->network_thread(),
87 network_links.first->network_manager(), alice_configurer);
88 fixture->AddPeer(network_links.second->network_thread(),
89 network_links.second->network_manager(), bob_configurer);
90 fixture->AddQualityMetricsReporter(
91 absl::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
92 network_links.first, network_links.second));
93 return fixture;
94}
95
96// Takes the current active field trials set, and appends some new trials.
97std::string AppendFieldTrials(std::string new_trial_string) {
98 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
99}
100
101std::string ClipNameToClipPath(const char* clip_name) {
102 return test::ResourcePath(clip_name, "yuv");
103}
104
105} // namespace
106
107class PCGenericDescriptorTest : public ::testing::TestWithParam<std::string> {
108 public:
109 PCGenericDescriptorTest()
110 : field_trial_(AppendFieldTrials(GetParam())),
111 generic_descriptor_enabled_(
112 field_trial::IsEnabled("WebRTC-GenericDescriptor")) {}
113
114 std::string GetTestName(std::string base) {
115 if (generic_descriptor_enabled_)
116 base += "_generic_descriptor";
117 return base;
118 }
119
120 private:
121 test::ScopedFieldTrials field_trial_;
122 bool generic_descriptor_enabled_;
123};
124
125#if defined(RTC_ENABLE_VP9)
126TEST(PCFullStackTest, ForemanCifWithoutPacketLossVp9) {
127 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
128 CreateNetworkEmulationManager();
129 auto fixture = CreateTestFixture(
130 "pc_foreman_cif_net_delay_0_0_plr_0_VP9",
131 CreateTwoNetworkLinks(network_emulation_manager.get(),
132 BuiltInNetworkBehaviorConfig()),
133 [](PeerConfigurer* alice) {
134 VideoConfig video(352, 288, 30);
135 video.input_file_name = ClipNameToClipPath("foreman_cif");
136 video.stream_label = "alice-video";
137 alice->AddVideoConfig(std::move(video));
138 },
139 [](PeerConfigurer* bob) {});
140 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
141 run_params.video_codec_name = cricket::kVp9CodecName;
142 run_params.video_codec_required_params = {
143 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}};
144 run_params.use_flex_fec = false;
145 run_params.use_ulp_fec = false;
146 fixture->Run(std::move(run_params));
147}
148
149TEST_P(PCGenericDescriptorTest, ForemanCifPlr5Vp9) {
150 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
151 CreateNetworkEmulationManager();
152 BuiltInNetworkBehaviorConfig config;
153 config.loss_percent = 5;
154 config.queue_delay_ms = 50;
155 auto fixture = CreateTestFixture(
156 GetTestName("pc_foreman_cif_delay_50_0_plr_5_VP9"),
157 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
158 [](PeerConfigurer* alice) {
159 VideoConfig video(352, 288, 30);
160 video.input_file_name = ClipNameToClipPath("foreman_cif");
161 video.stream_label = "alice-video";
162 alice->AddVideoConfig(std::move(video));
163 },
164 [](PeerConfigurer* bob) {});
165 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
166 run_params.video_codec_name = cricket::kVp9CodecName;
167 run_params.video_codec_required_params = {
168 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}};
169 run_params.use_flex_fec = false;
170 run_params.use_ulp_fec = false;
171 fixture->Run(std::move(run_params));
172}
173
Artem Titove731a2e2019-07-02 10:08:17 +0200174// VP9 2nd profile isn't supported on android arm and arm 64.
Artem Titovcecee992019-07-03 11:55:28 +0200175#if (defined(WEBRTC_ANDROID) && \
176 (defined(WEBRTC_ARCH_ARM64) || defined(WEBRTC_ARCH_ARM))) || \
177 (defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64))
Artem Titove731a2e2019-07-02 10:08:17 +0200178#define MAYBE_GeneratorWithoutPacketLossVp9Profile2 \
179 DISABLED_GeneratorWithoutPacketLossVp9Profile2
180#else
181#define MAYBE_GeneratorWithoutPacketLossVp9Profile2 \
182 GeneratorWithoutPacketLossVp9Profile2
183#endif
184TEST(PCFullStackTest, MAYBE_GeneratorWithoutPacketLossVp9Profile2) {
Artem Titov137f6c82019-05-17 10:51:15 +0200185 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
186 CreateNetworkEmulationManager();
187 auto fixture = CreateTestFixture(
188 "pc_generator_net_delay_0_0_plr_0_VP9Profile2",
189 CreateTwoNetworkLinks(network_emulation_manager.get(),
190 BuiltInNetworkBehaviorConfig()),
191 [](PeerConfigurer* alice) {
192 VideoConfig video(352, 288, 30);
193 video.generator = VideoGeneratorType::kI010;
194 video.stream_label = "alice-video";
195 alice->AddVideoConfig(std::move(video));
196 },
197 [](PeerConfigurer* bob) {});
198 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
199 run_params.video_codec_name = cricket::kVp9CodecName;
200 run_params.video_codec_required_params = {
201 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}};
202 run_params.use_flex_fec = false;
203 run_params.use_ulp_fec = false;
204 fixture->Run(std::move(run_params));
205}
206
207/*
208// TODO(bugs.webrtc.org/10639) migrate commented out test, when required
209// functionality will be supported in PeerConnection level framework.
210TEST(PCFullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
211 auto fixture = CreateVideoQualityTestFixture();
212 ParamsWithLogging foreman_cif;
213 foreman_cif.call.send_side_bwe = true;
214 foreman_cif.video[0] = {
215 true, 352, 288, 30,
216 700000, 700000, 700000, false,
217 "multiplex", 1, 0, 0,
218 false, false, false, ClipNameToClipPath("foreman_cif")};
219 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
220 kTestDurationSec};
221 fixture->RunWithAnalyzer(foreman_cif);
222}
223
224TEST(PCFullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
225 auto fixture = CreateVideoQualityTestFixture();
226
227 ParamsWithLogging generator;
228 generator.call.send_side_bwe = true;
229 generator.video[0] = {
230 true, 352, 288, 30, 700000, 700000, 700000, false,
231 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
232 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
233 kTestDurationSec};
234 fixture->RunWithAnalyzer(generator);
235}
236*/
237#endif // defined(RTC_ENABLE_VP9)
238
239TEST(PCFullStackTest, ParisQcifWithoutPacketLoss) {
240 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
241 CreateNetworkEmulationManager();
242 auto fixture = CreateTestFixture(
243 "pc_net_delay_0_0_plr_0",
244 CreateTwoNetworkLinks(network_emulation_manager.get(),
245 BuiltInNetworkBehaviorConfig()),
246 [](PeerConfigurer* alice) {
247 VideoConfig video(176, 144, 30);
248 video.input_file_name = ClipNameToClipPath("paris_qcif");
249 video.stream_label = "alice-video";
250 alice->AddVideoConfig(std::move(video));
251 },
252 [](PeerConfigurer* bob) {});
253 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
254 run_params.video_codec_name = cricket::kVp8CodecName;
255 run_params.use_flex_fec = false;
256 run_params.use_ulp_fec = false;
257 fixture->Run(std::move(run_params));
258}
259
260TEST_P(PCGenericDescriptorTest, ForemanCifWithoutPacketLoss) {
261 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
262 CreateNetworkEmulationManager();
263 auto fixture = CreateTestFixture(
264 GetTestName("pc_foreman_cif_net_delay_0_0_plr_0"),
265 CreateTwoNetworkLinks(network_emulation_manager.get(),
266 BuiltInNetworkBehaviorConfig()),
267 [](PeerConfigurer* alice) {
268 VideoConfig video(352, 288, 30);
269 video.input_file_name = ClipNameToClipPath("foreman_cif");
270 video.stream_label = "alice-video";
271 alice->AddVideoConfig(std::move(video));
272 },
273 [](PeerConfigurer* bob) {});
274 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
275 run_params.video_codec_name = cricket::kVp8CodecName;
276 run_params.use_flex_fec = false;
277 run_params.use_ulp_fec = false;
278 fixture->Run(std::move(run_params));
279}
280
Artem Titov85a9d912019-05-29 14:36:50 +0200281TEST_P(PCGenericDescriptorTest, ForemanCif30kbpsWithoutPacketLoss) {
Artem Titov137f6c82019-05-17 10:51:15 +0200282 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
283 CreateNetworkEmulationManager();
284 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200285 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200286 GetTestName("pc_foreman_cif_30kbps_net_delay_0_0_plr_0"),
Artem Titov137f6c82019-05-17 10:51:15 +0200287 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
288 [](PeerConfigurer* alice) {
289 VideoConfig video(352, 288, 10);
290 video.input_file_name = ClipNameToClipPath("foreman_cif");
291 video.stream_label = "alice-video";
292 alice->AddVideoConfig(std::move(video));
Artem Titov85a9d912019-05-29 14:36:50 +0200293
294 PeerConnectionInterface::BitrateParameters bitrate_params;
295 bitrate_params.min_bitrate_bps = 30000;
296 bitrate_params.current_bitrate_bps = 30000;
297 bitrate_params.max_bitrate_bps = 30000;
298 alice->SetBitrateParameters(bitrate_params);
Artem Titov137f6c82019-05-17 10:51:15 +0200299 },
300 [](PeerConfigurer* bob) {});
301 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
302 run_params.video_codec_name = cricket::kVp8CodecName;
303 run_params.use_flex_fec = false;
304 run_params.use_ulp_fec = false;
305 fixture->Run(std::move(run_params));
306}
307
308// TODO(webrtc:9722): Remove when experiment is cleaned up.
309TEST_P(PCGenericDescriptorTest,
Artem Titov85a9d912019-05-29 14:36:50 +0200310 ForemanCif30kbpsWithoutPacketLossTrustedRateControl) {
Artem Titov137f6c82019-05-17 10:51:15 +0200311 test::ScopedFieldTrials override_field_trials(
312 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
313 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
314 CreateNetworkEmulationManager();
315 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200316 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200317 GetTestName(
318 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_trusted_rate_ctrl"),
Artem Titov137f6c82019-05-17 10:51:15 +0200319 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
320 [](PeerConfigurer* alice) {
321 VideoConfig video(352, 288, 10);
322 video.input_file_name = ClipNameToClipPath("foreman_cif");
323 video.stream_label = "alice-video";
324 alice->AddVideoConfig(std::move(video));
Artem Titov85a9d912019-05-29 14:36:50 +0200325
326 PeerConnectionInterface::BitrateParameters bitrate_params;
327 bitrate_params.min_bitrate_bps = 30000;
328 bitrate_params.current_bitrate_bps = 30000;
329 bitrate_params.max_bitrate_bps = 30000;
330 alice->SetBitrateParameters(bitrate_params);
Artem Titov137f6c82019-05-17 10:51:15 +0200331 },
332 [](PeerConfigurer* bob) {});
333 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
334 run_params.video_codec_name = cricket::kVp8CodecName;
335 run_params.use_flex_fec = false;
336 run_params.use_ulp_fec = false;
337 fixture->Run(std::move(run_params));
338}
339
340// Link capacity below default start rate.
341TEST(PCFullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
342 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
343 CreateNetworkEmulationManager();
344 BuiltInNetworkBehaviorConfig config;
345 config.link_capacity_kbps = 150;
346 auto fixture = CreateTestFixture(
347 "pc_foreman_cif_link_150kbps_net_delay_0_0_plr_0",
348 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
349 [](PeerConfigurer* alice) {
350 VideoConfig video(352, 288, 30);
351 video.input_file_name = ClipNameToClipPath("foreman_cif");
352 video.stream_label = "alice-video";
353 alice->AddVideoConfig(std::move(video));
354 },
355 [](PeerConfigurer* bob) {});
356 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
357 run_params.video_codec_name = cricket::kVp8CodecName;
358 run_params.use_flex_fec = false;
359 run_params.use_ulp_fec = false;
360 fixture->Run(std::move(run_params));
361}
362
Artem Titov65428262019-07-02 16:48:02 +0200363TEST(PCFullStackTest, ForemanCifLink130kbps100msDelay1PercentPacketLossUlpfec) {
364 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
365 CreateNetworkEmulationManager();
366 BuiltInNetworkBehaviorConfig config;
367 config.link_capacity_kbps = 130;
368 config.queue_delay_ms = 100;
369 config.loss_percent = 1;
370 auto fixture = CreateTestFixture(
371 "pc_foreman_cif_link_130kbps_delay100ms_loss1_ulpfec",
372 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
373 [](PeerConfigurer* alice) {
374 VideoConfig video(352, 288, 30);
375 video.input_file_name = ClipNameToClipPath("foreman_cif");
376 video.stream_label = "alice-video";
377 alice->AddVideoConfig(std::move(video));
378 },
379 [](PeerConfigurer* bob) {});
380 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
381 run_params.video_codec_name = cricket::kVp8CodecName;
382 run_params.use_flex_fec = false;
383 run_params.use_ulp_fec = true;
384 fixture->Run(std::move(run_params));
385}
386
387TEST(PCFullStackTest, ForemanCifLink50kbps100msDelay1PercentPacketLossUlpfec) {
388 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
389 CreateNetworkEmulationManager();
390 BuiltInNetworkBehaviorConfig config;
391 config.link_capacity_kbps = 50;
392 config.queue_delay_ms = 100;
393 config.loss_percent = 1;
394 auto fixture = CreateTestFixture(
395 "pc_foreman_cif_link_50kbps_delay100ms_loss1_ulpfec",
396 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
397 [](PeerConfigurer* alice) {
398 VideoConfig video(352, 288, 30);
399 video.input_file_name = ClipNameToClipPath("foreman_cif");
400 video.stream_label = "alice-video";
401 alice->AddVideoConfig(std::move(video));
402 },
403 [](PeerConfigurer* bob) {});
404 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
405 run_params.video_codec_name = cricket::kVp8CodecName;
406 run_params.use_flex_fec = false;
407 run_params.use_ulp_fec = true;
408 fixture->Run(std::move(run_params));
409}
410
Artem Titov137f6c82019-05-17 10:51:15 +0200411// Restricted network and encoder overproducing by 30%.
412TEST(PCFullStackTest, ForemanCifLink150kbpsBadRateController) {
413 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
414 CreateNetworkEmulationManager();
415 BuiltInNetworkBehaviorConfig config;
416 config.link_capacity_kbps = 150;
417 config.queue_length_packets = 30;
418 config.queue_delay_ms = 100;
419 auto fixture = CreateTestFixture(
420 "pc_foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30",
421 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
422 [](PeerConfigurer* alice) {
423 VideoConfig video(352, 288, 30);
424 video.input_file_name = ClipNameToClipPath("foreman_cif");
425 video.stream_label = "alice-video";
426 alice->AddVideoConfig(std::move(video));
427 },
428 [](PeerConfigurer* bob) {});
429 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
430 run_params.video_codec_name = cricket::kVp8CodecName;
431 run_params.use_flex_fec = false;
432 run_params.use_ulp_fec = false;
433 run_params.video_encoder_bitrate_multiplier = 1.30;
434 fixture->Run(std::move(run_params));
435}
436
437// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
438// Packet rate and loss are low enough that loss will happen with ~3s interval.
439// This triggers protection overhead to toggle between zero and non-zero.
440// Link queue is restrictive enough to trigger loss on probes.
441TEST(PCFullStackTest, ForemanCifMediaCapacitySmallLossAndQueue) {
442 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
443 CreateNetworkEmulationManager();
444 BuiltInNetworkBehaviorConfig config;
445 config.link_capacity_kbps = 250;
446 config.queue_length_packets = 10;
447 config.queue_delay_ms = 100;
448 config.loss_percent = 1;
449 auto fixture = CreateTestFixture(
450 "pc_foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
451 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
452 [](PeerConfigurer* alice) {
453 VideoConfig video(352, 288, 30);
454 video.input_file_name = ClipNameToClipPath("foreman_cif");
455 video.stream_label = "alice-video";
456 alice->AddVideoConfig(std::move(video));
457 },
458 [](PeerConfigurer* bob) {});
459 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
460 run_params.video_codec_name = cricket::kVp8CodecName;
461 run_params.use_flex_fec = false;
462 run_params.use_ulp_fec = false;
463 run_params.video_encoder_bitrate_multiplier = 1.30;
464 fixture->Run(std::move(run_params));
465}
466
467TEST_P(PCGenericDescriptorTest, ForemanCifPlr5) {
468 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
469 CreateNetworkEmulationManager();
470 BuiltInNetworkBehaviorConfig config;
471 config.loss_percent = 5;
472 config.queue_delay_ms = 50;
473 auto fixture = CreateTestFixture(
474 GetTestName("pc_foreman_cif_delay_50_0_plr_5"),
475 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
476 [](PeerConfigurer* alice) {
477 VideoConfig video(352, 288, 30);
478 video.input_file_name = ClipNameToClipPath("foreman_cif");
479 video.stream_label = "alice-video";
480 alice->AddVideoConfig(std::move(video));
481 },
482 [](PeerConfigurer* bob) {});
483 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
484 run_params.video_codec_name = cricket::kVp8CodecName;
485 run_params.use_flex_fec = false;
486 run_params.use_ulp_fec = false;
487 fixture->Run(std::move(run_params));
488}
489
490TEST_P(PCGenericDescriptorTest, ForemanCifPlr5Ulpfec) {
491 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
492 CreateNetworkEmulationManager();
493 BuiltInNetworkBehaviorConfig config;
494 config.loss_percent = 5;
495 config.queue_delay_ms = 50;
496 auto fixture = CreateTestFixture(
497 GetTestName("pc_foreman_cif_delay_50_0_plr_5_ulpfec"),
498 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
499 [](PeerConfigurer* alice) {
500 VideoConfig video(352, 288, 30);
501 video.input_file_name = ClipNameToClipPath("foreman_cif");
502 video.stream_label = "alice-video";
503 alice->AddVideoConfig(std::move(video));
504 },
505 [](PeerConfigurer* bob) {});
506 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
507 run_params.video_codec_name = cricket::kVp8CodecName;
508 run_params.use_flex_fec = false;
509 run_params.use_ulp_fec = true;
510 fixture->Run(std::move(run_params));
511}
512
513TEST(PCFullStackTest, ForemanCifPlr5Flexfec) {
514 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
515 CreateNetworkEmulationManager();
516 BuiltInNetworkBehaviorConfig config;
517 config.loss_percent = 5;
518 config.queue_delay_ms = 50;
519 auto fixture = CreateTestFixture(
520 "pc_foreman_cif_delay_50_0_plr_5_flexfec",
521 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
522 [](PeerConfigurer* alice) {
523 VideoConfig video(352, 288, 30);
524 video.input_file_name = ClipNameToClipPath("foreman_cif");
525 video.stream_label = "alice-video";
526 alice->AddVideoConfig(std::move(video));
527 },
528 [](PeerConfigurer* bob) {});
529 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
530 run_params.video_codec_name = cricket::kVp8CodecName;
531 run_params.use_flex_fec = true;
532 run_params.use_ulp_fec = false;
533 fixture->Run(std::move(run_params));
534}
535
536TEST(PCFullStackTest, ForemanCif500kbpsPlr3Flexfec) {
537 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
538 CreateNetworkEmulationManager();
539 BuiltInNetworkBehaviorConfig config;
540 config.loss_percent = 3;
541 config.link_capacity_kbps = 500;
542 config.queue_delay_ms = 50;
543 auto fixture = CreateTestFixture(
544 "pc_foreman_cif_500kbps_delay_50_0_plr_3_flexfec",
545 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
546 [](PeerConfigurer* alice) {
547 VideoConfig video(352, 288, 30);
548 video.input_file_name = ClipNameToClipPath("foreman_cif");
549 video.stream_label = "alice-video";
550 alice->AddVideoConfig(std::move(video));
551 },
552 [](PeerConfigurer* bob) {});
553 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
554 run_params.video_codec_name = cricket::kVp8CodecName;
555 run_params.use_flex_fec = true;
556 run_params.use_ulp_fec = false;
557 fixture->Run(std::move(run_params));
558}
559
560TEST(PCFullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
561 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
562 CreateNetworkEmulationManager();
563 BuiltInNetworkBehaviorConfig config;
564 config.loss_percent = 3;
565 config.link_capacity_kbps = 500;
566 config.queue_delay_ms = 50;
567 auto fixture = CreateTestFixture(
568 "pc_foreman_cif_500kbps_delay_50_0_plr_3_ulpfec",
569 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
570 [](PeerConfigurer* alice) {
571 VideoConfig video(352, 288, 30);
572 video.input_file_name = ClipNameToClipPath("foreman_cif");
573 video.stream_label = "alice-video";
574 alice->AddVideoConfig(std::move(video));
575 },
576 [](PeerConfigurer* bob) {});
577 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
578 run_params.video_codec_name = cricket::kVp8CodecName;
579 run_params.use_flex_fec = false;
580 run_params.use_ulp_fec = true;
581 fixture->Run(std::move(run_params));
582}
583
584#if defined(WEBRTC_USE_H264)
585TEST(PCFullStackTest, ForemanCifWithoutPacketlossH264) {
586 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
587 CreateNetworkEmulationManager();
588 auto fixture = CreateTestFixture(
589 "pc_foreman_cif_net_delay_0_0_plr_0_H264",
590 CreateTwoNetworkLinks(network_emulation_manager.get(),
591 BuiltInNetworkBehaviorConfig()),
592 [](PeerConfigurer* alice) {
593 VideoConfig video(352, 288, 30);
594 video.input_file_name = ClipNameToClipPath("foreman_cif");
595 video.stream_label = "alice-video";
596 alice->AddVideoConfig(std::move(video));
597 },
598 [](PeerConfigurer* bob) {});
599 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
600 run_params.video_codec_name = cricket::kH264CodecName;
601 run_params.use_flex_fec = false;
602 run_params.use_ulp_fec = false;
603 fixture->Run(std::move(run_params));
604}
605
Artem Titov85a9d912019-05-29 14:36:50 +0200606TEST(PCFullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200607 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
608 CreateNetworkEmulationManager();
609 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200610 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200611 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_H264",
Artem Titov137f6c82019-05-17 10:51:15 +0200612 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
613 [](PeerConfigurer* alice) {
614 VideoConfig video(352, 288, 10);
615 video.input_file_name = ClipNameToClipPath("foreman_cif");
616 video.stream_label = "alice-video";
617 alice->AddVideoConfig(std::move(video));
Artem Titov85a9d912019-05-29 14:36:50 +0200618
619 PeerConnectionInterface::BitrateParameters bitrate_params;
620 bitrate_params.min_bitrate_bps = 30000;
621 bitrate_params.current_bitrate_bps = 30000;
622 bitrate_params.max_bitrate_bps = 30000;
623 alice->SetBitrateParameters(bitrate_params);
Artem Titov137f6c82019-05-17 10:51:15 +0200624 },
625 [](PeerConfigurer* bob) {});
626 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
627 run_params.video_codec_name = cricket::kH264CodecName;
628 run_params.use_flex_fec = false;
629 run_params.use_ulp_fec = false;
630 fixture->Run(std::move(run_params));
631}
632
633TEST_P(PCGenericDescriptorTest, ForemanCifPlr5H264) {
634 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
635 CreateNetworkEmulationManager();
636 BuiltInNetworkBehaviorConfig config;
637 config.loss_percent = 5;
638 config.queue_delay_ms = 50;
639 auto fixture = CreateTestFixture(
640 GetTestName("pc_foreman_cif_delay_50_0_plr_5_H264"),
641 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
642 [](PeerConfigurer* alice) {
643 VideoConfig video(352, 288, 30);
644 video.input_file_name = ClipNameToClipPath("foreman_cif");
645 video.stream_label = "alice-video";
646 alice->AddVideoConfig(std::move(video));
647 },
648 [](PeerConfigurer* bob) {});
649 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
650 run_params.video_codec_name = cricket::kH264CodecName;
651 run_params.use_flex_fec = false;
652 run_params.use_ulp_fec = false;
653 fixture->Run(std::move(run_params));
654}
655
656TEST(PCFullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
657 test::ScopedFieldTrials override_field_trials(
658 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
659
660 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
661 CreateNetworkEmulationManager();
662 BuiltInNetworkBehaviorConfig config;
663 config.loss_percent = 5;
664 config.queue_delay_ms = 50;
665 auto fixture = CreateTestFixture(
666 "pc_foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr",
667 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
668 [](PeerConfigurer* alice) {
669 VideoConfig video(352, 288, 30);
670 video.input_file_name = ClipNameToClipPath("foreman_cif");
671 video.stream_label = "alice-video";
672 alice->AddVideoConfig(std::move(video));
673 },
674 [](PeerConfigurer* bob) {});
675 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
676 run_params.video_codec_name = cricket::kH264CodecName;
677 run_params.use_flex_fec = false;
678 run_params.use_ulp_fec = false;
679 fixture->Run(std::move(run_params));
680}
681
682TEST(PCFullStackTest, ForemanCifPlr5H264Flexfec) {
683 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
684 CreateNetworkEmulationManager();
685 BuiltInNetworkBehaviorConfig config;
686 config.loss_percent = 5;
687 config.queue_delay_ms = 50;
688 auto fixture = CreateTestFixture(
689 "pc_foreman_cif_delay_50_0_plr_5_H264_flexfec",
690 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
691 [](PeerConfigurer* alice) {
692 VideoConfig video(352, 288, 30);
693 video.input_file_name = ClipNameToClipPath("foreman_cif");
694 video.stream_label = "alice-video";
695 alice->AddVideoConfig(std::move(video));
696 },
697 [](PeerConfigurer* bob) {});
698 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
699 run_params.video_codec_name = cricket::kH264CodecName;
700 run_params.use_flex_fec = true;
701 run_params.use_ulp_fec = false;
702 fixture->Run(std::move(run_params));
703}
704
705// Ulpfec with H264 is an unsupported combination, so this test is only useful
706// for debugging. It is therefore disabled by default.
707TEST(PCFullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
708 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
709 CreateNetworkEmulationManager();
710 BuiltInNetworkBehaviorConfig config;
711 config.loss_percent = 5;
712 config.queue_delay_ms = 50;
713 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200714 "pc_foreman_cif_delay_50_0_plr_5_H264_ulpfec",
Artem Titov137f6c82019-05-17 10:51:15 +0200715 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
716 [](PeerConfigurer* alice) {
717 VideoConfig video(352, 288, 30);
718 video.input_file_name = ClipNameToClipPath("foreman_cif");
719 video.stream_label = "alice-video";
720 alice->AddVideoConfig(std::move(video));
721 },
722 [](PeerConfigurer* bob) {});
723 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
724 run_params.video_codec_name = cricket::kH264CodecName;
725 run_params.use_flex_fec = false;
726 run_params.use_ulp_fec = true;
727 fixture->Run(std::move(run_params));
728}
729#endif // defined(WEBRTC_USE_H264)
730
731TEST(PCFullStackTest, ForemanCif500kbps) {
732 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
733 CreateNetworkEmulationManager();
734 BuiltInNetworkBehaviorConfig config;
735 config.queue_length_packets = 0;
736 config.queue_delay_ms = 0;
737 config.link_capacity_kbps = 500;
738 auto fixture = CreateTestFixture(
739 "pc_foreman_cif_500kbps",
740 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
741 [](PeerConfigurer* alice) {
742 VideoConfig video(352, 288, 30);
743 video.input_file_name = ClipNameToClipPath("foreman_cif");
744 video.stream_label = "alice-video";
745 alice->AddVideoConfig(std::move(video));
746 },
747 [](PeerConfigurer* bob) {});
748 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
749 run_params.video_codec_name = cricket::kVp8CodecName;
750 run_params.use_flex_fec = false;
751 run_params.use_ulp_fec = false;
752 fixture->Run(std::move(run_params));
753}
754
755TEST(PCFullStackTest, ForemanCif500kbpsLimitedQueue) {
756 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
757 CreateNetworkEmulationManager();
758 BuiltInNetworkBehaviorConfig config;
759 config.queue_length_packets = 32;
760 config.queue_delay_ms = 0;
761 config.link_capacity_kbps = 500;
762 auto fixture = CreateTestFixture(
763 "pc_foreman_cif_500kbps_32pkts_queue",
764 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
765 [](PeerConfigurer* alice) {
766 VideoConfig video(352, 288, 30);
767 video.input_file_name = ClipNameToClipPath("foreman_cif");
768 video.stream_label = "alice-video";
769 alice->AddVideoConfig(std::move(video));
770 },
771 [](PeerConfigurer* bob) {});
772 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
773 run_params.video_codec_name = cricket::kVp8CodecName;
774 run_params.use_flex_fec = false;
775 run_params.use_ulp_fec = false;
776 fixture->Run(std::move(run_params));
777}
778
779TEST(PCFullStackTest, ForemanCif500kbps100ms) {
780 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
781 CreateNetworkEmulationManager();
782 BuiltInNetworkBehaviorConfig config;
783 config.queue_length_packets = 0;
784 config.queue_delay_ms = 100;
785 config.link_capacity_kbps = 500;
786 auto fixture = CreateTestFixture(
787 "pc_foreman_cif_500kbps_100ms",
788 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
789 [](PeerConfigurer* alice) {
790 VideoConfig video(352, 288, 30);
791 video.input_file_name = ClipNameToClipPath("foreman_cif");
792 video.stream_label = "alice-video";
793 alice->AddVideoConfig(std::move(video));
794 },
795 [](PeerConfigurer* bob) {});
796 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
797 run_params.video_codec_name = cricket::kVp8CodecName;
798 run_params.use_flex_fec = false;
799 run_params.use_ulp_fec = false;
800 fixture->Run(std::move(run_params));
801}
802
803TEST_P(PCGenericDescriptorTest, ForemanCif500kbps100msLimitedQueue) {
804 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
805 CreateNetworkEmulationManager();
806 BuiltInNetworkBehaviorConfig config;
807 config.queue_length_packets = 32;
808 config.queue_delay_ms = 100;
809 config.link_capacity_kbps = 500;
810 auto fixture = CreateTestFixture(
811 GetTestName("pc_foreman_cif_500kbps_100ms_32pkts_queue"),
812 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
813 [](PeerConfigurer* alice) {
814 VideoConfig video(352, 288, 30);
815 video.input_file_name = ClipNameToClipPath("foreman_cif");
816 video.stream_label = "alice-video";
817 alice->AddVideoConfig(std::move(video));
818 },
819 [](PeerConfigurer* bob) {});
820 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
821 run_params.video_codec_name = cricket::kVp8CodecName;
822 run_params.use_flex_fec = false;
823 run_params.use_ulp_fec = false;
824 fixture->Run(std::move(run_params));
825}
826
827/*
828// TODO(bugs.webrtc.org/10639) we need to disable send side bwe, but it isn't
Artem Titov39483c62019-07-19 17:03:52 +0200829// supported in PC level framework.
Artem Titov137f6c82019-05-17 10:51:15 +0200830TEST(PCFullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
831 auto fixture = CreateVideoQualityTestFixture();
832 ParamsWithLogging foreman_cif;
833 foreman_cif.call.send_side_bwe = false;
834 foreman_cif.video[0] = {
835 true, 352, 288, 30,
836 30000, 500000, 2000000, false,
837 "VP8", 1, 0, 0,
838 false, false, true, ClipNameToClipPath("foreman_cif")};
839 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
840 0.0, 0.0, kTestDurationSec};
841 foreman_cif.config->queue_length_packets = 32;
842 foreman_cif.config->queue_delay_ms = 100;
843 foreman_cif.config->link_capacity_kbps = 500;
844 fixture->RunWithAnalyzer(foreman_cif);
845}
846*/
847
848TEST(PCFullStackTest, ForemanCif1000kbps100msLimitedQueue) {
849 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
850 CreateNetworkEmulationManager();
851 BuiltInNetworkBehaviorConfig config;
852 config.queue_length_packets = 32;
853 config.queue_delay_ms = 100;
854 config.link_capacity_kbps = 1000;
855 auto fixture = CreateTestFixture(
856 "pc_foreman_cif_1000kbps_100ms_32pkts_queue",
857 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
858 [](PeerConfigurer* alice) {
859 VideoConfig video(352, 288, 30);
860 video.input_file_name = ClipNameToClipPath("foreman_cif");
861 video.stream_label = "alice-video";
862 alice->AddVideoConfig(std::move(video));
863 },
864 [](PeerConfigurer* bob) {});
865 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
866 run_params.video_codec_name = cricket::kVp8CodecName;
867 run_params.use_flex_fec = false;
868 run_params.use_ulp_fec = false;
869 fixture->Run(std::move(run_params));
870}
871
872// TODO(sprang): Remove this if we have the similar ModerateLimits below?
873TEST(PCFullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
874 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
875 CreateNetworkEmulationManager();
876 BuiltInNetworkBehaviorConfig config;
877 config.queue_length_packets = 32;
878 config.queue_delay_ms = 100;
879 config.link_capacity_kbps = 2000;
880 auto fixture = CreateTestFixture(
881 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue",
882 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
883 [](PeerConfigurer* alice) {
884 VideoConfig video(1280, 720, 50);
885 video.input_file_name =
886 ClipNameToClipPath("ConferenceMotion_1280_720_50");
887 video.stream_label = "alice-video";
888 alice->AddVideoConfig(std::move(video));
889 },
890 [](PeerConfigurer* bob) {});
891 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
892 run_params.video_codec_name = cricket::kVp8CodecName;
893 run_params.use_flex_fec = false;
894 run_params.use_ulp_fec = false;
895 fixture->Run(std::move(run_params));
896}
897
898// TODO(webrtc:9722): Remove when experiment is cleaned up.
899TEST(PCFullStackTest, ConferenceMotionHd1TLModerateLimitsWhitelistVp8) {
900 test::ScopedFieldTrials override_field_trials(
901 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
902 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
903 CreateNetworkEmulationManager();
904 BuiltInNetworkBehaviorConfig config;
905 config.queue_length_packets = 50;
906 config.loss_percent = 3;
907 config.queue_delay_ms = 100;
908 config.link_capacity_kbps = 2000;
909 auto fixture = CreateTestFixture(
910 "pc_conference_motion_hd_1tl_moderate_limits_trusted_rate_ctrl",
911 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
912 [](PeerConfigurer* alice) {
913 VideoConfig video(1280, 720, 50);
914 video.input_file_name =
915 ClipNameToClipPath("ConferenceMotion_1280_720_50");
916 video.stream_label = "alice-video";
917 alice->AddVideoConfig(std::move(video));
918 },
919 [](PeerConfigurer* bob) {});
920 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
921 run_params.video_codec_name = cricket::kVp8CodecName;
922 run_params.use_flex_fec = false;
923 run_params.use_ulp_fec = false;
924 fixture->Run(std::move(run_params));
925}
926
927/*
928// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
929TEST_P(PCGenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
930 auto fixture = CreateVideoQualityTestFixture();
931 ParamsWithLogging conf_motion_hd;
932 conf_motion_hd.call.send_side_bwe = true;
933 conf_motion_hd.video[0] = {
934 true, 1280,
935 720, 50,
936 30000, 3000000,
937 3000000, false,
938 "VP8", 2,
939 -1, 0,
940 false, false,
941 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
942 conf_motion_hd.analyzer = {
943 GetTestName("conference_motion_hd_2tl_moderate_limits"), 0.0, 0.0,
944 kTestDurationSec};
945 conf_motion_hd.config->queue_length_packets = 50;
946 conf_motion_hd.config->loss_percent = 3;
947 conf_motion_hd.config->queue_delay_ms = 100;
948 conf_motion_hd.config->link_capacity_kbps = 2000;
949 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
950 fixture->RunWithAnalyzer(conf_motion_hd);
951}
952
953// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
954TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimits) {
955 auto fixture = CreateVideoQualityTestFixture();
956 ParamsWithLogging conf_motion_hd;
957 conf_motion_hd.call.send_side_bwe = true;
958 conf_motion_hd.video[0] = {
959 true, 1280,
960 720, 50,
961 30000, 3000000,
962 3000000, false,
963 "VP8", 3,
964 -1, 0,
965 false, false,
966 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
967 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
968 0.0, kTestDurationSec};
969 conf_motion_hd.config->queue_length_packets = 50;
970 conf_motion_hd.config->loss_percent = 3;
971 conf_motion_hd.config->queue_delay_ms = 100;
972 conf_motion_hd.config->link_capacity_kbps = 2000;
973 fixture->RunWithAnalyzer(conf_motion_hd);
974}
975
976// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
977TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
978 auto fixture = CreateVideoQualityTestFixture();
979 ParamsWithLogging conf_motion_hd;
980 conf_motion_hd.call.send_side_bwe = true;
981 conf_motion_hd.video[0] = {
982 true, 1280,
983 720, 50,
984 30000, 3000000,
985 3000000, false,
986 "VP8", 4,
987 -1, 0,
988 false, false,
989 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
990 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
991 0.0, kTestDurationSec};
992 conf_motion_hd.config->queue_length_packets = 50;
993 conf_motion_hd.config->loss_percent = 3;
994 conf_motion_hd.config->queue_delay_ms = 100;
995 conf_motion_hd.config->link_capacity_kbps = 2000;
996 fixture->RunWithAnalyzer(conf_motion_hd);
997}
998
999// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1000TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
1001 test::ScopedFieldTrials field_trial(
1002 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
1003 auto fixture = CreateVideoQualityTestFixture();
1004 ParamsWithLogging conf_motion_hd;
1005 conf_motion_hd.call.send_side_bwe = true;
1006 conf_motion_hd.video[0] = {
1007 true, 1280,
1008 720, 50,
1009 30000, 3000000,
1010 3000000, false,
1011 "VP8", 3,
1012 -1, 0,
1013 false, false,
1014 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1015 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
1016 0.0, 0.0, kTestDurationSec};
1017 conf_motion_hd.config->queue_length_packets = 50;
1018 conf_motion_hd.config->loss_percent = 3;
1019 conf_motion_hd.config->queue_delay_ms = 100;
1020 conf_motion_hd.config->link_capacity_kbps = 2000;
1021 fixture->RunWithAnalyzer(conf_motion_hd);
1022}
1023
1024// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1025TEST(PCFullStackTest,
1026 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
1027 auto fixture = CreateVideoQualityTestFixture();
1028 test::ScopedFieldTrials field_trial(
1029 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
1030 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
1031 ParamsWithLogging conf_motion_hd;
1032 conf_motion_hd.call.send_side_bwe = true;
1033 conf_motion_hd.video[0] = {
1034 true, 1280,
1035 720, 50,
1036 30000, 3000000,
1037 3000000, false,
1038 "VP8", 3,
1039 -1, 0,
1040 false, false,
1041 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1042 conf_motion_hd.analyzer = {
1043 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
1044 kTestDurationSec};
1045 conf_motion_hd.config->queue_length_packets = 50;
1046 conf_motion_hd.config->loss_percent = 3;
1047 conf_motion_hd.config->queue_delay_ms = 100;
1048 conf_motion_hd.config->link_capacity_kbps = 2000;
1049 fixture->RunWithAnalyzer(conf_motion_hd);
1050}
1051*/
1052
1053#if defined(RTC_ENABLE_VP9)
1054TEST(PCFullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
1055 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1056 CreateNetworkEmulationManager();
1057 BuiltInNetworkBehaviorConfig config;
1058 config.queue_length_packets = 32;
1059 config.queue_delay_ms = 100;
1060 config.link_capacity_kbps = 2000;
1061 auto fixture = CreateTestFixture(
1062 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9",
1063 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1064 [](PeerConfigurer* alice) {
1065 VideoConfig video(1280, 720, 50);
1066 video.input_file_name =
1067 ClipNameToClipPath("ConferenceMotion_1280_720_50");
1068 video.stream_label = "alice-video";
1069 alice->AddVideoConfig(std::move(video));
1070 },
1071 [](PeerConfigurer* bob) {});
1072 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1073 run_params.video_codec_name = cricket::kVp9CodecName;
1074 run_params.video_codec_required_params = {
1075 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}};
1076 run_params.use_flex_fec = false;
1077 run_params.use_ulp_fec = false;
1078 fixture->Run(std::move(run_params));
1079}
1080#endif
1081
Artem Titov39483c62019-07-19 17:03:52 +02001082TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_NoConferenceMode) {
1083 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1084 CreateNetworkEmulationManager();
1085 auto fixture = CreateTestFixture(
1086 "pc_screenshare_slides_no_conference_mode",
1087 CreateTwoNetworkLinks(network_emulation_manager.get(),
1088 BuiltInNetworkBehaviorConfig()),
1089 [](PeerConfigurer* alice) {
1090 VideoConfig video(1850, 1110, 5);
1091 video.screen_share_config = ScreenShareConfig(TimeDelta::seconds(10));
1092 video.stream_label = "alice-video";
1093 alice->AddVideoConfig(std::move(video));
1094 },
1095 [](PeerConfigurer* bob) {});
1096 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1097 run_params.video_codec_name = cricket::kVp8CodecName;
1098 run_params.use_flex_fec = false;
1099 run_params.use_ulp_fec = false;
1100 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001101}
1102
Artem Titov39483c62019-07-19 17:03:52 +02001103TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL) {
1104 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1105 CreateNetworkEmulationManager();
1106 auto fixture = CreateTestFixture(
1107 "pc_screenshare_slides",
1108 CreateTwoNetworkLinks(network_emulation_manager.get(),
1109 BuiltInNetworkBehaviorConfig()),
1110 [](PeerConfigurer* alice) {
1111 VideoConfig video(1850, 1110, 5);
1112 video.screen_share_config = ScreenShareConfig(TimeDelta::seconds(10));
1113 video.stream_label = "alice-video";
1114 alice->AddVideoConfig(std::move(video));
1115 },
1116 [](PeerConfigurer* bob) {});
1117 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1118 run_params.video_codec_name = cricket::kVp8CodecName;
1119 run_params.use_flex_fec = false;
1120 run_params.use_ulp_fec = false;
1121 run_params.use_conference_mode = true;
1122 fixture->Run(std::move(run_params));
1123}
1124
1125// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1126#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1127TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_NoConferenceMode) {
1128 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1129 CreateNetworkEmulationManager();
1130 auto fixture = CreateTestFixture(
1131 "pc_screenshare_slides_simulcast_no_conference_mode",
1132 CreateTwoNetworkLinks(network_emulation_manager.get(),
1133 BuiltInNetworkBehaviorConfig()),
1134 [](PeerConfigurer* alice) {
1135 VideoConfig video(1850, 1110, 60);
1136 video.screen_share_config = ScreenShareConfig(TimeDelta::seconds(10));
1137 video.simulcast_config = VideoSimulcastConfig(2, 0);
1138 video.stream_label = "alice-video";
1139 alice->AddVideoConfig(std::move(video));
1140 },
1141 [](PeerConfigurer* bob) {});
1142 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1143 run_params.video_codec_name = cricket::kVp8CodecName;
1144 run_params.use_flex_fec = false;
1145 run_params.use_ulp_fec = false;
1146 fixture->Run(std::move(run_params));
1147}
1148
1149TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast) {
1150 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1151 CreateNetworkEmulationManager();
1152 auto fixture = CreateTestFixture(
1153 "pc_screenshare_slides_simulcast",
1154 CreateTwoNetworkLinks(network_emulation_manager.get(),
1155 BuiltInNetworkBehaviorConfig()),
1156 [](PeerConfigurer* alice) {
1157 VideoConfig video(1850, 1110, 60);
1158 video.screen_share_config = ScreenShareConfig(TimeDelta::seconds(10));
1159 video.simulcast_config = VideoSimulcastConfig(2, 0);
1160 video.stream_label = "alice-video";
1161 alice->AddVideoConfig(std::move(video));
1162 },
1163 [](PeerConfigurer* bob) {});
1164 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1165 run_params.video_codec_name = cricket::kVp8CodecName;
1166 run_params.use_flex_fec = false;
1167 run_params.use_ulp_fec = false;
1168 run_params.use_conference_mode = true;
1169 fixture->Run(std::move(run_params));
1170}
1171#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1172
1173/*
Artem Titov137f6c82019-05-17 10:51:15 +02001174#if !defined(WEBRTC_MAC)
Artem Titov137f6c82019-05-17 10:51:15 +02001175// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1176#if !defined(WEBRTC_WIN)
1177const char kScreenshareSimulcastVariableFramerateExperiment[] =
Artem Titov137f6c82019-05-17 10:51:15 +02001178 "WebRTC-VP8VariableFramerateScreenshare/"
1179 "Enabled,min_fps:5.0,min_qp:15,undershoot:30/";
1180// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Artem Titov137f6c82019-05-17 10:51:15 +02001181TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_Variable_Framerate) {
1182 test::ScopedFieldTrials field_trial(
1183 AppendFieldTrials(kScreenshareSimulcastVariableFramerateExperiment));
1184 auto fixture = CreateVideoQualityTestFixture();
1185 ParamsWithLogging screenshare;
1186 screenshare.call.send_side_bwe = true;
1187 screenshare.screenshare[0] = {true, false, 10};
1188 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1189 2500000, false, "VP8", 2, 1, 400000,
1190 false, false, false, ""};
1191 screenshare.analyzer = {"screenshare_slides_simulcast_variable_framerate",
1192 0.0, 0.0, kTestDurationSec};
1193 ParamsWithLogging screenshare_params_high;
1194 screenshare_params_high.video[0] = {
1195 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1196 "VP8", 2, 0, 400000, false, false, false, ""};
1197 VideoQualityTest::Params screenshare_params_low;
1198 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1199 1000000, false, "VP8", 2, 0, 400000,
1200 false, false, false, ""};
1201
1202 std::vector<VideoStream> streams = {
1203 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1204 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1205 screenshare.ss[0] = {
1206 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1207 false};
1208 fixture->RunWithAnalyzer(screenshare);
1209}
1210
1211// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1212TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Artem Titov137f6c82019-05-17 10:51:15 +02001213 auto fixture = CreateVideoQualityTestFixture();
1214 ParamsWithLogging screenshare;
1215 screenshare.call.send_side_bwe = true;
1216 screenshare.screenshare[0] = {true, false, 10};
1217 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1218 2500000, false, "VP8", 2, 1, 400000,
1219 false, false, false, ""};
1220 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
1221 kTestDurationSec};
1222 VideoQualityTest::Params screenshare_params_high;
1223 screenshare_params_high.video[0] = {
1224 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1225 "VP8", 2, 0, 400000, false, false, false, ""};
1226 VideoQualityTest::Params screenshare_params_low;
1227 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1228 1000000, false, "VP8", 2, 0, 400000,
1229 false, false, false, ""};
1230
1231 std::vector<VideoStream> streams = {
1232 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1233 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1234 screenshare.ss[0] = {
1235 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1236 false};
1237 fixture->RunWithAnalyzer(screenshare);
1238}
1239
1240#endif // !defined(WEBRTC_WIN)
1241#endif // !defined(WEBRTC_MAC)
1242
1243// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1244TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
1245 auto fixture = CreateVideoQualityTestFixture();
1246 ParamsWithLogging config;
1247 config.call.send_side_bwe = true;
1248 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
1249 1000000, false, "VP8", 2, 1, 400000,
1250 false, false, false, ""};
1251 config.screenshare[0] = {true, false, 10, 2};
1252 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
1253 kTestDurationSec};
1254 fixture->RunWithAnalyzer(config);
1255}
1256
1257// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1258TEST_P(PCGenericDescriptorTest, ScreenshareSlidesVP8_2TL_LossyNet) {
1259 auto fixture = CreateVideoQualityTestFixture();
1260 ParamsWithLogging screenshare;
1261 screenshare.call.send_side_bwe = true;
1262 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1263 1000000, false, "VP8", 2, 1, 400000,
1264 false, false, false, ""};
1265 screenshare.screenshare[0] = {true, false, 10};
1266 screenshare.analyzer = {GetTestName("screenshare_slides_lossy_net"), 0.0, 0.0,
1267 kTestDurationSec};
1268 screenshare.config->loss_percent = 5;
1269 screenshare.config->queue_delay_ms = 200;
1270 screenshare.config->link_capacity_kbps = 500;
1271 screenshare.call.generic_descriptor = GenericDescriptorEnabled();
1272 fixture->RunWithAnalyzer(screenshare);
1273}
1274
1275// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1276TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
1277 auto fixture = CreateVideoQualityTestFixture();
1278 ParamsWithLogging screenshare;
1279 screenshare.call.send_side_bwe = true;
1280 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1281 1000000, false, "VP8", 2, 1, 400000,
1282 false, false, false, ""};
1283 screenshare.screenshare[0] = {true, false, 10};
1284 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
1285 kTestDurationSec};
1286 screenshare.config->loss_percent = 10;
1287 screenshare.config->queue_delay_ms = 200;
1288 screenshare.config->link_capacity_kbps = 500;
1289 fixture->RunWithAnalyzer(screenshare);
1290}
1291
1292// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1293TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
1294 auto fixture = CreateVideoQualityTestFixture();
1295 ParamsWithLogging screenshare;
1296 screenshare.call.send_side_bwe = true;
1297 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1298 1000000, false, "VP8", 2, 1, 400000,
1299 false, false, false, ""};
1300 screenshare.screenshare[0] = {true, false, 10};
1301 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
1302 kTestDurationSec};
1303 screenshare.config->loss_percent = 5;
1304 screenshare.config->link_capacity_kbps = 200;
1305 screenshare.config->queue_length_packets = 30;
1306
1307 fixture->RunWithAnalyzer(screenshare);
1308}
1309
1310// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1311TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
1312 auto fixture = CreateVideoQualityTestFixture();
1313 ParamsWithLogging screenshare;
1314 screenshare.call.send_side_bwe = true;
1315 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1316 1000000, false, "VP8", 2, 1, 400000,
1317 false, false, false, ""};
1318 screenshare.screenshare[0] = {true, false, 10};
1319 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1320 kTestDurationSec};
1321 screenshare.config->loss_percent = 1;
1322 screenshare.config->link_capacity_kbps = 1200;
1323 screenshare.config->queue_length_packets = 30;
1324
1325 fixture->RunWithAnalyzer(screenshare);
1326}
1327
1328namespace {
1329// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1330// Since ParamsWithLogging::Video is not trivially destructible, we can't
1331// store these structs as const globals.
1332ParamsWithLogging::Video SvcVp9Video() {
1333 return ParamsWithLogging::Video{
1334 true, 1280,
1335 720, 30,
1336 800000, 2500000,
1337 2500000, false,
1338 "VP9", 3,
1339 2, 400000,
1340 false, false,
1341 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1342}
1343
1344ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1345 return ParamsWithLogging::Video{
1346 true, 1280,
1347 720, 30,
1348 800000, 2500000,
1349 2500000, false,
1350 "VP8", 3,
1351 2, 400000,
1352 false, false,
1353 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1354}
1355
1356ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1357 return ParamsWithLogging::Video{
1358 true, 640,
1359 360, 30,
1360 150000, 500000,
1361 700000, false,
1362 "VP8", 3,
1363 2, 400000,
1364 false, false,
1365 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1366}
1367
1368ParamsWithLogging::Video SimulcastVp8VideoLow() {
1369 return ParamsWithLogging::Video{
1370 true, 320,
1371 180, 30,
1372 30000, 150000,
1373 200000, false,
1374 "VP8", 3,
1375 2, 400000,
1376 false, false,
1377 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1378}
1379} // namespace
Artem Titov733a7812019-07-24 14:53:15 +02001380*/
Artem Titov137f6c82019-05-17 10:51:15 +02001381
1382#if defined(RTC_ENABLE_VP9)
1383
Artem Titov137f6c82019-05-17 10:51:15 +02001384TEST(PCFullStackTest, ScreenshareSlidesVP9_3SL_High_Fps) {
Artem Titov733a7812019-07-24 14:53:15 +02001385 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1386 CreateNetworkEmulationManager();
1387 auto fixture = CreateTestFixture(
1388 "pc_screenshare_slides_vp9_3sl_high_fps",
1389 CreateTwoNetworkLinks(network_emulation_manager.get(),
1390 BuiltInNetworkBehaviorConfig()),
1391 [](PeerConfigurer* alice) {
1392 VideoConfig video(1850, 1110, 30);
1393 video.stream_label = "alice-video";
1394 video.screen_share_config = ScreenShareConfig(TimeDelta::seconds(10));
1395 video.simulcast_config = VideoSimulcastConfig(3, 2);
1396 alice->AddVideoConfig(std::move(video));
1397 },
1398 [](PeerConfigurer* bob) {});
1399 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1400 run_params.video_codec_name = cricket::kVp9CodecName;
1401 run_params.video_codec_required_params = {
1402 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}};
1403 run_params.use_flex_fec = false;
1404 run_params.use_ulp_fec = false;
1405 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001406}
1407
Artem Titov137f6c82019-05-17 10:51:15 +02001408TEST(PCFullStackTest, ScreenshareSlidesVP9_3SL_Variable_Fps) {
1409 webrtc::test::ScopedFieldTrials override_trials(
1410 AppendFieldTrials("WebRTC-VP9VariableFramerateScreenshare/"
1411 "Enabled,min_qp:32,min_fps:5.0,undershoot:30,frames_"
1412 "before_steady_state:5/"));
Artem Titov733a7812019-07-24 14:53:15 +02001413 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1414 CreateNetworkEmulationManager();
1415 auto fixture = CreateTestFixture(
1416 "pc_screenshare_slides_vp9_3sl_variable_fps",
1417 CreateTwoNetworkLinks(network_emulation_manager.get(),
1418 BuiltInNetworkBehaviorConfig()),
1419 [](PeerConfigurer* alice) {
1420 VideoConfig video(1850, 1110, 30);
1421 video.stream_label = "alice-video";
1422 video.screen_share_config = ScreenShareConfig(TimeDelta::seconds(10));
1423 video.simulcast_config = VideoSimulcastConfig(3, 2);
1424 alice->AddVideoConfig(std::move(video));
1425 },
1426 [](PeerConfigurer* bob) {});
1427 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1428 run_params.video_codec_name = cricket::kVp9CodecName;
1429 run_params.video_codec_required_params = {
1430 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}};
1431 run_params.use_flex_fec = false;
1432 run_params.use_ulp_fec = false;
1433 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001434}
1435
Artem Titov733a7812019-07-24 14:53:15 +02001436#endif // defined(RTC_ENABLE_VP9)
1437
1438/*
Artem Titov137f6c82019-05-17 10:51:15 +02001439// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1440TEST(PCFullStackTest, VP9SVC_3SL_High) {
1441 auto fixture = CreateVideoQualityTestFixture();
1442 ParamsWithLogging simulcast;
1443 simulcast.call.send_side_bwe = true;
1444 simulcast.video[0] = SvcVp9Video();
1445 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0, kTestDurationSec};
1446
1447 simulcast.ss[0] = {
1448 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
1449 std::vector<SpatialLayer>(), false};
1450 fixture->RunWithAnalyzer(simulcast);
1451}
1452
1453// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1454TEST(PCFullStackTest, VP9SVC_3SL_Medium) {
1455 auto fixture = CreateVideoQualityTestFixture();
1456 ParamsWithLogging simulcast;
1457 simulcast.call.send_side_bwe = true;
1458 simulcast.video[0] = SvcVp9Video();
1459 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1460 simulcast.ss[0] = {
1461 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
1462 std::vector<SpatialLayer>(), false};
1463 fixture->RunWithAnalyzer(simulcast);
1464}
1465
1466// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1467TEST(PCFullStackTest, VP9SVC_3SL_Low) {
1468 auto fixture = CreateVideoQualityTestFixture();
1469 ParamsWithLogging simulcast;
1470 simulcast.call.send_side_bwe = true;
1471 simulcast.video[0] = SvcVp9Video();
1472 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kTestDurationSec};
1473 simulcast.ss[0] = {
1474 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
1475 std::vector<SpatialLayer>(), false};
1476 fixture->RunWithAnalyzer(simulcast);
1477}
1478
1479// bugs.webrtc.org/9506
1480#if !defined(WEBRTC_MAC)
1481
1482// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1483TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1484 webrtc::test::ScopedFieldTrials override_trials(
1485 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1486 auto fixture = CreateVideoQualityTestFixture();
1487 ParamsWithLogging simulcast;
1488 simulcast.call.send_side_bwe = true;
1489 simulcast.video[0] = SvcVp9Video();
1490 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1491 simulcast.ss[0] = {
1492 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1493 std::vector<SpatialLayer>(), false};
1494 fixture->RunWithAnalyzer(simulcast);
1495}
1496
1497// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1498TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1499 webrtc::test::ScopedFieldTrials override_trials(
1500 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1501 auto fixture = CreateVideoQualityTestFixture();
1502 ParamsWithLogging simulcast;
1503 simulcast.call.send_side_bwe = true;
1504 simulcast.video[0] = SvcVp9Video();
1505 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1506 simulcast.ss[0] = {
1507 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1508 std::vector<SpatialLayer>(), false};
1509 fixture->RunWithAnalyzer(simulcast);
1510}
1511
1512// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1513TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1514 webrtc::test::ScopedFieldTrials override_trials(
1515 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1516 auto fixture = CreateVideoQualityTestFixture();
1517 ParamsWithLogging simulcast;
1518 simulcast.call.send_side_bwe = true;
1519 simulcast.video[0] = SvcVp9Video();
1520 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1521 simulcast.ss[0] = {
1522 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1523 std::vector<SpatialLayer>(), false};
1524 fixture->RunWithAnalyzer(simulcast);
1525}
1526
1527// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1528TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1529 webrtc::test::ScopedFieldTrials override_trials(
1530 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1531 auto fixture = CreateVideoQualityTestFixture();
1532 ParamsWithLogging simulcast;
1533 simulcast.call.send_side_bwe = true;
1534 simulcast.video[0] = SvcVp9Video();
1535 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1536 kTestDurationSec};
1537 simulcast.ss[0] = {
1538 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1539 std::vector<SpatialLayer>(), false};
1540 simulcast.config->link_capacity_kbps = 1000;
1541 simulcast.config->queue_delay_ms = 100;
1542 fixture->RunWithAnalyzer(simulcast);
1543}
1544
1545// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1546// TODO(webrtc:9722): Remove when experiment is cleaned up.
1547TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1548 webrtc::test::ScopedFieldTrials override_trials(
1549 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"
1550 "WebRTC-LibvpxVp9TrustedRateController/Enabled/"));
1551 auto fixture = CreateVideoQualityTestFixture();
1552 ParamsWithLogging simulcast;
1553 simulcast.call.send_side_bwe = true;
1554 simulcast.video[0] = SvcVp9Video();
1555 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1556 0.0, 0.0, kTestDurationSec};
1557 simulcast.ss[0] = {
1558 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1559 std::vector<SpatialLayer>(), false};
1560 simulcast.config->link_capacity_kbps = 1000;
1561 simulcast.config->queue_delay_ms = 100;
1562 fixture->RunWithAnalyzer(simulcast);
1563}
1564#endif // !defined(WEBRTC_MAC)
1565
1566#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001567*/
Artem Titov137f6c82019-05-17 10:51:15 +02001568
1569// Android bots can't handle FullHD, so disable the test.
1570// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1571#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
1572#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
1573#else
1574#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
1575#endif
Artem Titov137f6c82019-05-17 10:51:15 +02001576TEST(PCFullStackTest, MAYBE_SimulcastFullHdOveruse) {
Artem Titov137f6c82019-05-17 10:51:15 +02001577 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1578 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001579 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1580 CreateNetworkEmulationManager();
1581 BuiltInNetworkBehaviorConfig config;
1582 config.loss_percent = 0;
1583 config.queue_delay_ms = 100;
1584 auto fixture = CreateTestFixture(
1585 "pc_simulcast_HD_high",
1586 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1587 [](PeerConfigurer* alice) {
1588 VideoConfig video(1920, 1080, 30);
1589 video.generator = VideoGeneratorType::kDefault;
1590 video.simulcast_config = VideoSimulcastConfig(3, 2);
1591 video.stream_label = "alice-video";
1592 alice->AddVideoConfig(std::move(video));
1593 },
1594 [](PeerConfigurer* bob) {});
1595 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1596 run_params.video_codec_name = cricket::kVp8CodecName;
1597 run_params.use_flex_fec = false;
1598 run_params.use_ulp_fec = false;
1599 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001600}
1601
Artem Titov137f6c82019-05-17 10:51:15 +02001602TEST(PCFullStackTest, SimulcastVP8_3SL_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001603 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1604 CreateNetworkEmulationManager();
1605 BuiltInNetworkBehaviorConfig config;
1606 config.loss_percent = 0;
1607 config.queue_delay_ms = 100;
1608 auto fixture = CreateTestFixture(
1609 "pc_simulcast_vp8_3sl_high",
1610 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1611 [](PeerConfigurer* alice) {
1612 VideoConfig video(1280, 720, 30);
1613 video.input_file_name =
1614 ClipNameToClipPath("ConferenceMotion_1280_720_50");
1615 video.simulcast_config = VideoSimulcastConfig(3, 2);
1616 video.stream_label = "alice-video";
1617 alice->AddVideoConfig(std::move(video));
1618 },
1619 [](PeerConfigurer* bob) {});
1620 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1621 run_params.video_codec_name = cricket::kVp8CodecName;
1622 run_params.use_flex_fec = false;
1623 run_params.use_ulp_fec = false;
1624 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001625}
1626
Artem Titov137f6c82019-05-17 10:51:15 +02001627TEST(PCFullStackTest, SimulcastVP8_3SL_Medium) {
Artem Titov39483c62019-07-19 17:03:52 +02001628 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1629 CreateNetworkEmulationManager();
1630 BuiltInNetworkBehaviorConfig config;
1631 config.loss_percent = 0;
1632 config.queue_delay_ms = 100;
1633 auto fixture = CreateTestFixture(
1634 "pc_simulcast_vp8_3sl_medium",
1635 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1636 [](PeerConfigurer* alice) {
1637 VideoConfig video(1280, 720, 30);
1638 video.input_file_name =
1639 ClipNameToClipPath("ConferenceMotion_1280_720_50");
1640 video.simulcast_config = VideoSimulcastConfig(3, 1);
1641 video.stream_label = "alice-video";
1642 alice->AddVideoConfig(std::move(video));
1643 },
1644 [](PeerConfigurer* bob) {});
1645 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1646 run_params.video_codec_name = cricket::kVp8CodecName;
1647 run_params.use_flex_fec = false;
1648 run_params.use_ulp_fec = false;
1649 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001650}
1651
Artem Titov137f6c82019-05-17 10:51:15 +02001652TEST(PCFullStackTest, SimulcastVP8_3SL_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001653 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1654 CreateNetworkEmulationManager();
1655 BuiltInNetworkBehaviorConfig config;
1656 config.loss_percent = 0;
1657 config.queue_delay_ms = 100;
1658 auto fixture = CreateTestFixture(
1659 "pc_simulcast_vp8_3sl_low",
1660 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1661 [](PeerConfigurer* alice) {
1662 VideoConfig video(1280, 720, 30);
1663 video.input_file_name =
1664 ClipNameToClipPath("ConferenceMotion_1280_720_50");
1665 video.simulcast_config = VideoSimulcastConfig(3, 0);
1666 video.stream_label = "alice-video";
1667 alice->AddVideoConfig(std::move(video));
1668 },
1669 [](PeerConfigurer* bob) {});
1670 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1671 run_params.video_codec_name = cricket::kVp8CodecName;
1672 run_params.use_flex_fec = false;
1673 run_params.use_ulp_fec = false;
1674 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001675}
1676
Artem Titov39483c62019-07-19 17:03:52 +02001677/*
Artem Titov137f6c82019-05-17 10:51:15 +02001678// This test assumes ideal network conditions with target bandwidth being
1679// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1680// Android32 bots can't handle this high bitrate, so disable test for those.
1681#if defined(WEBRTC_ANDROID)
1682#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1683#else
1684#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1685#endif // defined(WEBRTC_ANDROID)
1686// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1687configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1688fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1689 ParamsWithLogging generator;
1690 generator.call.send_side_bwe = true;
1691 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1692 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1693 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1694 generator.video[0] = {true,
1695 360,
1696 240,
1697 30,
1698 target_bitrate / 2,
1699 target_bitrate,
1700 target_bitrate * 2,
1701 false,
1702 "FakeCodec",
1703 1,
1704 0,
1705 0,
1706 false,
1707 false,
1708 false,
1709 "Generator"};
1710 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1711 kTestDurationSec};
1712 fixture->RunWithAnalyzer(generator);
1713}
1714
1715// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1716TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1717 auto fixture = CreateVideoQualityTestFixture();
1718 ParamsWithLogging large_room;
1719 large_room.call.send_side_bwe = true;
1720 large_room.video[0] = SimulcastVp8VideoHigh();
1721 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1722 large_room.config->loss_percent = 0;
1723 large_room.config->queue_delay_ms = 100;
1724 ParamsWithLogging video_params_high;
1725 video_params_high.video[0] = SimulcastVp8VideoHigh();
1726 ParamsWithLogging video_params_medium;
1727 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1728 ParamsWithLogging video_params_low;
1729 video_params_low.video[0] = SimulcastVp8VideoLow();
1730
1731 std::vector<VideoStream> streams = {
1732 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1733 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1734 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1735 large_room.call.num_thumbnails = 5;
1736 large_room.ss[0] = {
1737 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1738 false};
1739 fixture->RunWithAnalyzer(large_room);
1740}
1741
1742#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1743// Fails on mobile devices:
1744// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1745#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1746#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1747#else
1748#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1749#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1750#endif
1751// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1752TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1753 auto fixture = CreateVideoQualityTestFixture();
1754 ParamsWithLogging large_room;
1755 large_room.call.send_side_bwe = true;
1756 large_room.video[0] = SimulcastVp8VideoHigh();
1757 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1758 large_room.config->loss_percent = 0;
1759 large_room.config->queue_delay_ms = 100;
1760 ParamsWithLogging video_params_high;
1761 video_params_high.video[0] = SimulcastVp8VideoHigh();
1762 ParamsWithLogging video_params_medium;
1763 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1764 ParamsWithLogging video_params_low;
1765 video_params_low.video[0] = SimulcastVp8VideoLow();
1766
1767 std::vector<VideoStream> streams = {
1768 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1769 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1770 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1771 large_room.call.num_thumbnails = 15;
1772 large_room.ss[0] = {
1773 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1774 false};
1775 fixture->RunWithAnalyzer(large_room);
1776}
1777
1778// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1779TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1780 auto fixture = CreateVideoQualityTestFixture();
1781 ParamsWithLogging large_room;
1782 large_room.call.send_side_bwe = true;
1783 large_room.video[0] = SimulcastVp8VideoHigh();
1784 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1785 large_room.config->loss_percent = 0;
1786 large_room.config->queue_delay_ms = 100;
1787 ParamsWithLogging video_params_high;
1788 video_params_high.video[0] = SimulcastVp8VideoHigh();
1789 ParamsWithLogging video_params_medium;
1790 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1791 ParamsWithLogging video_params_low;
1792 video_params_low.video[0] = SimulcastVp8VideoLow();
1793
1794 std::vector<VideoStream> streams = {
1795 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1796 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1797 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1798 large_room.call.num_thumbnails = 50;
1799 large_room.ss[0] = {
1800 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1801 false};
1802 fixture->RunWithAnalyzer(large_room);
1803}
1804*/
1805
1806INSTANTIATE_TEST_SUITE_P(
1807 PCFullStackTest,
1808 PCGenericDescriptorTest,
1809 ::testing::Values("WebRTC-GenericDescriptor/Disabled/",
1810 "WebRTC-GenericDescriptor/Enabled/"));
1811
1812class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1813
1814/*
1815// Disable dual video test on mobile device becuase it's too heavy.
1816// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1817#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1818// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1819TEST_P(PCDualStreamsTest,
1820 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001821 const int first_stream = GetParam();
1822 ParamsWithLogging dual_streams;
1823
1824 // Screenshare Settings.
1825 dual_streams.screenshare[first_stream] = {true, false, 10};
1826 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1827 2500000, false, "VP8", 2, 1, 400000,
1828 false, false, false, ""};
1829
1830 ParamsWithLogging screenshare_params_high;
1831 screenshare_params_high.video[0] = {
1832 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1833 "VP8", 2, 0, 400000, false, false, false, ""};
1834 VideoQualityTest::Params screenshare_params_low;
1835 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1836 1000000, false, "VP8", 2, 0, 400000,
1837 false, false, false, ""};
1838 std::vector<VideoStream> screenhsare_streams = {
1839 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1840 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1841
1842 dual_streams.ss[first_stream] = {
1843 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1844 std::vector<SpatialLayer>(), false};
1845
1846 // Video settings.
1847 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1848
1849 ParamsWithLogging video_params_high;
1850 video_params_high.video[0] = SimulcastVp8VideoHigh();
1851 ParamsWithLogging video_params_medium;
1852 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1853 ParamsWithLogging video_params_low;
1854 video_params_low.video[0] = SimulcastVp8VideoLow();
1855 std::vector<VideoStream> streams = {
1856 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1857 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1858 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1859
1860 dual_streams.ss[1 - first_stream] = {
1861 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1862 false};
1863
1864 // Call settings.
1865 dual_streams.call.send_side_bwe = true;
1866 dual_streams.call.dual_video = true;
1867 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1868 std::to_string(first_stream);
1869 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1870 dual_streams.config->loss_percent = 1;
1871 dual_streams.config->link_capacity_kbps = 7500;
1872 dual_streams.config->queue_length_packets = 30;
1873 dual_streams.config->queue_delay_ms = 100;
1874
1875 auto fixture = CreateVideoQualityTestFixture();
1876 fixture->RunWithAnalyzer(dual_streams);
1877}
1878#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1879 // !defined(WEBRTC_MAC)
1880
1881// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1882TEST_P(PCDualStreamsTest, Conference_Restricted) {
1883 const int first_stream = GetParam();
1884 ParamsWithLogging dual_streams;
1885
1886 // Screenshare Settings.
1887 dual_streams.screenshare[first_stream] = {true, false, 10};
1888 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1889 2500000, false, "VP8", 3, 2, 400000,
1890 false, false, false, ""};
1891 // Video settings.
1892 dual_streams.video[1 - first_stream] = {
1893 true, 1280,
1894 720, 30,
1895 150000, 500000,
1896 700000, false,
1897 "VP8", 3,
1898 2, 400000,
1899 false, false,
1900 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1901
1902 // Call settings.
1903 dual_streams.call.send_side_bwe = true;
1904 dual_streams.call.dual_video = true;
1905 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1906 std::to_string(first_stream);
1907 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1908 dual_streams.config->loss_percent = 1;
1909 dual_streams.config->link_capacity_kbps = 5000;
1910 dual_streams.config->queue_length_packets = 30;
1911 dual_streams.config->queue_delay_ms = 100;
1912
1913 auto fixture = CreateVideoQualityTestFixture();
1914 fixture->RunWithAnalyzer(dual_streams);
1915}
1916*/
1917
1918INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1919 PCDualStreamsTest,
1920 ::testing::Values(0, 1));
1921
1922} // namespace webrtc