blob: 7a4b449093d0ea41175a24f160eef9809748a7a9 [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
Andrey Logvin435fb9a2020-05-08 08:02:49 +000015#include "api/media_stream_interface.h"
Artem Titov137f6c82019-05-17 10:51:15 +020016#include "api/test/create_network_emulation_manager.h"
Andrey Logvinc0644672020-05-05 10:33:01 +000017#include "api/test/create_peer_connection_quality_test_frame_generator.h"
Artem Titov137f6c82019-05-17 10:51:15 +020018#include "api/test/create_peerconnection_quality_test_fixture.h"
Andrey Logvinc0644672020-05-05 10:33:01 +000019#include "api/test/frame_generator_interface.h"
Artem Titov137f6c82019-05-17 10:51:15 +020020#include "api/test/network_emulation_manager.h"
21#include "api/test/peerconnection_quality_test_fixture.h"
22#include "api/test/simulated_network.h"
Artem Titov1ff3c582020-07-01 15:20:37 +020023#include "api/test/time_controller.h"
Artem Titov137f6c82019-05-17 10:51:15 +020024#include "call/simulated_network.h"
25#include "media/base/vp9_profile.h"
26#include "modules/video_coding/codecs/vp9/include/vp9.h"
27#include "system_wrappers/include/field_trial.h"
28#include "test/field_trial.h"
29#include "test/gtest.h"
30#include "test/pc/e2e/network_quality_metrics_reporter.h"
31#include "test/testsupport/file_utils.h"
32
33namespace webrtc {
34
35using PeerConfigurer =
36 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer;
37using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
38using VideoConfig =
39 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
40using AudioConfig =
41 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
Artem Titov39483c62019-07-19 17:03:52 +020042using ScreenShareConfig =
43 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
44using VideoSimulcastConfig =
45 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoSimulcastConfig;
Artem Titovcdd73e02020-01-23 14:09:09 +010046using VideoCodecConfig =
47 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoCodecConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020048
49namespace {
50
51constexpr int kTestDurationSec = 45;
52constexpr char kVp8TrustedRateControllerFieldTrial[] =
53 "WebRTC-LibvpxVp8TrustedRateController/Enabled/";
54
55EmulatedNetworkNode* CreateEmulatedNodeWithConfig(
56 NetworkEmulationManager* emulation,
57 const BuiltInNetworkBehaviorConfig& config) {
58 return emulation->CreateEmulatedNode(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020059 std::make_unique<SimulatedNetwork>(config));
Artem Titov137f6c82019-05-17 10:51:15 +020060}
61
62std::pair<EmulatedNetworkManagerInterface*, EmulatedNetworkManagerInterface*>
63CreateTwoNetworkLinks(NetworkEmulationManager* emulation,
64 const BuiltInNetworkBehaviorConfig& config) {
65 auto* alice_node = CreateEmulatedNodeWithConfig(emulation, config);
66 auto* bob_node = CreateEmulatedNodeWithConfig(emulation, config);
67
68 auto* alice_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
69 auto* bob_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
70
71 emulation->CreateRoute(alice_endpoint, {alice_node}, bob_endpoint);
72 emulation->CreateRoute(bob_endpoint, {bob_node}, alice_endpoint);
73
74 return {
75 emulation->CreateEmulatedNetworkManagerInterface({alice_endpoint}),
76 emulation->CreateEmulatedNetworkManagerInterface({bob_endpoint}),
77 };
78}
79
80std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture>
81CreateTestFixture(const std::string& test_case_name,
Artem Titov1ff3c582020-07-01 15:20:37 +020082 TimeController& time_controller,
Artem Titov137f6c82019-05-17 10:51:15 +020083 std::pair<EmulatedNetworkManagerInterface*,
84 EmulatedNetworkManagerInterface*> network_links,
85 rtc::FunctionView<void(PeerConfigurer*)> alice_configurer,
86 rtc::FunctionView<void(PeerConfigurer*)> bob_configurer) {
87 auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +020088 test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
Artem Titov137f6c82019-05-17 10:51:15 +020089 /*video_quality_analyzer=*/nullptr);
90 fixture->AddPeer(network_links.first->network_thread(),
91 network_links.first->network_manager(), alice_configurer);
92 fixture->AddPeer(network_links.second->network_thread(),
93 network_links.second->network_manager(), bob_configurer);
94 fixture->AddQualityMetricsReporter(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020095 std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
Artem Titov137f6c82019-05-17 10:51:15 +020096 network_links.first, network_links.second));
97 return fixture;
98}
99
100// Takes the current active field trials set, and appends some new trials.
101std::string AppendFieldTrials(std::string new_trial_string) {
102 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
103}
104
105std::string ClipNameToClipPath(const char* clip_name) {
106 return test::ResourcePath(clip_name, "yuv");
107}
108
109} // namespace
110
Artem Titov137f6c82019-05-17 10:51:15 +0200111#if defined(RTC_ENABLE_VP9)
112TEST(PCFullStackTest, ForemanCifWithoutPacketLossVp9) {
113 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
114 CreateNetworkEmulationManager();
115 auto fixture = CreateTestFixture(
116 "pc_foreman_cif_net_delay_0_0_plr_0_VP9",
Artem Titov1ff3c582020-07-01 15:20:37 +0200117 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200118 CreateTwoNetworkLinks(network_emulation_manager.get(),
119 BuiltInNetworkBehaviorConfig()),
120 [](PeerConfigurer* alice) {
121 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200122 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000123 auto frame_generator = CreateFromYuvFileFrameGenerator(
124 video, ClipNameToClipPath("foreman_cif"));
125 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200126 },
127 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100128 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100129 run_params.video_codecs = {VideoCodecConfig(
130 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
131 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov137f6c82019-05-17 10:51:15 +0200132 run_params.use_flex_fec = false;
133 run_params.use_ulp_fec = false;
134 fixture->Run(std::move(run_params));
135}
136
Danil Chapovalov636865e2020-06-03 14:11:26 +0200137TEST(PCGenericDescriptorTest, ForemanCifPlr5Vp9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200138 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
139 CreateNetworkEmulationManager();
140 BuiltInNetworkBehaviorConfig config;
141 config.loss_percent = 5;
142 config.queue_delay_ms = 50;
143 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200144 "pc_foreman_cif_delay_50_0_plr_5_VP9_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200145 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200146 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
147 [](PeerConfigurer* alice) {
148 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200149 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000150 auto frame_generator = CreateFromYuvFileFrameGenerator(
151 video, ClipNameToClipPath("foreman_cif"));
152 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200153 },
154 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100155 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100156 run_params.video_codecs = {VideoCodecConfig(
157 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
158 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov137f6c82019-05-17 10:51:15 +0200159 run_params.use_flex_fec = false;
160 run_params.use_ulp_fec = false;
161 fixture->Run(std::move(run_params));
162}
163
Artem Titove731a2e2019-07-02 10:08:17 +0200164// VP9 2nd profile isn't supported on android arm and arm 64.
Artem Titovcecee992019-07-03 11:55:28 +0200165#if (defined(WEBRTC_ANDROID) && \
166 (defined(WEBRTC_ARCH_ARM64) || defined(WEBRTC_ARCH_ARM))) || \
167 (defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64))
Artem Titove731a2e2019-07-02 10:08:17 +0200168#define MAYBE_GeneratorWithoutPacketLossVp9Profile2 \
169 DISABLED_GeneratorWithoutPacketLossVp9Profile2
170#else
171#define MAYBE_GeneratorWithoutPacketLossVp9Profile2 \
172 GeneratorWithoutPacketLossVp9Profile2
173#endif
174TEST(PCFullStackTest, MAYBE_GeneratorWithoutPacketLossVp9Profile2) {
Artem Titov137f6c82019-05-17 10:51:15 +0200175 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
176 CreateNetworkEmulationManager();
177 auto fixture = CreateTestFixture(
178 "pc_generator_net_delay_0_0_plr_0_VP9Profile2",
Artem Titov1ff3c582020-07-01 15:20:37 +0200179 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200180 CreateTwoNetworkLinks(network_emulation_manager.get(),
181 BuiltInNetworkBehaviorConfig()),
182 [](PeerConfigurer* alice) {
183 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200184 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000185 auto frame_generator = CreateSquareFrameGenerator(
186 video, test::FrameGeneratorInterface::OutputType::kI010);
187 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200188 },
189 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100190 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100191 run_params.video_codecs = {VideoCodecConfig(
192 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
193 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}})};
Artem Titov137f6c82019-05-17 10:51:15 +0200194 run_params.use_flex_fec = false;
195 run_params.use_ulp_fec = false;
196 fixture->Run(std::move(run_params));
197}
198
199/*
200// TODO(bugs.webrtc.org/10639) migrate commented out test, when required
201// functionality will be supported in PeerConnection level framework.
202TEST(PCFullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
203 auto fixture = CreateVideoQualityTestFixture();
204 ParamsWithLogging foreman_cif;
205 foreman_cif.call.send_side_bwe = true;
206 foreman_cif.video[0] = {
207 true, 352, 288, 30,
208 700000, 700000, 700000, false,
209 "multiplex", 1, 0, 0,
210 false, false, false, ClipNameToClipPath("foreman_cif")};
211 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
212 kTestDurationSec};
213 fixture->RunWithAnalyzer(foreman_cif);
214}
215
216TEST(PCFullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
217 auto fixture = CreateVideoQualityTestFixture();
218
219 ParamsWithLogging generator;
220 generator.call.send_side_bwe = true;
221 generator.video[0] = {
222 true, 352, 288, 30, 700000, 700000, 700000, false,
223 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
224 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
225 kTestDurationSec};
226 fixture->RunWithAnalyzer(generator);
227}
228*/
229#endif // defined(RTC_ENABLE_VP9)
230
231TEST(PCFullStackTest, ParisQcifWithoutPacketLoss) {
232 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
233 CreateNetworkEmulationManager();
234 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200235 "pc_net_delay_0_0_plr_0", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200236 CreateTwoNetworkLinks(network_emulation_manager.get(),
237 BuiltInNetworkBehaviorConfig()),
238 [](PeerConfigurer* alice) {
239 VideoConfig video(176, 144, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200240 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000241 auto frame_generator = CreateFromYuvFileFrameGenerator(
242 video, ClipNameToClipPath("paris_qcif"));
243 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200244 },
245 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100246 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100247 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200248 run_params.use_flex_fec = false;
249 run_params.use_ulp_fec = false;
250 fixture->Run(std::move(run_params));
251}
252
Danil Chapovalov636865e2020-06-03 14:11:26 +0200253TEST(PCGenericDescriptorTest, ForemanCifWithoutPacketLoss) {
Artem Titov137f6c82019-05-17 10:51:15 +0200254 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
255 CreateNetworkEmulationManager();
256 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200257 "pc_foreman_cif_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200258 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200259 CreateTwoNetworkLinks(network_emulation_manager.get(),
260 BuiltInNetworkBehaviorConfig()),
261 [](PeerConfigurer* alice) {
262 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200263 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000264 auto frame_generator = CreateFromYuvFileFrameGenerator(
265 video, ClipNameToClipPath("foreman_cif"));
266 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200267 },
268 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100269 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100270 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200271 run_params.use_flex_fec = false;
272 run_params.use_ulp_fec = false;
273 fixture->Run(std::move(run_params));
274}
275
Danil Chapovalov636865e2020-06-03 14:11:26 +0200276TEST(PCGenericDescriptorTest, ForemanCif30kbpsWithoutPacketLoss) {
Artem Titov137f6c82019-05-17 10:51:15 +0200277 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
278 CreateNetworkEmulationManager();
279 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200280 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200281 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200282 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200283 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
284 [](PeerConfigurer* alice) {
285 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200286 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000287 auto frame_generator = CreateFromYuvFileFrameGenerator(
288 video, ClipNameToClipPath("foreman_cif"));
289 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200290
Niels Möller29d59a12020-06-22 14:48:10 +0200291 BitrateSettings bitrate_settings;
292 bitrate_settings.min_bitrate_bps = 30000;
293 bitrate_settings.start_bitrate_bps = 30000;
294 bitrate_settings.max_bitrate_bps = 30000;
295 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200296 },
297 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100298 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100299 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200300 run_params.use_flex_fec = false;
301 run_params.use_ulp_fec = false;
302 fixture->Run(std::move(run_params));
303}
304
305// TODO(webrtc:9722): Remove when experiment is cleaned up.
Danil Chapovalov636865e2020-06-03 14:11:26 +0200306TEST(PCGenericDescriptorTest,
307 ForemanCif30kbpsWithoutPacketLossTrustedRateControl) {
Artem Titov137f6c82019-05-17 10:51:15 +0200308 test::ScopedFieldTrials override_field_trials(
309 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
310 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
311 CreateNetworkEmulationManager();
312 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200313 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200314 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_trusted_rate_ctrl_generic_"
315 "descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200316 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200317 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
318 [](PeerConfigurer* alice) {
319 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200320 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000321 auto frame_generator = CreateFromYuvFileFrameGenerator(
322 video, ClipNameToClipPath("foreman_cif"));
323 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200324
Niels Möller29d59a12020-06-22 14:48:10 +0200325 BitrateSettings bitrate_settings;
326 bitrate_settings.min_bitrate_bps = 30000;
327 bitrate_settings.start_bitrate_bps = 30000;
328 bitrate_settings.max_bitrate_bps = 30000;
329 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200330 },
331 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100332 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100333 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200334 run_params.use_flex_fec = false;
335 run_params.use_ulp_fec = false;
336 fixture->Run(std::move(run_params));
337}
338
339// Link capacity below default start rate.
340TEST(PCFullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
341 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
342 CreateNetworkEmulationManager();
343 BuiltInNetworkBehaviorConfig config;
344 config.link_capacity_kbps = 150;
345 auto fixture = CreateTestFixture(
346 "pc_foreman_cif_link_150kbps_net_delay_0_0_plr_0",
Artem Titov1ff3c582020-07-01 15:20:37 +0200347 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200348 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
349 [](PeerConfigurer* alice) {
350 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200351 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000352 auto frame_generator = CreateFromYuvFileFrameGenerator(
353 video, ClipNameToClipPath("foreman_cif"));
354 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200355 },
356 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100357 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100358 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200359 run_params.use_flex_fec = false;
360 run_params.use_ulp_fec = false;
361 fixture->Run(std::move(run_params));
362}
363
Artem Titov65428262019-07-02 16:48:02 +0200364TEST(PCFullStackTest, ForemanCifLink130kbps100msDelay1PercentPacketLossUlpfec) {
365 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
366 CreateNetworkEmulationManager();
367 BuiltInNetworkBehaviorConfig config;
368 config.link_capacity_kbps = 130;
369 config.queue_delay_ms = 100;
370 config.loss_percent = 1;
371 auto fixture = CreateTestFixture(
372 "pc_foreman_cif_link_130kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200373 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200374 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
375 [](PeerConfigurer* alice) {
376 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200377 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000378 auto frame_generator = CreateFromYuvFileFrameGenerator(
379 video, ClipNameToClipPath("foreman_cif"));
380 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov65428262019-07-02 16:48:02 +0200381 },
382 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100383 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100384 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov65428262019-07-02 16:48:02 +0200385 run_params.use_flex_fec = false;
386 run_params.use_ulp_fec = true;
387 fixture->Run(std::move(run_params));
388}
389
390TEST(PCFullStackTest, ForemanCifLink50kbps100msDelay1PercentPacketLossUlpfec) {
391 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
392 CreateNetworkEmulationManager();
393 BuiltInNetworkBehaviorConfig config;
394 config.link_capacity_kbps = 50;
395 config.queue_delay_ms = 100;
396 config.loss_percent = 1;
397 auto fixture = CreateTestFixture(
398 "pc_foreman_cif_link_50kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200399 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200400 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
401 [](PeerConfigurer* alice) {
402 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200403 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000404 auto frame_generator = CreateFromYuvFileFrameGenerator(
405 video, ClipNameToClipPath("foreman_cif"));
406 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov65428262019-07-02 16:48:02 +0200407 },
408 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100409 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100410 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov65428262019-07-02 16:48:02 +0200411 run_params.use_flex_fec = false;
412 run_params.use_ulp_fec = true;
413 fixture->Run(std::move(run_params));
414}
415
Artem Titov137f6c82019-05-17 10:51:15 +0200416// Restricted network and encoder overproducing by 30%.
417TEST(PCFullStackTest, ForemanCifLink150kbpsBadRateController) {
418 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
419 CreateNetworkEmulationManager();
420 BuiltInNetworkBehaviorConfig config;
421 config.link_capacity_kbps = 150;
422 config.queue_length_packets = 30;
423 config.queue_delay_ms = 100;
424 auto fixture = CreateTestFixture(
425 "pc_foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30",
Artem Titov1ff3c582020-07-01 15:20:37 +0200426 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200427 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
428 [](PeerConfigurer* alice) {
429 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200430 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000431 auto frame_generator = CreateFromYuvFileFrameGenerator(
432 video, ClipNameToClipPath("foreman_cif"));
433 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200434 },
435 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100436 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100437 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200438 run_params.use_flex_fec = false;
439 run_params.use_ulp_fec = false;
440 run_params.video_encoder_bitrate_multiplier = 1.30;
441 fixture->Run(std::move(run_params));
442}
443
444// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
445// Packet rate and loss are low enough that loss will happen with ~3s interval.
446// This triggers protection overhead to toggle between zero and non-zero.
447// Link queue is restrictive enough to trigger loss on probes.
448TEST(PCFullStackTest, ForemanCifMediaCapacitySmallLossAndQueue) {
449 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
450 CreateNetworkEmulationManager();
451 BuiltInNetworkBehaviorConfig config;
452 config.link_capacity_kbps = 250;
453 config.queue_length_packets = 10;
454 config.queue_delay_ms = 100;
455 config.loss_percent = 1;
456 auto fixture = CreateTestFixture(
457 "pc_foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
Artem Titov1ff3c582020-07-01 15:20:37 +0200458 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200459 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
460 [](PeerConfigurer* alice) {
461 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200462 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000463 auto frame_generator = CreateFromYuvFileFrameGenerator(
464 video, ClipNameToClipPath("foreman_cif"));
465 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200466 },
467 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100468 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100469 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200470 run_params.use_flex_fec = false;
471 run_params.use_ulp_fec = false;
472 run_params.video_encoder_bitrate_multiplier = 1.30;
473 fixture->Run(std::move(run_params));
474}
475
Danil Chapovalov636865e2020-06-03 14:11:26 +0200476TEST(PCGenericDescriptorTest, ForemanCifPlr5) {
Artem Titov137f6c82019-05-17 10:51:15 +0200477 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
478 CreateNetworkEmulationManager();
479 BuiltInNetworkBehaviorConfig config;
480 config.loss_percent = 5;
481 config.queue_delay_ms = 50;
482 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200483 "pc_foreman_cif_delay_50_0_plr_5_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200484 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200485 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
486 [](PeerConfigurer* alice) {
487 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200488 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000489 auto frame_generator = CreateFromYuvFileFrameGenerator(
490 video, ClipNameToClipPath("foreman_cif"));
491 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200492 },
493 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100494 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100495 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200496 run_params.use_flex_fec = false;
497 run_params.use_ulp_fec = false;
498 fixture->Run(std::move(run_params));
499}
500
Danil Chapovalov636865e2020-06-03 14:11:26 +0200501TEST(PCGenericDescriptorTest, ForemanCifPlr5Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200502 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
503 CreateNetworkEmulationManager();
504 BuiltInNetworkBehaviorConfig config;
505 config.loss_percent = 5;
506 config.queue_delay_ms = 50;
507 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200508 "pc_foreman_cif_delay_50_0_plr_5_ulpfec_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200509 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200510 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
511 [](PeerConfigurer* alice) {
512 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200513 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000514 auto frame_generator = CreateFromYuvFileFrameGenerator(
515 video, ClipNameToClipPath("foreman_cif"));
516 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200517 },
518 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100519 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100520 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200521 run_params.use_flex_fec = false;
522 run_params.use_ulp_fec = true;
523 fixture->Run(std::move(run_params));
524}
525
526TEST(PCFullStackTest, ForemanCifPlr5Flexfec) {
527 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
528 CreateNetworkEmulationManager();
529 BuiltInNetworkBehaviorConfig config;
530 config.loss_percent = 5;
531 config.queue_delay_ms = 50;
532 auto fixture = CreateTestFixture(
533 "pc_foreman_cif_delay_50_0_plr_5_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200534 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200535 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
536 [](PeerConfigurer* alice) {
537 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200538 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000539 auto frame_generator = CreateFromYuvFileFrameGenerator(
540 video, ClipNameToClipPath("foreman_cif"));
541 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200542 },
543 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100544 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100545 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200546 run_params.use_flex_fec = true;
547 run_params.use_ulp_fec = false;
548 fixture->Run(std::move(run_params));
549}
550
551TEST(PCFullStackTest, ForemanCif500kbpsPlr3Flexfec) {
552 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
553 CreateNetworkEmulationManager();
554 BuiltInNetworkBehaviorConfig config;
555 config.loss_percent = 3;
556 config.link_capacity_kbps = 500;
557 config.queue_delay_ms = 50;
558 auto fixture = CreateTestFixture(
559 "pc_foreman_cif_500kbps_delay_50_0_plr_3_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200560 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200561 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
562 [](PeerConfigurer* alice) {
563 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200564 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000565 auto frame_generator = CreateFromYuvFileFrameGenerator(
566 video, ClipNameToClipPath("foreman_cif"));
567 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200568 },
569 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100570 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100571 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200572 run_params.use_flex_fec = true;
573 run_params.use_ulp_fec = false;
574 fixture->Run(std::move(run_params));
575}
576
577TEST(PCFullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
578 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
579 CreateNetworkEmulationManager();
580 BuiltInNetworkBehaviorConfig config;
581 config.loss_percent = 3;
582 config.link_capacity_kbps = 500;
583 config.queue_delay_ms = 50;
584 auto fixture = CreateTestFixture(
585 "pc_foreman_cif_500kbps_delay_50_0_plr_3_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200586 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200587 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
588 [](PeerConfigurer* alice) {
589 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200590 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000591 auto frame_generator = CreateFromYuvFileFrameGenerator(
592 video, ClipNameToClipPath("foreman_cif"));
593 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200594 },
595 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100596 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100597 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200598 run_params.use_flex_fec = false;
599 run_params.use_ulp_fec = true;
600 fixture->Run(std::move(run_params));
601}
602
603#if defined(WEBRTC_USE_H264)
604TEST(PCFullStackTest, ForemanCifWithoutPacketlossH264) {
605 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
606 CreateNetworkEmulationManager();
607 auto fixture = CreateTestFixture(
608 "pc_foreman_cif_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200609 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200610 CreateTwoNetworkLinks(network_emulation_manager.get(),
611 BuiltInNetworkBehaviorConfig()),
612 [](PeerConfigurer* alice) {
613 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200614 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000615 auto frame_generator = CreateFromYuvFileFrameGenerator(
616 video, ClipNameToClipPath("foreman_cif"));
617 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200618 },
619 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100620 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100621 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200622 run_params.use_flex_fec = false;
623 run_params.use_ulp_fec = false;
624 fixture->Run(std::move(run_params));
625}
626
Artem Titov85a9d912019-05-29 14:36:50 +0200627TEST(PCFullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200628 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
629 CreateNetworkEmulationManager();
630 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200631 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200632 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200633 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200634 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
635 [](PeerConfigurer* alice) {
636 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200637 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000638 auto frame_generator = CreateFromYuvFileFrameGenerator(
639 video, ClipNameToClipPath("foreman_cif"));
640 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200641
Niels Möller29d59a12020-06-22 14:48:10 +0200642 BitrateSettings bitrate_settings;
643 bitrate_settings.min_bitrate_bps = 30000;
644 bitrate_settings.start_bitrate_bps = 30000;
645 bitrate_settings.max_bitrate_bps = 30000;
646 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200647 },
648 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100649 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100650 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200651 run_params.use_flex_fec = false;
652 run_params.use_ulp_fec = false;
653 fixture->Run(std::move(run_params));
654}
655
Danil Chapovalov636865e2020-06-03 14:11:26 +0200656TEST(PCGenericDescriptorTest, ForemanCifPlr5H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200657 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
658 CreateNetworkEmulationManager();
659 BuiltInNetworkBehaviorConfig config;
660 config.loss_percent = 5;
661 config.queue_delay_ms = 50;
662 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200663 "pc_foreman_cif_delay_50_0_plr_5_H264_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200664 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200665 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
666 [](PeerConfigurer* alice) {
667 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200668 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000669 auto frame_generator = CreateFromYuvFileFrameGenerator(
670 video, ClipNameToClipPath("foreman_cif"));
671 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200672 },
673 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100674 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100675 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200676 run_params.use_flex_fec = false;
677 run_params.use_ulp_fec = false;
678 fixture->Run(std::move(run_params));
679}
680
681TEST(PCFullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
682 test::ScopedFieldTrials override_field_trials(
683 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
684
685 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
686 CreateNetworkEmulationManager();
687 BuiltInNetworkBehaviorConfig config;
688 config.loss_percent = 5;
689 config.queue_delay_ms = 50;
690 auto fixture = CreateTestFixture(
691 "pc_foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr",
Artem Titov1ff3c582020-07-01 15:20:37 +0200692 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200693 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
694 [](PeerConfigurer* alice) {
695 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200696 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000697 auto frame_generator = CreateFromYuvFileFrameGenerator(
698 video, ClipNameToClipPath("foreman_cif"));
699 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200700 },
701 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100702 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100703 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200704 run_params.use_flex_fec = false;
705 run_params.use_ulp_fec = false;
706 fixture->Run(std::move(run_params));
707}
708
709TEST(PCFullStackTest, ForemanCifPlr5H264Flexfec) {
710 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
711 CreateNetworkEmulationManager();
712 BuiltInNetworkBehaviorConfig config;
713 config.loss_percent = 5;
714 config.queue_delay_ms = 50;
715 auto fixture = CreateTestFixture(
716 "pc_foreman_cif_delay_50_0_plr_5_H264_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200717 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200718 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
719 [](PeerConfigurer* alice) {
720 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200721 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000722 auto frame_generator = CreateFromYuvFileFrameGenerator(
723 video, ClipNameToClipPath("foreman_cif"));
724 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200725 },
726 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100727 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100728 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200729 run_params.use_flex_fec = true;
730 run_params.use_ulp_fec = false;
731 fixture->Run(std::move(run_params));
732}
733
734// Ulpfec with H264 is an unsupported combination, so this test is only useful
735// for debugging. It is therefore disabled by default.
736TEST(PCFullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
737 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
738 CreateNetworkEmulationManager();
739 BuiltInNetworkBehaviorConfig config;
740 config.loss_percent = 5;
741 config.queue_delay_ms = 50;
742 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200743 "pc_foreman_cif_delay_50_0_plr_5_H264_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200744 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200745 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
746 [](PeerConfigurer* alice) {
747 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200748 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000749 auto frame_generator = CreateFromYuvFileFrameGenerator(
750 video, ClipNameToClipPath("foreman_cif"));
751 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200752 },
753 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100754 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100755 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200756 run_params.use_flex_fec = false;
757 run_params.use_ulp_fec = true;
758 fixture->Run(std::move(run_params));
759}
760#endif // defined(WEBRTC_USE_H264)
761
762TEST(PCFullStackTest, ForemanCif500kbps) {
763 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
764 CreateNetworkEmulationManager();
765 BuiltInNetworkBehaviorConfig config;
766 config.queue_length_packets = 0;
767 config.queue_delay_ms = 0;
768 config.link_capacity_kbps = 500;
769 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200770 "pc_foreman_cif_500kbps", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200771 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
772 [](PeerConfigurer* alice) {
773 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200774 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000775 auto frame_generator = CreateFromYuvFileFrameGenerator(
776 video, ClipNameToClipPath("foreman_cif"));
777 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200778 },
779 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100780 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100781 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200782 run_params.use_flex_fec = false;
783 run_params.use_ulp_fec = false;
784 fixture->Run(std::move(run_params));
785}
786
787TEST(PCFullStackTest, ForemanCif500kbpsLimitedQueue) {
788 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
789 CreateNetworkEmulationManager();
790 BuiltInNetworkBehaviorConfig config;
791 config.queue_length_packets = 32;
792 config.queue_delay_ms = 0;
793 config.link_capacity_kbps = 500;
794 auto fixture = CreateTestFixture(
795 "pc_foreman_cif_500kbps_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200796 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200797 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
798 [](PeerConfigurer* alice) {
799 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200800 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000801 auto frame_generator = CreateFromYuvFileFrameGenerator(
802 video, ClipNameToClipPath("foreman_cif"));
803 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200804 },
805 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100806 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100807 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200808 run_params.use_flex_fec = false;
809 run_params.use_ulp_fec = false;
810 fixture->Run(std::move(run_params));
811}
812
813TEST(PCFullStackTest, ForemanCif500kbps100ms) {
814 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
815 CreateNetworkEmulationManager();
816 BuiltInNetworkBehaviorConfig config;
817 config.queue_length_packets = 0;
818 config.queue_delay_ms = 100;
819 config.link_capacity_kbps = 500;
820 auto fixture = CreateTestFixture(
821 "pc_foreman_cif_500kbps_100ms",
Artem Titov1ff3c582020-07-01 15:20:37 +0200822 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200823 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
824 [](PeerConfigurer* alice) {
825 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200826 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000827 auto frame_generator = CreateFromYuvFileFrameGenerator(
828 video, ClipNameToClipPath("foreman_cif"));
829 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200830 },
831 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100832 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100833 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200834 run_params.use_flex_fec = false;
835 run_params.use_ulp_fec = false;
836 fixture->Run(std::move(run_params));
837}
838
Danil Chapovalov636865e2020-06-03 14:11:26 +0200839TEST(PCGenericDescriptorTest, ForemanCif500kbps100msLimitedQueue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200840 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
841 CreateNetworkEmulationManager();
842 BuiltInNetworkBehaviorConfig config;
843 config.queue_length_packets = 32;
844 config.queue_delay_ms = 100;
845 config.link_capacity_kbps = 500;
846 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200847 "pc_foreman_cif_500kbps_100ms_32pkts_queue_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200848 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200849 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
850 [](PeerConfigurer* alice) {
851 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200852 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000853 auto frame_generator = CreateFromYuvFileFrameGenerator(
854 video, ClipNameToClipPath("foreman_cif"));
855 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200856 },
857 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100858 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100859 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200860 run_params.use_flex_fec = false;
861 run_params.use_ulp_fec = false;
862 fixture->Run(std::move(run_params));
863}
864
865/*
866// TODO(bugs.webrtc.org/10639) we need to disable send side bwe, but it isn't
Artem Titov39483c62019-07-19 17:03:52 +0200867// supported in PC level framework.
Artem Titov137f6c82019-05-17 10:51:15 +0200868TEST(PCFullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
869 auto fixture = CreateVideoQualityTestFixture();
870 ParamsWithLogging foreman_cif;
871 foreman_cif.call.send_side_bwe = false;
872 foreman_cif.video[0] = {
873 true, 352, 288, 30,
874 30000, 500000, 2000000, false,
875 "VP8", 1, 0, 0,
876 false, false, true, ClipNameToClipPath("foreman_cif")};
877 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
878 0.0, 0.0, kTestDurationSec};
879 foreman_cif.config->queue_length_packets = 32;
880 foreman_cif.config->queue_delay_ms = 100;
881 foreman_cif.config->link_capacity_kbps = 500;
882 fixture->RunWithAnalyzer(foreman_cif);
883}
884*/
885
886TEST(PCFullStackTest, ForemanCif1000kbps100msLimitedQueue) {
887 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
888 CreateNetworkEmulationManager();
889 BuiltInNetworkBehaviorConfig config;
890 config.queue_length_packets = 32;
891 config.queue_delay_ms = 100;
892 config.link_capacity_kbps = 1000;
893 auto fixture = CreateTestFixture(
894 "pc_foreman_cif_1000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200895 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200896 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
897 [](PeerConfigurer* alice) {
898 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200899 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000900 auto frame_generator = CreateFromYuvFileFrameGenerator(
901 video, ClipNameToClipPath("foreman_cif"));
902 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200903 },
904 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100905 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100906 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200907 run_params.use_flex_fec = false;
908 run_params.use_ulp_fec = false;
909 fixture->Run(std::move(run_params));
910}
911
912// TODO(sprang): Remove this if we have the similar ModerateLimits below?
913TEST(PCFullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
914 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
915 CreateNetworkEmulationManager();
916 BuiltInNetworkBehaviorConfig config;
917 config.queue_length_packets = 32;
918 config.queue_delay_ms = 100;
919 config.link_capacity_kbps = 2000;
920 auto fixture = CreateTestFixture(
921 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200922 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200923 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
924 [](PeerConfigurer* alice) {
925 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200926 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000927 auto frame_generator = CreateFromYuvFileFrameGenerator(
928 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
929 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200930 },
931 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100932 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100933 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200934 run_params.use_flex_fec = false;
935 run_params.use_ulp_fec = false;
936 fixture->Run(std::move(run_params));
937}
938
939// TODO(webrtc:9722): Remove when experiment is cleaned up.
940TEST(PCFullStackTest, ConferenceMotionHd1TLModerateLimitsWhitelistVp8) {
941 test::ScopedFieldTrials override_field_trials(
942 AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
943 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
944 CreateNetworkEmulationManager();
945 BuiltInNetworkBehaviorConfig config;
946 config.queue_length_packets = 50;
947 config.loss_percent = 3;
948 config.queue_delay_ms = 100;
949 config.link_capacity_kbps = 2000;
950 auto fixture = CreateTestFixture(
951 "pc_conference_motion_hd_1tl_moderate_limits_trusted_rate_ctrl",
Artem Titov1ff3c582020-07-01 15:20:37 +0200952 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200953 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
954 [](PeerConfigurer* alice) {
955 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200956 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000957 auto frame_generator = CreateFromYuvFileFrameGenerator(
958 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
959 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200960 },
961 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100962 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100963 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200964 run_params.use_flex_fec = false;
965 run_params.use_ulp_fec = false;
966 fixture->Run(std::move(run_params));
967}
968
969/*
970// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Danil Chapovalov636865e2020-06-03 14:11:26 +0200971TEST(PCGenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Artem Titov137f6c82019-05-17 10:51:15 +0200972 auto fixture = CreateVideoQualityTestFixture();
973 ParamsWithLogging conf_motion_hd;
974 conf_motion_hd.call.send_side_bwe = true;
975 conf_motion_hd.video[0] = {
976 true, 1280,
977 720, 50,
978 30000, 3000000,
979 3000000, false,
980 "VP8", 2,
981 -1, 0,
982 false, false,
983 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
984 conf_motion_hd.analyzer = {
Danil Chapovalov636865e2020-06-03 14:11:26 +0200985 "conference_motion_hd_2tl_moderate_limits_generic_descriptor", 0.0, 0.0,
Artem Titov137f6c82019-05-17 10:51:15 +0200986 kTestDurationSec};
987 conf_motion_hd.config->queue_length_packets = 50;
988 conf_motion_hd.config->loss_percent = 3;
989 conf_motion_hd.config->queue_delay_ms = 100;
990 conf_motion_hd.config->link_capacity_kbps = 2000;
991 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
992 fixture->RunWithAnalyzer(conf_motion_hd);
993}
994
995// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
996TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimits) {
997 auto fixture = CreateVideoQualityTestFixture();
998 ParamsWithLogging conf_motion_hd;
999 conf_motion_hd.call.send_side_bwe = true;
1000 conf_motion_hd.video[0] = {
1001 true, 1280,
1002 720, 50,
1003 30000, 3000000,
1004 3000000, false,
1005 "VP8", 3,
1006 -1, 0,
1007 false, false,
1008 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1009 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
1010 0.0, kTestDurationSec};
1011 conf_motion_hd.config->queue_length_packets = 50;
1012 conf_motion_hd.config->loss_percent = 3;
1013 conf_motion_hd.config->queue_delay_ms = 100;
1014 conf_motion_hd.config->link_capacity_kbps = 2000;
1015 fixture->RunWithAnalyzer(conf_motion_hd);
1016}
1017
1018// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1019TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
1020 auto fixture = CreateVideoQualityTestFixture();
1021 ParamsWithLogging conf_motion_hd;
1022 conf_motion_hd.call.send_side_bwe = true;
1023 conf_motion_hd.video[0] = {
1024 true, 1280,
1025 720, 50,
1026 30000, 3000000,
1027 3000000, false,
1028 "VP8", 4,
1029 -1, 0,
1030 false, false,
1031 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1032 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
1033 0.0, kTestDurationSec};
1034 conf_motion_hd.config->queue_length_packets = 50;
1035 conf_motion_hd.config->loss_percent = 3;
1036 conf_motion_hd.config->queue_delay_ms = 100;
1037 conf_motion_hd.config->link_capacity_kbps = 2000;
1038 fixture->RunWithAnalyzer(conf_motion_hd);
1039}
1040
1041// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1042TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
1043 test::ScopedFieldTrials field_trial(
1044 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
1045 auto fixture = CreateVideoQualityTestFixture();
1046 ParamsWithLogging conf_motion_hd;
1047 conf_motion_hd.call.send_side_bwe = true;
1048 conf_motion_hd.video[0] = {
1049 true, 1280,
1050 720, 50,
1051 30000, 3000000,
1052 3000000, false,
1053 "VP8", 3,
1054 -1, 0,
1055 false, false,
1056 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1057 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
1058 0.0, 0.0, kTestDurationSec};
1059 conf_motion_hd.config->queue_length_packets = 50;
1060 conf_motion_hd.config->loss_percent = 3;
1061 conf_motion_hd.config->queue_delay_ms = 100;
1062 conf_motion_hd.config->link_capacity_kbps = 2000;
1063 fixture->RunWithAnalyzer(conf_motion_hd);
1064}
1065
1066// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1067TEST(PCFullStackTest,
1068 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
1069 auto fixture = CreateVideoQualityTestFixture();
1070 test::ScopedFieldTrials field_trial(
1071 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
1072 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
1073 ParamsWithLogging conf_motion_hd;
1074 conf_motion_hd.call.send_side_bwe = true;
1075 conf_motion_hd.video[0] = {
1076 true, 1280,
1077 720, 50,
1078 30000, 3000000,
1079 3000000, false,
1080 "VP8", 3,
1081 -1, 0,
1082 false, false,
1083 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1084 conf_motion_hd.analyzer = {
1085 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
1086 kTestDurationSec};
1087 conf_motion_hd.config->queue_length_packets = 50;
1088 conf_motion_hd.config->loss_percent = 3;
1089 conf_motion_hd.config->queue_delay_ms = 100;
1090 conf_motion_hd.config->link_capacity_kbps = 2000;
1091 fixture->RunWithAnalyzer(conf_motion_hd);
1092}
1093*/
1094
1095#if defined(RTC_ENABLE_VP9)
1096TEST(PCFullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
1097 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1098 CreateNetworkEmulationManager();
1099 BuiltInNetworkBehaviorConfig config;
1100 config.queue_length_packets = 32;
1101 config.queue_delay_ms = 100;
1102 config.link_capacity_kbps = 2000;
1103 auto fixture = CreateTestFixture(
1104 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9",
Artem Titov1ff3c582020-07-01 15:20:37 +02001105 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +02001106 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1107 [](PeerConfigurer* alice) {
1108 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +02001109 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001110 auto frame_generator = CreateFromYuvFileFrameGenerator(
1111 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1112 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +02001113 },
1114 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001115 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001116 run_params.video_codecs = {VideoCodecConfig(
1117 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1118 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov137f6c82019-05-17 10:51:15 +02001119 run_params.use_flex_fec = false;
1120 run_params.use_ulp_fec = false;
1121 fixture->Run(std::move(run_params));
1122}
1123#endif
1124
Artem Titov39483c62019-07-19 17:03:52 +02001125TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_NoConferenceMode) {
1126 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1127 CreateNetworkEmulationManager();
1128 auto fixture = CreateTestFixture(
1129 "pc_screenshare_slides_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001130 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001131 CreateTwoNetworkLinks(network_emulation_manager.get(),
1132 BuiltInNetworkBehaviorConfig()),
1133 [](PeerConfigurer* alice) {
1134 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001135 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001136 video.content_hint = VideoTrackInterface::ContentHint::kText;
1137 auto frame_generator = CreateScreenShareFrameGenerator(
1138 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001139 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001140 },
1141 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001142 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001143 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001144 run_params.use_flex_fec = false;
1145 run_params.use_ulp_fec = false;
1146 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001147}
1148
Artem Titov39483c62019-07-19 17:03:52 +02001149TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL) {
1150 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1151 CreateNetworkEmulationManager();
1152 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001153 "pc_screenshare_slides", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001154 CreateTwoNetworkLinks(network_emulation_manager.get(),
1155 BuiltInNetworkBehaviorConfig()),
1156 [](PeerConfigurer* alice) {
1157 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001158 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001159 video.content_hint = VideoTrackInterface::ContentHint::kText;
1160 auto frame_generator = CreateScreenShareFrameGenerator(
1161 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001162 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001163 },
1164 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001165 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001166 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001167 run_params.use_flex_fec = false;
1168 run_params.use_ulp_fec = false;
1169 run_params.use_conference_mode = true;
1170 fixture->Run(std::move(run_params));
1171}
1172
1173// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1174#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1175TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_NoConferenceMode) {
1176 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1177 CreateNetworkEmulationManager();
1178 auto fixture = CreateTestFixture(
1179 "pc_screenshare_slides_simulcast_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001180 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001181 CreateTwoNetworkLinks(network_emulation_manager.get(),
1182 BuiltInNetworkBehaviorConfig()),
1183 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001184 VideoConfig video(1850, 1110, 30);
Artem Titov4b9701e2019-08-28 13:48:02 +02001185 video.simulcast_config = VideoSimulcastConfig(2, 1);
1186 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001187 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001188 video.content_hint = VideoTrackInterface::ContentHint::kText;
1189 auto frame_generator = CreateScreenShareFrameGenerator(
1190 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001191 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001192 },
1193 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001194 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001195 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001196 run_params.use_flex_fec = false;
1197 run_params.use_ulp_fec = false;
1198 fixture->Run(std::move(run_params));
1199}
1200
1201TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast) {
1202 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1203 CreateNetworkEmulationManager();
1204 auto fixture = CreateTestFixture(
1205 "pc_screenshare_slides_simulcast",
Artem Titov1ff3c582020-07-01 15:20:37 +02001206 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001207 CreateTwoNetworkLinks(network_emulation_manager.get(),
1208 BuiltInNetworkBehaviorConfig()),
1209 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001210 VideoConfig video(1850, 1110, 30);
Artem Titov4b9701e2019-08-28 13:48:02 +02001211 video.simulcast_config = VideoSimulcastConfig(2, 1);
1212 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001213 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001214 video.content_hint = VideoTrackInterface::ContentHint::kText;
1215 auto frame_generator = CreateScreenShareFrameGenerator(
1216 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001217 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001218 },
1219 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001220 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001221 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001222 run_params.use_flex_fec = false;
1223 run_params.use_ulp_fec = false;
1224 run_params.use_conference_mode = true;
1225 fixture->Run(std::move(run_params));
1226}
1227#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1228
1229/*
Artem Titov137f6c82019-05-17 10:51:15 +02001230#if !defined(WEBRTC_MAC)
Artem Titov137f6c82019-05-17 10:51:15 +02001231// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1232#if !defined(WEBRTC_WIN)
1233const char kScreenshareSimulcastVariableFramerateExperiment[] =
Artem Titov137f6c82019-05-17 10:51:15 +02001234 "WebRTC-VP8VariableFramerateScreenshare/"
1235 "Enabled,min_fps:5.0,min_qp:15,undershoot:30/";
1236// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Artem Titov137f6c82019-05-17 10:51:15 +02001237TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_Variable_Framerate) {
1238 test::ScopedFieldTrials field_trial(
1239 AppendFieldTrials(kScreenshareSimulcastVariableFramerateExperiment));
1240 auto fixture = CreateVideoQualityTestFixture();
1241 ParamsWithLogging screenshare;
1242 screenshare.call.send_side_bwe = true;
1243 screenshare.screenshare[0] = {true, false, 10};
1244 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1245 2500000, false, "VP8", 2, 1, 400000,
1246 false, false, false, ""};
1247 screenshare.analyzer = {"screenshare_slides_simulcast_variable_framerate",
1248 0.0, 0.0, kTestDurationSec};
1249 ParamsWithLogging screenshare_params_high;
1250 screenshare_params_high.video[0] = {
1251 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1252 "VP8", 2, 0, 400000, false, false, false, ""};
1253 VideoQualityTest::Params screenshare_params_low;
1254 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1255 1000000, false, "VP8", 2, 0, 400000,
1256 false, false, false, ""};
1257
1258 std::vector<VideoStream> streams = {
1259 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1260 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1261 screenshare.ss[0] = {
1262 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1263 false};
1264 fixture->RunWithAnalyzer(screenshare);
1265}
1266
1267// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1268TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Artem Titov137f6c82019-05-17 10:51:15 +02001269 auto fixture = CreateVideoQualityTestFixture();
1270 ParamsWithLogging screenshare;
1271 screenshare.call.send_side_bwe = true;
1272 screenshare.screenshare[0] = {true, false, 10};
1273 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1274 2500000, false, "VP8", 2, 1, 400000,
1275 false, false, false, ""};
1276 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
1277 kTestDurationSec};
1278 VideoQualityTest::Params screenshare_params_high;
1279 screenshare_params_high.video[0] = {
1280 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1281 "VP8", 2, 0, 400000, false, false, false, ""};
1282 VideoQualityTest::Params screenshare_params_low;
1283 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1284 1000000, false, "VP8", 2, 0, 400000,
1285 false, false, false, ""};
1286
1287 std::vector<VideoStream> streams = {
1288 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1289 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1290 screenshare.ss[0] = {
1291 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1292 false};
1293 fixture->RunWithAnalyzer(screenshare);
1294}
1295
1296#endif // !defined(WEBRTC_WIN)
1297#endif // !defined(WEBRTC_MAC)
1298
1299// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1300TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
1301 auto fixture = CreateVideoQualityTestFixture();
1302 ParamsWithLogging config;
1303 config.call.send_side_bwe = true;
1304 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
1305 1000000, false, "VP8", 2, 1, 400000,
1306 false, false, false, ""};
1307 config.screenshare[0] = {true, false, 10, 2};
1308 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
1309 kTestDurationSec};
1310 fixture->RunWithAnalyzer(config);
1311}
1312
1313// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Danil Chapovalov636865e2020-06-03 14:11:26 +02001314TEST(PCGenericDescriptorTest, ScreenshareSlidesVP8_2TL_LossyNet) {
Artem Titov137f6c82019-05-17 10:51:15 +02001315 auto fixture = CreateVideoQualityTestFixture();
1316 ParamsWithLogging screenshare;
1317 screenshare.call.send_side_bwe = true;
1318 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1319 1000000, false, "VP8", 2, 1, 400000,
1320 false, false, false, ""};
1321 screenshare.screenshare[0] = {true, false, 10};
Danil Chapovalov636865e2020-06-03 14:11:26 +02001322 screenshare.analyzer = {"screenshare_slides_lossy_net_generic_descriptor",
1323 0.0, 0.0, kTestDurationSec};
Artem Titov137f6c82019-05-17 10:51:15 +02001324 screenshare.config->loss_percent = 5;
1325 screenshare.config->queue_delay_ms = 200;
1326 screenshare.config->link_capacity_kbps = 500;
Danil Chapovalov636865e2020-06-03 14:11:26 +02001327 screenshare.call.generic_descriptor = true;
Artem Titov137f6c82019-05-17 10:51:15 +02001328 fixture->RunWithAnalyzer(screenshare);
1329}
1330
1331// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1332TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
1333 auto fixture = CreateVideoQualityTestFixture();
1334 ParamsWithLogging screenshare;
1335 screenshare.call.send_side_bwe = true;
1336 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1337 1000000, false, "VP8", 2, 1, 400000,
1338 false, false, false, ""};
1339 screenshare.screenshare[0] = {true, false, 10};
1340 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
1341 kTestDurationSec};
1342 screenshare.config->loss_percent = 10;
1343 screenshare.config->queue_delay_ms = 200;
1344 screenshare.config->link_capacity_kbps = 500;
1345 fixture->RunWithAnalyzer(screenshare);
1346}
1347
1348// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1349TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
1350 auto fixture = CreateVideoQualityTestFixture();
1351 ParamsWithLogging screenshare;
1352 screenshare.call.send_side_bwe = true;
1353 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1354 1000000, false, "VP8", 2, 1, 400000,
1355 false, false, false, ""};
1356 screenshare.screenshare[0] = {true, false, 10};
1357 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
1358 kTestDurationSec};
1359 screenshare.config->loss_percent = 5;
1360 screenshare.config->link_capacity_kbps = 200;
1361 screenshare.config->queue_length_packets = 30;
1362
1363 fixture->RunWithAnalyzer(screenshare);
1364}
1365
1366// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1367TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
1368 auto fixture = CreateVideoQualityTestFixture();
1369 ParamsWithLogging screenshare;
1370 screenshare.call.send_side_bwe = true;
1371 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1372 1000000, false, "VP8", 2, 1, 400000,
1373 false, false, false, ""};
1374 screenshare.screenshare[0] = {true, false, 10};
1375 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1376 kTestDurationSec};
1377 screenshare.config->loss_percent = 1;
1378 screenshare.config->link_capacity_kbps = 1200;
1379 screenshare.config->queue_length_packets = 30;
1380
1381 fixture->RunWithAnalyzer(screenshare);
1382}
1383
1384namespace {
1385// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1386// Since ParamsWithLogging::Video is not trivially destructible, we can't
1387// store these structs as const globals.
1388ParamsWithLogging::Video SvcVp9Video() {
1389 return ParamsWithLogging::Video{
1390 true, 1280,
1391 720, 30,
1392 800000, 2500000,
1393 2500000, false,
1394 "VP9", 3,
1395 2, 400000,
1396 false, false,
1397 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1398}
1399
1400ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1401 return ParamsWithLogging::Video{
1402 true, 1280,
1403 720, 30,
1404 800000, 2500000,
1405 2500000, false,
1406 "VP8", 3,
1407 2, 400000,
1408 false, false,
1409 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1410}
1411
1412ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1413 return ParamsWithLogging::Video{
1414 true, 640,
1415 360, 30,
1416 150000, 500000,
1417 700000, false,
1418 "VP8", 3,
1419 2, 400000,
1420 false, false,
1421 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1422}
1423
1424ParamsWithLogging::Video SimulcastVp8VideoLow() {
1425 return ParamsWithLogging::Video{
1426 true, 320,
1427 180, 30,
1428 30000, 150000,
1429 200000, false,
1430 "VP8", 3,
1431 2, 400000,
1432 false, false,
1433 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1434}
1435} // namespace
Artem Titov733a7812019-07-24 14:53:15 +02001436*/
Artem Titov137f6c82019-05-17 10:51:15 +02001437
1438#if defined(RTC_ENABLE_VP9)
1439
Artem Titov137f6c82019-05-17 10:51:15 +02001440TEST(PCFullStackTest, ScreenshareSlidesVP9_3SL_High_Fps) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001441 webrtc::test::ScopedFieldTrials override_trials(
1442 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1443 "Enabled,inter_layer_pred_mode:on/"));
Artem Titov733a7812019-07-24 14:53:15 +02001444 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1445 CreateNetworkEmulationManager();
1446 auto fixture = CreateTestFixture(
1447 "pc_screenshare_slides_vp9_3sl_high_fps",
Artem Titov1ff3c582020-07-01 15:20:37 +02001448 *network_emulation_manager->time_controller(),
Artem Titov733a7812019-07-24 14:53:15 +02001449 CreateTwoNetworkLinks(network_emulation_manager.get(),
1450 BuiltInNetworkBehaviorConfig()),
1451 [](PeerConfigurer* alice) {
1452 VideoConfig video(1850, 1110, 30);
1453 video.stream_label = "alice-video";
Artem Titov733a7812019-07-24 14:53:15 +02001454 video.simulcast_config = VideoSimulcastConfig(3, 2);
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001455 video.content_hint = VideoTrackInterface::ContentHint::kText;
1456 auto frame_generator = CreateScreenShareFrameGenerator(
1457 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001458 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov733a7812019-07-24 14:53:15 +02001459 },
1460 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001461 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001462 run_params.video_codecs = {VideoCodecConfig(
1463 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1464 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov733a7812019-07-24 14:53:15 +02001465 run_params.use_flex_fec = false;
1466 run_params.use_ulp_fec = false;
1467 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001468}
1469
Artem Titov1e49ab22019-07-30 13:17:25 +02001470TEST(PCFullStackTest, VP9SVC_3SL_High) {
1471 webrtc::test::ScopedFieldTrials override_trials(
1472 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1473 "Enabled,inter_layer_pred_mode:on/"));
1474 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1475 CreateNetworkEmulationManager();
1476 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001477 "pc_vp9svc_3sl_high", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001478 CreateTwoNetworkLinks(network_emulation_manager.get(),
1479 BuiltInNetworkBehaviorConfig()),
1480 [](PeerConfigurer* alice) {
1481 VideoConfig video(1280, 720, 30);
1482 video.stream_label = "alice-video";
Artem Titov1e49ab22019-07-30 13:17:25 +02001483 video.simulcast_config = VideoSimulcastConfig(3, 2);
1484 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001485 auto frame_generator = CreateFromYuvFileFrameGenerator(
1486 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1487 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov1e49ab22019-07-30 13:17:25 +02001488 },
1489 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001490 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001491 run_params.video_codecs = {VideoCodecConfig(
1492 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1493 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov1e49ab22019-07-30 13:17:25 +02001494 run_params.use_flex_fec = false;
1495 run_params.use_ulp_fec = false;
1496 fixture->Run(std::move(run_params));
1497}
1498
Artem Titov1e49ab22019-07-30 13:17:25 +02001499TEST(PCFullStackTest, VP9SVC_3SL_Low) {
1500 webrtc::test::ScopedFieldTrials override_trials(
1501 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1502 "Enabled,inter_layer_pred_mode:on/"));
1503 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1504 CreateNetworkEmulationManager();
1505 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001506 "pc_vp9svc_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001507 CreateTwoNetworkLinks(network_emulation_manager.get(),
1508 BuiltInNetworkBehaviorConfig()),
1509 [](PeerConfigurer* alice) {
1510 VideoConfig video(1280, 720, 30);
1511 video.stream_label = "alice-video";
Artem Titov1e49ab22019-07-30 13:17:25 +02001512 video.simulcast_config = VideoSimulcastConfig(3, 0);
1513 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001514 auto frame_generator = CreateFromYuvFileFrameGenerator(
1515 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1516 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov1e49ab22019-07-30 13:17:25 +02001517 },
1518 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001519 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001520 run_params.video_codecs = {VideoCodecConfig(
1521 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1522 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov1e49ab22019-07-30 13:17:25 +02001523 run_params.use_flex_fec = false;
1524 run_params.use_ulp_fec = false;
1525 fixture->Run(std::move(run_params));
1526}
1527
Artem Titov733a7812019-07-24 14:53:15 +02001528#endif // defined(RTC_ENABLE_VP9)
1529
1530/*
Artem Titov137f6c82019-05-17 10:51:15 +02001531// bugs.webrtc.org/9506
1532#if !defined(WEBRTC_MAC)
1533
1534// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1535TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1536 webrtc::test::ScopedFieldTrials override_trials(
1537 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1538 auto fixture = CreateVideoQualityTestFixture();
1539 ParamsWithLogging simulcast;
1540 simulcast.call.send_side_bwe = true;
1541 simulcast.video[0] = SvcVp9Video();
1542 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1543 simulcast.ss[0] = {
1544 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1545 std::vector<SpatialLayer>(), false};
1546 fixture->RunWithAnalyzer(simulcast);
1547}
1548
1549// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1550TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1551 webrtc::test::ScopedFieldTrials override_trials(
1552 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1553 auto fixture = CreateVideoQualityTestFixture();
1554 ParamsWithLogging simulcast;
1555 simulcast.call.send_side_bwe = true;
1556 simulcast.video[0] = SvcVp9Video();
1557 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1558 simulcast.ss[0] = {
1559 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1560 std::vector<SpatialLayer>(), false};
1561 fixture->RunWithAnalyzer(simulcast);
1562}
1563
1564// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1565TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1566 webrtc::test::ScopedFieldTrials override_trials(
1567 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1568 auto fixture = CreateVideoQualityTestFixture();
1569 ParamsWithLogging simulcast;
1570 simulcast.call.send_side_bwe = true;
1571 simulcast.video[0] = SvcVp9Video();
1572 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1573 simulcast.ss[0] = {
1574 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1575 std::vector<SpatialLayer>(), false};
1576 fixture->RunWithAnalyzer(simulcast);
1577}
1578
1579// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1580TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1581 webrtc::test::ScopedFieldTrials override_trials(
1582 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1583 auto fixture = CreateVideoQualityTestFixture();
1584 ParamsWithLogging simulcast;
1585 simulcast.call.send_side_bwe = true;
1586 simulcast.video[0] = SvcVp9Video();
1587 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1588 kTestDurationSec};
1589 simulcast.ss[0] = {
1590 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1591 std::vector<SpatialLayer>(), false};
1592 simulcast.config->link_capacity_kbps = 1000;
1593 simulcast.config->queue_delay_ms = 100;
1594 fixture->RunWithAnalyzer(simulcast);
1595}
1596
1597// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1598// TODO(webrtc:9722): Remove when experiment is cleaned up.
1599TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1600 webrtc::test::ScopedFieldTrials override_trials(
1601 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"
1602 "WebRTC-LibvpxVp9TrustedRateController/Enabled/"));
1603 auto fixture = CreateVideoQualityTestFixture();
1604 ParamsWithLogging simulcast;
1605 simulcast.call.send_side_bwe = true;
1606 simulcast.video[0] = SvcVp9Video();
1607 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1608 0.0, 0.0, kTestDurationSec};
1609 simulcast.ss[0] = {
1610 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1611 std::vector<SpatialLayer>(), false};
1612 simulcast.config->link_capacity_kbps = 1000;
1613 simulcast.config->queue_delay_ms = 100;
1614 fixture->RunWithAnalyzer(simulcast);
1615}
1616#endif // !defined(WEBRTC_MAC)
1617
1618#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001619*/
Artem Titov137f6c82019-05-17 10:51:15 +02001620
1621// Android bots can't handle FullHD, so disable the test.
1622// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1623#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
1624#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
1625#else
1626#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
1627#endif
Artem Titov137f6c82019-05-17 10:51:15 +02001628TEST(PCFullStackTest, MAYBE_SimulcastFullHdOveruse) {
Artem Titov137f6c82019-05-17 10:51:15 +02001629 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1630 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001631 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1632 CreateNetworkEmulationManager();
1633 BuiltInNetworkBehaviorConfig config;
1634 config.loss_percent = 0;
1635 config.queue_delay_ms = 100;
1636 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001637 "pc_simulcast_HD_high", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001638 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1639 [](PeerConfigurer* alice) {
1640 VideoConfig video(1920, 1080, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001641 video.simulcast_config = VideoSimulcastConfig(3, 2);
Artem Titov4b9701e2019-08-28 13:48:02 +02001642 video.temporal_layers_count = 3;
Artem Titov39483c62019-07-19 17:03:52 +02001643 video.stream_label = "alice-video";
Andrey Logvin42c59522020-05-06 12:18:26 +00001644 alice->AddVideoConfig(std::move(video));
Artem Titov39483c62019-07-19 17:03:52 +02001645 },
1646 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001647 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001648 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001649 run_params.use_flex_fec = false;
1650 run_params.use_ulp_fec = false;
1651 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001652}
1653
Artem Titov137f6c82019-05-17 10:51:15 +02001654TEST(PCFullStackTest, SimulcastVP8_3SL_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001655 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1656 CreateNetworkEmulationManager();
1657 BuiltInNetworkBehaviorConfig config;
1658 config.loss_percent = 0;
1659 config.queue_delay_ms = 100;
1660 auto fixture = CreateTestFixture(
1661 "pc_simulcast_vp8_3sl_high",
Artem Titov1ff3c582020-07-01 15:20:37 +02001662 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001663 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1664 [](PeerConfigurer* alice) {
1665 VideoConfig video(1280, 720, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001666 video.simulcast_config = VideoSimulcastConfig(3, 2);
1667 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001668 auto frame_generator = CreateFromYuvFileFrameGenerator(
1669 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1670 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001671 },
1672 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001673 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001674 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001675 run_params.use_flex_fec = false;
1676 run_params.use_ulp_fec = false;
1677 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001678}
1679
Artem Titov137f6c82019-05-17 10:51:15 +02001680TEST(PCFullStackTest, SimulcastVP8_3SL_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001681 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1682 CreateNetworkEmulationManager();
1683 BuiltInNetworkBehaviorConfig config;
1684 config.loss_percent = 0;
1685 config.queue_delay_ms = 100;
1686 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001687 "pc_simulcast_vp8_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001688 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1689 [](PeerConfigurer* alice) {
1690 VideoConfig video(1280, 720, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001691 video.simulcast_config = VideoSimulcastConfig(3, 0);
1692 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001693 auto frame_generator = CreateFromYuvFileFrameGenerator(
1694 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1695 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001696 },
1697 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001698 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001699 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001700 run_params.use_flex_fec = false;
1701 run_params.use_ulp_fec = false;
1702 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001703}
1704
Artem Titov39483c62019-07-19 17:03:52 +02001705/*
Artem Titov137f6c82019-05-17 10:51:15 +02001706// This test assumes ideal network conditions with target bandwidth being
1707// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1708// Android32 bots can't handle this high bitrate, so disable test for those.
1709#if defined(WEBRTC_ANDROID)
1710#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1711#else
1712#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1713#endif // defined(WEBRTC_ANDROID)
1714// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1715configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1716fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1717 ParamsWithLogging generator;
1718 generator.call.send_side_bwe = true;
1719 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1720 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1721 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1722 generator.video[0] = {true,
1723 360,
1724 240,
1725 30,
1726 target_bitrate / 2,
1727 target_bitrate,
1728 target_bitrate * 2,
1729 false,
1730 "FakeCodec",
1731 1,
1732 0,
1733 0,
1734 false,
1735 false,
1736 false,
1737 "Generator"};
1738 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1739 kTestDurationSec};
1740 fixture->RunWithAnalyzer(generator);
1741}
1742
1743// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1744TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1745 auto fixture = CreateVideoQualityTestFixture();
1746 ParamsWithLogging large_room;
1747 large_room.call.send_side_bwe = true;
1748 large_room.video[0] = SimulcastVp8VideoHigh();
1749 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1750 large_room.config->loss_percent = 0;
1751 large_room.config->queue_delay_ms = 100;
1752 ParamsWithLogging video_params_high;
1753 video_params_high.video[0] = SimulcastVp8VideoHigh();
1754 ParamsWithLogging video_params_medium;
1755 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1756 ParamsWithLogging video_params_low;
1757 video_params_low.video[0] = SimulcastVp8VideoLow();
1758
1759 std::vector<VideoStream> streams = {
1760 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1761 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1762 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1763 large_room.call.num_thumbnails = 5;
1764 large_room.ss[0] = {
1765 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1766 false};
1767 fixture->RunWithAnalyzer(large_room);
1768}
1769
1770#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1771// Fails on mobile devices:
1772// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1773#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1774#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1775#else
1776#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1777#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1778#endif
1779// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1780TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1781 auto fixture = CreateVideoQualityTestFixture();
1782 ParamsWithLogging large_room;
1783 large_room.call.send_side_bwe = true;
1784 large_room.video[0] = SimulcastVp8VideoHigh();
1785 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1786 large_room.config->loss_percent = 0;
1787 large_room.config->queue_delay_ms = 100;
1788 ParamsWithLogging video_params_high;
1789 video_params_high.video[0] = SimulcastVp8VideoHigh();
1790 ParamsWithLogging video_params_medium;
1791 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1792 ParamsWithLogging video_params_low;
1793 video_params_low.video[0] = SimulcastVp8VideoLow();
1794
1795 std::vector<VideoStream> streams = {
1796 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1797 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1798 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1799 large_room.call.num_thumbnails = 15;
1800 large_room.ss[0] = {
1801 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1802 false};
1803 fixture->RunWithAnalyzer(large_room);
1804}
1805
1806// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1807TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1808 auto fixture = CreateVideoQualityTestFixture();
1809 ParamsWithLogging large_room;
1810 large_room.call.send_side_bwe = true;
1811 large_room.video[0] = SimulcastVp8VideoHigh();
1812 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1813 large_room.config->loss_percent = 0;
1814 large_room.config->queue_delay_ms = 100;
1815 ParamsWithLogging video_params_high;
1816 video_params_high.video[0] = SimulcastVp8VideoHigh();
1817 ParamsWithLogging video_params_medium;
1818 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1819 ParamsWithLogging video_params_low;
1820 video_params_low.video[0] = SimulcastVp8VideoLow();
1821
1822 std::vector<VideoStream> streams = {
1823 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1824 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1825 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1826 large_room.call.num_thumbnails = 50;
1827 large_room.ss[0] = {
1828 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1829 false};
1830 fixture->RunWithAnalyzer(large_room);
1831}
1832*/
1833
Artem Titov137f6c82019-05-17 10:51:15 +02001834class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1835
1836/*
1837// Disable dual video test on mobile device becuase it's too heavy.
1838// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1839#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1840// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1841TEST_P(PCDualStreamsTest,
1842 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001843 const int first_stream = GetParam();
1844 ParamsWithLogging dual_streams;
1845
1846 // Screenshare Settings.
1847 dual_streams.screenshare[first_stream] = {true, false, 10};
1848 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1849 2500000, false, "VP8", 2, 1, 400000,
1850 false, false, false, ""};
1851
1852 ParamsWithLogging screenshare_params_high;
1853 screenshare_params_high.video[0] = {
1854 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1855 "VP8", 2, 0, 400000, false, false, false, ""};
1856 VideoQualityTest::Params screenshare_params_low;
1857 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1858 1000000, false, "VP8", 2, 0, 400000,
1859 false, false, false, ""};
1860 std::vector<VideoStream> screenhsare_streams = {
1861 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1862 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1863
1864 dual_streams.ss[first_stream] = {
1865 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1866 std::vector<SpatialLayer>(), false};
1867
1868 // Video settings.
1869 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1870
1871 ParamsWithLogging video_params_high;
1872 video_params_high.video[0] = SimulcastVp8VideoHigh();
1873 ParamsWithLogging video_params_medium;
1874 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1875 ParamsWithLogging video_params_low;
1876 video_params_low.video[0] = SimulcastVp8VideoLow();
1877 std::vector<VideoStream> streams = {
1878 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1879 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1880 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1881
1882 dual_streams.ss[1 - first_stream] = {
1883 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1884 false};
1885
1886 // Call settings.
1887 dual_streams.call.send_side_bwe = true;
1888 dual_streams.call.dual_video = true;
1889 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1890 std::to_string(first_stream);
1891 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1892 dual_streams.config->loss_percent = 1;
1893 dual_streams.config->link_capacity_kbps = 7500;
1894 dual_streams.config->queue_length_packets = 30;
1895 dual_streams.config->queue_delay_ms = 100;
1896
1897 auto fixture = CreateVideoQualityTestFixture();
1898 fixture->RunWithAnalyzer(dual_streams);
1899}
1900#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1901 // !defined(WEBRTC_MAC)
1902
1903// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1904TEST_P(PCDualStreamsTest, Conference_Restricted) {
1905 const int first_stream = GetParam();
1906 ParamsWithLogging dual_streams;
1907
1908 // Screenshare Settings.
1909 dual_streams.screenshare[first_stream] = {true, false, 10};
1910 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1911 2500000, false, "VP8", 3, 2, 400000,
1912 false, false, false, ""};
1913 // Video settings.
1914 dual_streams.video[1 - first_stream] = {
1915 true, 1280,
1916 720, 30,
1917 150000, 500000,
1918 700000, false,
1919 "VP8", 3,
1920 2, 400000,
1921 false, false,
1922 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1923
1924 // Call settings.
1925 dual_streams.call.send_side_bwe = true;
1926 dual_streams.call.dual_video = true;
1927 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1928 std::to_string(first_stream);
1929 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1930 dual_streams.config->loss_percent = 1;
1931 dual_streams.config->link_capacity_kbps = 5000;
1932 dual_streams.config->queue_length_packets = 30;
1933 dual_streams.config->queue_delay_ms = 100;
1934
1935 auto fixture = CreateVideoQualityTestFixture();
1936 fixture->RunWithAnalyzer(dual_streams);
1937}
1938*/
1939
1940INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1941 PCDualStreamsTest,
1942 ::testing::Values(0, 1));
1943
1944} // namespace webrtc