blob: f5d6f5033df746237d1c479101d88e993078cd9e [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
1380
1381#if defined(RTC_ENABLE_VP9)
1382
1383// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1384TEST(PCFullStackTest, ScreenshareSlidesVP9_3SL_High_Fps) {
1385 auto fixture = CreateVideoQualityTestFixture();
1386 ParamsWithLogging screenshare;
1387 screenshare.call.send_side_bwe = true;
1388 screenshare.video[0] = {true, 1850, 1110, 30, 50000, 200000,
1389 2000000, false, "VP9", 1, 0, 400000,
1390 false, false, false, ""};
1391 screenshare.screenshare[0] = {true, false, 10};
1392 screenshare.analyzer = {"screenshare_slides_vp9_3sl_high_fps", 0.0, 0.0,
1393 kTestDurationSec};
1394 screenshare.ss[0] = {
1395 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
1396 std::vector<SpatialLayer>(), true};
1397 fixture->RunWithAnalyzer(screenshare);
1398}
1399
1400// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1401TEST(PCFullStackTest, ScreenshareSlidesVP9_3SL_Variable_Fps) {
1402 webrtc::test::ScopedFieldTrials override_trials(
1403 AppendFieldTrials("WebRTC-VP9VariableFramerateScreenshare/"
1404 "Enabled,min_qp:32,min_fps:5.0,undershoot:30,frames_"
1405 "before_steady_state:5/"));
1406 auto fixture = CreateVideoQualityTestFixture();
1407 ParamsWithLogging screenshare;
1408 screenshare.call.send_side_bwe = true;
1409 screenshare.video[0] = {true, 1850, 1110, 30, 50000, 200000,
1410 2000000, false, "VP9", 1, 0, 400000,
1411 false, false, false, ""};
1412 screenshare.screenshare[0] = {true, false, 10};
1413 screenshare.analyzer = {"screenshare_slides_vp9_3sl_variable_fps", 0.0, 0.0,
1414 kTestDurationSec};
1415 screenshare.ss[0] = {
1416 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
1417 std::vector<SpatialLayer>(), true};
1418 fixture->RunWithAnalyzer(screenshare);
1419}
1420
1421// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1422TEST(PCFullStackTest, VP9SVC_3SL_High) {
1423 auto fixture = CreateVideoQualityTestFixture();
1424 ParamsWithLogging simulcast;
1425 simulcast.call.send_side_bwe = true;
1426 simulcast.video[0] = SvcVp9Video();
1427 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0, kTestDurationSec};
1428
1429 simulcast.ss[0] = {
1430 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
1431 std::vector<SpatialLayer>(), false};
1432 fixture->RunWithAnalyzer(simulcast);
1433}
1434
1435// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1436TEST(PCFullStackTest, VP9SVC_3SL_Medium) {
1437 auto fixture = CreateVideoQualityTestFixture();
1438 ParamsWithLogging simulcast;
1439 simulcast.call.send_side_bwe = true;
1440 simulcast.video[0] = SvcVp9Video();
1441 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1442 simulcast.ss[0] = {
1443 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
1444 std::vector<SpatialLayer>(), false};
1445 fixture->RunWithAnalyzer(simulcast);
1446}
1447
1448// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1449TEST(PCFullStackTest, VP9SVC_3SL_Low) {
1450 auto fixture = CreateVideoQualityTestFixture();
1451 ParamsWithLogging simulcast;
1452 simulcast.call.send_side_bwe = true;
1453 simulcast.video[0] = SvcVp9Video();
1454 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kTestDurationSec};
1455 simulcast.ss[0] = {
1456 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
1457 std::vector<SpatialLayer>(), false};
1458 fixture->RunWithAnalyzer(simulcast);
1459}
1460
1461// bugs.webrtc.org/9506
1462#if !defined(WEBRTC_MAC)
1463
1464// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1465TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1466 webrtc::test::ScopedFieldTrials override_trials(
1467 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1468 auto fixture = CreateVideoQualityTestFixture();
1469 ParamsWithLogging simulcast;
1470 simulcast.call.send_side_bwe = true;
1471 simulcast.video[0] = SvcVp9Video();
1472 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1473 simulcast.ss[0] = {
1474 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1475 std::vector<SpatialLayer>(), false};
1476 fixture->RunWithAnalyzer(simulcast);
1477}
1478
1479// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1480TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1481 webrtc::test::ScopedFieldTrials override_trials(
1482 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1483 auto fixture = CreateVideoQualityTestFixture();
1484 ParamsWithLogging simulcast;
1485 simulcast.call.send_side_bwe = true;
1486 simulcast.video[0] = SvcVp9Video();
1487 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1488 simulcast.ss[0] = {
1489 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1490 std::vector<SpatialLayer>(), false};
1491 fixture->RunWithAnalyzer(simulcast);
1492}
1493
1494// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1495TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1496 webrtc::test::ScopedFieldTrials override_trials(
1497 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1498 auto fixture = CreateVideoQualityTestFixture();
1499 ParamsWithLogging simulcast;
1500 simulcast.call.send_side_bwe = true;
1501 simulcast.video[0] = SvcVp9Video();
1502 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1503 simulcast.ss[0] = {
1504 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1505 std::vector<SpatialLayer>(), false};
1506 fixture->RunWithAnalyzer(simulcast);
1507}
1508
1509// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1510TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1511 webrtc::test::ScopedFieldTrials override_trials(
1512 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1513 auto fixture = CreateVideoQualityTestFixture();
1514 ParamsWithLogging simulcast;
1515 simulcast.call.send_side_bwe = true;
1516 simulcast.video[0] = SvcVp9Video();
1517 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1518 kTestDurationSec};
1519 simulcast.ss[0] = {
1520 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1521 std::vector<SpatialLayer>(), false};
1522 simulcast.config->link_capacity_kbps = 1000;
1523 simulcast.config->queue_delay_ms = 100;
1524 fixture->RunWithAnalyzer(simulcast);
1525}
1526
1527// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1528// TODO(webrtc:9722): Remove when experiment is cleaned up.
1529TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1530 webrtc::test::ScopedFieldTrials override_trials(
1531 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"
1532 "WebRTC-LibvpxVp9TrustedRateController/Enabled/"));
1533 auto fixture = CreateVideoQualityTestFixture();
1534 ParamsWithLogging simulcast;
1535 simulcast.call.send_side_bwe = true;
1536 simulcast.video[0] = SvcVp9Video();
1537 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1538 0.0, 0.0, kTestDurationSec};
1539 simulcast.ss[0] = {
1540 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1541 std::vector<SpatialLayer>(), false};
1542 simulcast.config->link_capacity_kbps = 1000;
1543 simulcast.config->queue_delay_ms = 100;
1544 fixture->RunWithAnalyzer(simulcast);
1545}
1546#endif // !defined(WEBRTC_MAC)
1547
1548#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001549*/
Artem Titov137f6c82019-05-17 10:51:15 +02001550
1551// Android bots can't handle FullHD, so disable the test.
1552// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1553#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
1554#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
1555#else
1556#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
1557#endif
Artem Titov137f6c82019-05-17 10:51:15 +02001558TEST(PCFullStackTest, MAYBE_SimulcastFullHdOveruse) {
Artem Titov137f6c82019-05-17 10:51:15 +02001559 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1560 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001561 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1562 CreateNetworkEmulationManager();
1563 BuiltInNetworkBehaviorConfig config;
1564 config.loss_percent = 0;
1565 config.queue_delay_ms = 100;
1566 auto fixture = CreateTestFixture(
1567 "pc_simulcast_HD_high",
1568 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1569 [](PeerConfigurer* alice) {
1570 VideoConfig video(1920, 1080, 30);
1571 video.generator = VideoGeneratorType::kDefault;
1572 video.simulcast_config = VideoSimulcastConfig(3, 2);
1573 video.stream_label = "alice-video";
1574 alice->AddVideoConfig(std::move(video));
1575 },
1576 [](PeerConfigurer* bob) {});
1577 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1578 run_params.video_codec_name = cricket::kVp8CodecName;
1579 run_params.use_flex_fec = false;
1580 run_params.use_ulp_fec = false;
1581 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001582}
1583
Artem Titov137f6c82019-05-17 10:51:15 +02001584TEST(PCFullStackTest, SimulcastVP8_3SL_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001585 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1586 CreateNetworkEmulationManager();
1587 BuiltInNetworkBehaviorConfig config;
1588 config.loss_percent = 0;
1589 config.queue_delay_ms = 100;
1590 auto fixture = CreateTestFixture(
1591 "pc_simulcast_vp8_3sl_high",
1592 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1593 [](PeerConfigurer* alice) {
1594 VideoConfig video(1280, 720, 30);
1595 video.input_file_name =
1596 ClipNameToClipPath("ConferenceMotion_1280_720_50");
1597 video.simulcast_config = VideoSimulcastConfig(3, 2);
1598 video.stream_label = "alice-video";
1599 alice->AddVideoConfig(std::move(video));
1600 },
1601 [](PeerConfigurer* bob) {});
1602 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1603 run_params.video_codec_name = cricket::kVp8CodecName;
1604 run_params.use_flex_fec = false;
1605 run_params.use_ulp_fec = false;
1606 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001607}
1608
Artem Titov137f6c82019-05-17 10:51:15 +02001609TEST(PCFullStackTest, SimulcastVP8_3SL_Medium) {
Artem Titov39483c62019-07-19 17:03:52 +02001610 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1611 CreateNetworkEmulationManager();
1612 BuiltInNetworkBehaviorConfig config;
1613 config.loss_percent = 0;
1614 config.queue_delay_ms = 100;
1615 auto fixture = CreateTestFixture(
1616 "pc_simulcast_vp8_3sl_medium",
1617 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1618 [](PeerConfigurer* alice) {
1619 VideoConfig video(1280, 720, 30);
1620 video.input_file_name =
1621 ClipNameToClipPath("ConferenceMotion_1280_720_50");
1622 video.simulcast_config = VideoSimulcastConfig(3, 1);
1623 video.stream_label = "alice-video";
1624 alice->AddVideoConfig(std::move(video));
1625 },
1626 [](PeerConfigurer* bob) {});
1627 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1628 run_params.video_codec_name = cricket::kVp8CodecName;
1629 run_params.use_flex_fec = false;
1630 run_params.use_ulp_fec = false;
1631 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001632}
1633
Artem Titov137f6c82019-05-17 10:51:15 +02001634TEST(PCFullStackTest, SimulcastVP8_3SL_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001635 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1636 CreateNetworkEmulationManager();
1637 BuiltInNetworkBehaviorConfig config;
1638 config.loss_percent = 0;
1639 config.queue_delay_ms = 100;
1640 auto fixture = CreateTestFixture(
1641 "pc_simulcast_vp8_3sl_low",
1642 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1643 [](PeerConfigurer* alice) {
1644 VideoConfig video(1280, 720, 30);
1645 video.input_file_name =
1646 ClipNameToClipPath("ConferenceMotion_1280_720_50");
1647 video.simulcast_config = VideoSimulcastConfig(3, 0);
1648 video.stream_label = "alice-video";
1649 alice->AddVideoConfig(std::move(video));
1650 },
1651 [](PeerConfigurer* bob) {});
1652 RunParams run_params(TimeDelta::seconds(kTestDurationSec));
1653 run_params.video_codec_name = cricket::kVp8CodecName;
1654 run_params.use_flex_fec = false;
1655 run_params.use_ulp_fec = false;
1656 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001657}
1658
Artem Titov39483c62019-07-19 17:03:52 +02001659/*
Artem Titov137f6c82019-05-17 10:51:15 +02001660// This test assumes ideal network conditions with target bandwidth being
1661// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1662// Android32 bots can't handle this high bitrate, so disable test for those.
1663#if defined(WEBRTC_ANDROID)
1664#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1665#else
1666#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1667#endif // defined(WEBRTC_ANDROID)
1668// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1669configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1670fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1671 ParamsWithLogging generator;
1672 generator.call.send_side_bwe = true;
1673 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1674 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1675 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1676 generator.video[0] = {true,
1677 360,
1678 240,
1679 30,
1680 target_bitrate / 2,
1681 target_bitrate,
1682 target_bitrate * 2,
1683 false,
1684 "FakeCodec",
1685 1,
1686 0,
1687 0,
1688 false,
1689 false,
1690 false,
1691 "Generator"};
1692 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1693 kTestDurationSec};
1694 fixture->RunWithAnalyzer(generator);
1695}
1696
1697// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1698TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1699 auto fixture = CreateVideoQualityTestFixture();
1700 ParamsWithLogging large_room;
1701 large_room.call.send_side_bwe = true;
1702 large_room.video[0] = SimulcastVp8VideoHigh();
1703 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1704 large_room.config->loss_percent = 0;
1705 large_room.config->queue_delay_ms = 100;
1706 ParamsWithLogging video_params_high;
1707 video_params_high.video[0] = SimulcastVp8VideoHigh();
1708 ParamsWithLogging video_params_medium;
1709 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1710 ParamsWithLogging video_params_low;
1711 video_params_low.video[0] = SimulcastVp8VideoLow();
1712
1713 std::vector<VideoStream> streams = {
1714 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1715 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1716 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1717 large_room.call.num_thumbnails = 5;
1718 large_room.ss[0] = {
1719 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1720 false};
1721 fixture->RunWithAnalyzer(large_room);
1722}
1723
1724#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1725// Fails on mobile devices:
1726// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1727#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1728#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1729#else
1730#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1731#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1732#endif
1733// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1734TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1735 auto fixture = CreateVideoQualityTestFixture();
1736 ParamsWithLogging large_room;
1737 large_room.call.send_side_bwe = true;
1738 large_room.video[0] = SimulcastVp8VideoHigh();
1739 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1740 large_room.config->loss_percent = 0;
1741 large_room.config->queue_delay_ms = 100;
1742 ParamsWithLogging video_params_high;
1743 video_params_high.video[0] = SimulcastVp8VideoHigh();
1744 ParamsWithLogging video_params_medium;
1745 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1746 ParamsWithLogging video_params_low;
1747 video_params_low.video[0] = SimulcastVp8VideoLow();
1748
1749 std::vector<VideoStream> streams = {
1750 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1751 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1752 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1753 large_room.call.num_thumbnails = 15;
1754 large_room.ss[0] = {
1755 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1756 false};
1757 fixture->RunWithAnalyzer(large_room);
1758}
1759
1760// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1761TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1762 auto fixture = CreateVideoQualityTestFixture();
1763 ParamsWithLogging large_room;
1764 large_room.call.send_side_bwe = true;
1765 large_room.video[0] = SimulcastVp8VideoHigh();
1766 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1767 large_room.config->loss_percent = 0;
1768 large_room.config->queue_delay_ms = 100;
1769 ParamsWithLogging video_params_high;
1770 video_params_high.video[0] = SimulcastVp8VideoHigh();
1771 ParamsWithLogging video_params_medium;
1772 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1773 ParamsWithLogging video_params_low;
1774 video_params_low.video[0] = SimulcastVp8VideoLow();
1775
1776 std::vector<VideoStream> streams = {
1777 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1778 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1779 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1780 large_room.call.num_thumbnails = 50;
1781 large_room.ss[0] = {
1782 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1783 false};
1784 fixture->RunWithAnalyzer(large_room);
1785}
1786*/
1787
1788INSTANTIATE_TEST_SUITE_P(
1789 PCFullStackTest,
1790 PCGenericDescriptorTest,
1791 ::testing::Values("WebRTC-GenericDescriptor/Disabled/",
1792 "WebRTC-GenericDescriptor/Enabled/"));
1793
1794class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1795
1796/*
1797// Disable dual video test on mobile device becuase it's too heavy.
1798// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1799#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1800// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1801TEST_P(PCDualStreamsTest,
1802 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001803 const int first_stream = GetParam();
1804 ParamsWithLogging dual_streams;
1805
1806 // Screenshare Settings.
1807 dual_streams.screenshare[first_stream] = {true, false, 10};
1808 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1809 2500000, false, "VP8", 2, 1, 400000,
1810 false, false, false, ""};
1811
1812 ParamsWithLogging screenshare_params_high;
1813 screenshare_params_high.video[0] = {
1814 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1815 "VP8", 2, 0, 400000, false, false, false, ""};
1816 VideoQualityTest::Params screenshare_params_low;
1817 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1818 1000000, false, "VP8", 2, 0, 400000,
1819 false, false, false, ""};
1820 std::vector<VideoStream> screenhsare_streams = {
1821 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1822 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1823
1824 dual_streams.ss[first_stream] = {
1825 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1826 std::vector<SpatialLayer>(), false};
1827
1828 // Video settings.
1829 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1830
1831 ParamsWithLogging video_params_high;
1832 video_params_high.video[0] = SimulcastVp8VideoHigh();
1833 ParamsWithLogging video_params_medium;
1834 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1835 ParamsWithLogging video_params_low;
1836 video_params_low.video[0] = SimulcastVp8VideoLow();
1837 std::vector<VideoStream> streams = {
1838 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1839 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1840 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1841
1842 dual_streams.ss[1 - first_stream] = {
1843 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1844 false};
1845
1846 // Call settings.
1847 dual_streams.call.send_side_bwe = true;
1848 dual_streams.call.dual_video = true;
1849 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1850 std::to_string(first_stream);
1851 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1852 dual_streams.config->loss_percent = 1;
1853 dual_streams.config->link_capacity_kbps = 7500;
1854 dual_streams.config->queue_length_packets = 30;
1855 dual_streams.config->queue_delay_ms = 100;
1856
1857 auto fixture = CreateVideoQualityTestFixture();
1858 fixture->RunWithAnalyzer(dual_streams);
1859}
1860#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1861 // !defined(WEBRTC_MAC)
1862
1863// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1864TEST_P(PCDualStreamsTest, Conference_Restricted) {
1865 const int first_stream = GetParam();
1866 ParamsWithLogging dual_streams;
1867
1868 // Screenshare Settings.
1869 dual_streams.screenshare[first_stream] = {true, false, 10};
1870 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1871 2500000, false, "VP8", 3, 2, 400000,
1872 false, false, false, ""};
1873 // Video settings.
1874 dual_streams.video[1 - first_stream] = {
1875 true, 1280,
1876 720, 30,
1877 150000, 500000,
1878 700000, false,
1879 "VP8", 3,
1880 2, 400000,
1881 false, false,
1882 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1883
1884 // Call settings.
1885 dual_streams.call.send_side_bwe = true;
1886 dual_streams.call.dual_video = true;
1887 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1888 std::to_string(first_stream);
1889 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1890 dual_streams.config->loss_percent = 1;
1891 dual_streams.config->link_capacity_kbps = 5000;
1892 dual_streams.config->queue_length_packets = 30;
1893 dual_streams.config->queue_delay_ms = 100;
1894
1895 auto fixture = CreateVideoQualityTestFixture();
1896 fixture->RunWithAnalyzer(dual_streams);
1897}
1898*/
1899
1900INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1901 PCDualStreamsTest,
1902 ::testing::Values(0, 1));
1903
1904} // namespace webrtc