blob: 715f3993ba9dbb72b7c1bc83bd21b027aa35bda4 [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 Titovc45f4e42022-09-24 16:56:07 +020020#include "api/test/metrics/global_metrics_logger_and_exporter.h"
Artem Titov137f6c82019-05-17 10:51:15 +020021#include "api/test/network_emulation_manager.h"
22#include "api/test/peerconnection_quality_test_fixture.h"
23#include "api/test/simulated_network.h"
Artem Titov1ff3c582020-07-01 15:20:37 +020024#include "api/test/time_controller.h"
Johannes Kronc3fcee72021-04-19 09:09:26 +020025#include "api/video_codecs/vp9_profile.h"
Artem Titov137f6c82019-05-17 10:51:15 +020026#include "call/simulated_network.h"
Artem Titov137f6c82019-05-17 10:51:15 +020027#include "modules/video_coding/codecs/vp9/include/vp9.h"
28#include "system_wrappers/include/field_trial.h"
29#include "test/field_trial.h"
30#include "test/gtest.h"
31#include "test/pc/e2e/network_quality_metrics_reporter.h"
32#include "test/testsupport/file_utils.h"
33
34namespace webrtc {
35
Florent Castellibfdb9572022-08-29 14:19:46 +020036using EmulatedSFUConfig =
37 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::EmulatedSFUConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020038using PeerConfigurer =
39 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer;
40using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
41using VideoConfig =
42 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
43using AudioConfig =
44 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
Artem Titov39483c62019-07-19 17:03:52 +020045using ScreenShareConfig =
46 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
47using VideoSimulcastConfig =
48 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoSimulcastConfig;
Artem Titovcdd73e02020-01-23 14:09:09 +010049using VideoCodecConfig =
50 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoCodecConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020051
52namespace {
53
54constexpr int kTestDurationSec = 45;
Artem Titov137f6c82019-05-17 10:51:15 +020055
Artem Titov137f6c82019-05-17 10:51:15 +020056std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture>
57CreateTestFixture(const std::string& test_case_name,
Artem Titov1ff3c582020-07-01 15:20:37 +020058 TimeController& time_controller,
Artem Titov137f6c82019-05-17 10:51:15 +020059 std::pair<EmulatedNetworkManagerInterface*,
60 EmulatedNetworkManagerInterface*> network_links,
61 rtc::FunctionView<void(PeerConfigurer*)> alice_configurer,
62 rtc::FunctionView<void(PeerConfigurer*)> bob_configurer) {
63 auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +020064 test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
Artem Titov137f6c82019-05-17 10:51:15 +020065 /*video_quality_analyzer=*/nullptr);
Niels Möllerf47a7242021-11-22 16:07:35 +010066 fixture->AddPeer(network_links.first->network_dependencies(),
67 alice_configurer);
68 fixture->AddPeer(network_links.second->network_dependencies(),
69 bob_configurer);
Artem Titov137f6c82019-05-17 10:51:15 +020070 fixture->AddQualityMetricsReporter(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020071 std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
Artem Titovc45f4e42022-09-24 16:56:07 +020072 network_links.first, network_links.second,
73 test::GetGlobalMetricsLogger()));
Artem Titov137f6c82019-05-17 10:51:15 +020074 return fixture;
75}
76
77// Takes the current active field trials set, and appends some new trials.
78std::string AppendFieldTrials(std::string new_trial_string) {
79 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
80}
81
82std::string ClipNameToClipPath(const char* clip_name) {
83 return test::ResourcePath(clip_name, "yuv");
84}
85
86} // namespace
87
Per Kjellanderf363d0d2022-10-13 10:21:05 +020088struct PCFullStackTestParams {
89 bool use_network_thread_as_worker_thread = false;
90 std::string field_trials;
91 std::string test_case_name_postfix;
92};
93
94std::vector<PCFullStackTestParams> ParameterizedTestParams() {
95 return {// Run with default parameters and field trials.
96 {},
97 // Use the network thread as worker thread.
98 // Use the worker thread for sending packets.
99 // https://bugs.chromium.org/p/webrtc/issues/detail?id=14502
100 {// TODO(webrtc:14502): Enable field trial soon but let it first run a
101 // couple of times to get a baseline..
102 // .use_network_thread_as_worker_thread = true,
103 // .field_trials = "WebRTC-SendPacketsOnWorkerThread/Enabled/",
104 .test_case_name_postfix = "_ReducedThreads"}};
105}
106
107class ParameterizedPCFullStackTest
108 : public ::testing::TestWithParam<PCFullStackTestParams> {
109 public:
110 ParameterizedPCFullStackTest() : field_trials_(GetParam().field_trials) {}
111
112 private:
113 test::ScopedFieldTrials field_trials_;
114};
115
116INSTANTIATE_TEST_SUITE_P(
117 ParameterizedPCFullStackTest,
118 ParameterizedPCFullStackTest,
119 testing::ValuesIn(ParameterizedTestParams()),
120 [](const testing::TestParamInfo<PCFullStackTestParams>& info) {
121 if (info.param.test_case_name_postfix.empty())
122 return std::string("Default");
123 return info.param.test_case_name_postfix;
124 });
125
Artem Titov137f6c82019-05-17 10:51:15 +0200126#if defined(RTC_ENABLE_VP9)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200127TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_VP9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200128 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
129 CreateNetworkEmulationManager();
130 auto fixture = CreateTestFixture(
131 "pc_foreman_cif_net_delay_0_0_plr_0_VP9",
Artem Titov1ff3c582020-07-01 15:20:37 +0200132 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900133 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
134 BuiltInNetworkBehaviorConfig()),
Artem Titov137f6c82019-05-17 10:51:15 +0200135 [](PeerConfigurer* alice) {
136 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200137 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000138 auto frame_generator = CreateFromYuvFileFrameGenerator(
139 video, ClipNameToClipPath("foreman_cif"));
140 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200141 alice->SetVideoCodecs({VideoCodecConfig(
142 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
143 {kVP9FmtpProfileId,
144 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200145 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200146 [](PeerConfigurer* bob) {
147 bob->SetVideoCodecs({VideoCodecConfig(
148 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
149 {kVP9FmtpProfileId,
150 VP9ProfileToString(VP9Profile::kProfile0)}})});
151 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100152 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200153}
154
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200155TEST(PCGenericDescriptorTest,
156 Pc_Foreman_Cif_Delay_50_0_Plr_5_VP9_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200157 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
158 CreateNetworkEmulationManager();
159 BuiltInNetworkBehaviorConfig config;
160 config.loss_percent = 5;
161 config.queue_delay_ms = 50;
162 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200163 "pc_foreman_cif_delay_50_0_plr_5_VP9_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200164 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900165 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200166 [](PeerConfigurer* alice) {
167 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200168 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000169 auto frame_generator = CreateFromYuvFileFrameGenerator(
170 video, ClipNameToClipPath("foreman_cif"));
171 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200172 alice->SetVideoCodecs({VideoCodecConfig(
173 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
174 {kVP9FmtpProfileId,
175 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200176 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200177 [](PeerConfigurer* bob) {
178 bob->SetVideoCodecs({VideoCodecConfig(
179 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
180 {kVP9FmtpProfileId,
181 VP9ProfileToString(VP9Profile::kProfile0)}})});
182 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100183 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200184}
185
Artem Titove731a2e2019-07-02 10:08:17 +0200186// VP9 2nd profile isn't supported on android arm and arm 64.
Artem Titovcecee992019-07-03 11:55:28 +0200187#if (defined(WEBRTC_ANDROID) && \
188 (defined(WEBRTC_ARCH_ARM64) || defined(WEBRTC_ARCH_ARM))) || \
189 (defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64))
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200190#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
191 DISABLED_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200192#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200193#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
194 Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200195#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200196TEST(PCFullStackTest, MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2) {
Artem Titov137f6c82019-05-17 10:51:15 +0200197 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
198 CreateNetworkEmulationManager();
199 auto fixture = CreateTestFixture(
200 "pc_generator_net_delay_0_0_plr_0_VP9Profile2",
Artem Titov1ff3c582020-07-01 15:20:37 +0200201 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900202 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
203 BuiltInNetworkBehaviorConfig()),
Artem Titov137f6c82019-05-17 10:51:15 +0200204 [](PeerConfigurer* alice) {
205 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200206 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000207 auto frame_generator = CreateSquareFrameGenerator(
208 video, test::FrameGeneratorInterface::OutputType::kI010);
209 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200210 alice->SetVideoCodecs({VideoCodecConfig(
211 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
212 {kVP9FmtpProfileId,
213 VP9ProfileToString(VP9Profile::kProfile2)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200214 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200215 [](PeerConfigurer* bob) {
216 bob->SetVideoCodecs({VideoCodecConfig(
217 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
218 {kVP9FmtpProfileId,
219 VP9ProfileToString(VP9Profile::kProfile2)}})});
220 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100221 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200222}
223
224/*
225// TODO(bugs.webrtc.org/10639) migrate commented out test, when required
226// functionality will be supported in PeerConnection level framework.
227TEST(PCFullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
228 auto fixture = CreateVideoQualityTestFixture();
229 ParamsWithLogging foreman_cif;
230 foreman_cif.call.send_side_bwe = true;
231 foreman_cif.video[0] = {
232 true, 352, 288, 30,
233 700000, 700000, 700000, false,
234 "multiplex", 1, 0, 0,
235 false, false, false, ClipNameToClipPath("foreman_cif")};
236 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
237 kTestDurationSec};
238 fixture->RunWithAnalyzer(foreman_cif);
239}
240
241TEST(PCFullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
242 auto fixture = CreateVideoQualityTestFixture();
243
244 ParamsWithLogging generator;
245 generator.call.send_side_bwe = true;
246 generator.video[0] = {
247 true, 352, 288, 30, 700000, 700000, 700000, false,
248 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
249 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
250 kTestDurationSec};
251 fixture->RunWithAnalyzer(generator);
252}
253*/
254#endif // defined(RTC_ENABLE_VP9)
255
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200256TEST(PCFullStackTest, Pc_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200257 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
258 CreateNetworkEmulationManager();
259 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200260 "pc_net_delay_0_0_plr_0", *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900261 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
262 BuiltInNetworkBehaviorConfig()),
Artem Titov137f6c82019-05-17 10:51:15 +0200263 [](PeerConfigurer* alice) {
264 VideoConfig video(176, 144, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200265 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000266 auto frame_generator = CreateFromYuvFileFrameGenerator(
267 video, ClipNameToClipPath("paris_qcif"));
268 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200269 },
270 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100271 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200272}
273
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200274TEST(PCGenericDescriptorTest,
275 Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200276 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
277 CreateNetworkEmulationManager();
278 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200279 "pc_foreman_cif_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200280 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900281 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
282 BuiltInNetworkBehaviorConfig()),
Artem Titov137f6c82019-05-17 10:51:15 +0200283 [](PeerConfigurer* alice) {
284 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200285 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000286 auto frame_generator = CreateFromYuvFileFrameGenerator(
287 video, ClipNameToClipPath("foreman_cif"));
288 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200289 },
290 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100291 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200292}
293
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200294TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200295 Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200296 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
297 CreateNetworkEmulationManager();
298 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200299 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200300 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200301 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900302 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200303 [](PeerConfigurer* alice) {
304 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200305 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000306 auto frame_generator = CreateFromYuvFileFrameGenerator(
307 video, ClipNameToClipPath("foreman_cif"));
308 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200309
Niels Möller29d59a12020-06-22 14:48:10 +0200310 BitrateSettings bitrate_settings;
311 bitrate_settings.min_bitrate_bps = 30000;
312 bitrate_settings.start_bitrate_bps = 30000;
313 bitrate_settings.max_bitrate_bps = 30000;
314 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200315 },
316 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100317 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200318 fixture->Run(std::move(run_params));
319}
320
Artem Titov137f6c82019-05-17 10:51:15 +0200321// Link capacity below default start rate.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200322TEST(PCFullStackTest, Pc_Foreman_Cif_Link_150kbps_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200323 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
324 CreateNetworkEmulationManager();
325 BuiltInNetworkBehaviorConfig config;
326 config.link_capacity_kbps = 150;
327 auto fixture = CreateTestFixture(
328 "pc_foreman_cif_link_150kbps_net_delay_0_0_plr_0",
Artem Titov1ff3c582020-07-01 15:20:37 +0200329 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900330 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200331 [](PeerConfigurer* alice) {
332 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200333 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000334 auto frame_generator = CreateFromYuvFileFrameGenerator(
335 video, ClipNameToClipPath("foreman_cif"));
336 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200337 },
338 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100339 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200340}
341
Jeremy Leconte4100d552020-09-11 18:02:36 +0200342TEST(PCFullStackTest, Pc_Foreman_Cif_Link_130kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200343 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
344 CreateNetworkEmulationManager();
345 BuiltInNetworkBehaviorConfig config;
346 config.link_capacity_kbps = 130;
347 config.queue_delay_ms = 100;
348 config.loss_percent = 1;
349 auto fixture = CreateTestFixture(
350 "pc_foreman_cif_link_130kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200351 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900352 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov65428262019-07-02 16:48:02 +0200353 [](PeerConfigurer* alice) {
354 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200355 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000356 auto frame_generator = CreateFromYuvFileFrameGenerator(
357 video, ClipNameToClipPath("foreman_cif"));
358 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100359 alice->SetUseUlpFEC(true);
Artem Titov65428262019-07-02 16:48:02 +0200360 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100361 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
362 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov65428262019-07-02 16:48:02 +0200363}
364
Jeremy Leconte4100d552020-09-11 18:02:36 +0200365TEST(PCFullStackTest, Pc_Foreman_Cif_Link_50kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200366 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
367 CreateNetworkEmulationManager();
368 BuiltInNetworkBehaviorConfig config;
369 config.link_capacity_kbps = 50;
370 config.queue_delay_ms = 100;
371 config.loss_percent = 1;
372 auto fixture = CreateTestFixture(
373 "pc_foreman_cif_link_50kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200374 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900375 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov65428262019-07-02 16:48:02 +0200376 [](PeerConfigurer* alice) {
377 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200378 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000379 auto frame_generator = CreateFromYuvFileFrameGenerator(
380 video, ClipNameToClipPath("foreman_cif"));
381 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100382 alice->SetUseUlpFEC(true);
Artem Titov65428262019-07-02 16:48:02 +0200383 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100384 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
385 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov65428262019-07-02 16:48:02 +0200386}
387
Artem Titov137f6c82019-05-17 10:51:15 +0200388// Restricted network and encoder overproducing by 30%.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200389TEST(PCFullStackTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200390 Pc_Foreman_Cif_Link_150kbps_Delay100ms_30pkts_Queue_Overshoot30) {
Artem Titov137f6c82019-05-17 10:51:15 +0200391 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
392 CreateNetworkEmulationManager();
393 BuiltInNetworkBehaviorConfig config;
394 config.link_capacity_kbps = 150;
395 config.queue_length_packets = 30;
396 config.queue_delay_ms = 100;
397 auto fixture = CreateTestFixture(
398 "pc_foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30",
Artem Titov1ff3c582020-07-01 15:20:37 +0200399 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900400 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200401 [](PeerConfigurer* alice) {
402 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +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 Titovb92d3e62022-02-15 18:46:21 +0100407 alice->SetVideoEncoderBitrateMultiplier(1.30);
Artem Titov137f6c82019-05-17 10:51:15 +0200408 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100409 [](PeerConfigurer* bob) { bob->SetVideoEncoderBitrateMultiplier(1.30); });
410 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200411}
412
413// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
414// Packet rate and loss are low enough that loss will happen with ~3s interval.
415// This triggers protection overhead to toggle between zero and non-zero.
416// Link queue is restrictive enough to trigger loss on probes.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200417TEST(PCFullStackTest, Pc_Foreman_Cif_Link_250kbps_Delay100ms_10pkts_Loss1) {
Artem Titov137f6c82019-05-17 10:51:15 +0200418 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
419 CreateNetworkEmulationManager();
420 BuiltInNetworkBehaviorConfig config;
421 config.link_capacity_kbps = 250;
422 config.queue_length_packets = 10;
423 config.queue_delay_ms = 100;
424 config.loss_percent = 1;
425 auto fixture = CreateTestFixture(
426 "pc_foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
Artem Titov1ff3c582020-07-01 15:20:37 +0200427 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900428 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200429 [](PeerConfigurer* alice) {
430 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200431 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000432 auto frame_generator = CreateFromYuvFileFrameGenerator(
433 video, ClipNameToClipPath("foreman_cif"));
434 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100435 alice->SetVideoEncoderBitrateMultiplier(1.30);
Artem Titov137f6c82019-05-17 10:51:15 +0200436 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100437 [](PeerConfigurer* bob) { bob->SetVideoEncoderBitrateMultiplier(1.30); });
438 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200439}
440
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200441TEST(PCGenericDescriptorTest,
442 Pc_Foreman_Cif_Delay_50_0_Plr_5_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200443 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
444 CreateNetworkEmulationManager();
445 BuiltInNetworkBehaviorConfig config;
446 config.loss_percent = 5;
447 config.queue_delay_ms = 50;
448 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200449 "pc_foreman_cif_delay_50_0_plr_5_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200450 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900451 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200452 [](PeerConfigurer* alice) {
453 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200454 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000455 auto frame_generator = CreateFromYuvFileFrameGenerator(
456 video, ClipNameToClipPath("foreman_cif"));
457 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200458 },
459 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100460 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200461}
462
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200463TEST(PCGenericDescriptorTest,
464 Pc_Foreman_Cif_Delay_50_0_Plr_5_Ulpfec_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200465 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
466 CreateNetworkEmulationManager();
467 BuiltInNetworkBehaviorConfig config;
468 config.loss_percent = 5;
469 config.queue_delay_ms = 50;
470 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200471 "pc_foreman_cif_delay_50_0_plr_5_ulpfec_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200472 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900473 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200474 [](PeerConfigurer* alice) {
475 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200476 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000477 auto frame_generator = CreateFromYuvFileFrameGenerator(
478 video, ClipNameToClipPath("foreman_cif"));
479 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100480 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200481 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100482 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
483 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200484}
485
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200486TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200487 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
488 CreateNetworkEmulationManager();
489 BuiltInNetworkBehaviorConfig config;
490 config.loss_percent = 5;
491 config.queue_delay_ms = 50;
492 auto fixture = CreateTestFixture(
493 "pc_foreman_cif_delay_50_0_plr_5_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200494 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900495 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200496 [](PeerConfigurer* alice) {
497 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200498 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000499 auto frame_generator = CreateFromYuvFileFrameGenerator(
500 video, ClipNameToClipPath("foreman_cif"));
501 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100502 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200503 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100504 [](PeerConfigurer* bob) { bob->SetUseFlexFEC(true); });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100505 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovb92d3e62022-02-15 18:46:21 +0100506 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200507 fixture->Run(std::move(run_params));
508}
509
Jeremy Leconte4100d552020-09-11 18:02:36 +0200510TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200511 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
512 CreateNetworkEmulationManager();
513 BuiltInNetworkBehaviorConfig config;
514 config.loss_percent = 3;
515 config.link_capacity_kbps = 500;
516 config.queue_delay_ms = 50;
517 auto fixture = CreateTestFixture(
518 "pc_foreman_cif_500kbps_delay_50_0_plr_3_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200519 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900520 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200521 [](PeerConfigurer* alice) {
522 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200523 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000524 auto frame_generator = CreateFromYuvFileFrameGenerator(
525 video, ClipNameToClipPath("foreman_cif"));
526 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100527 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200528 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100529 [](PeerConfigurer* bob) { bob->SetUseFlexFEC(true); });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100530 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovb92d3e62022-02-15 18:46:21 +0100531 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200532 fixture->Run(std::move(run_params));
533}
534
Jeremy Leconte4100d552020-09-11 18:02:36 +0200535TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200536 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
537 CreateNetworkEmulationManager();
538 BuiltInNetworkBehaviorConfig config;
539 config.loss_percent = 3;
540 config.link_capacity_kbps = 500;
541 config.queue_delay_ms = 50;
542 auto fixture = CreateTestFixture(
543 "pc_foreman_cif_500kbps_delay_50_0_plr_3_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200544 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900545 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200546 [](PeerConfigurer* alice) {
547 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200548 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000549 auto frame_generator = CreateFromYuvFileFrameGenerator(
550 video, ClipNameToClipPath("foreman_cif"));
551 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100552 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200553 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100554 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
555 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200556}
557
558#if defined(WEBRTC_USE_H264)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200559TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200560 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
561 CreateNetworkEmulationManager();
562 auto fixture = CreateTestFixture(
563 "pc_foreman_cif_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200564 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900565 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
566 BuiltInNetworkBehaviorConfig()),
Artem Titov137f6c82019-05-17 10:51:15 +0200567 [](PeerConfigurer* alice) {
568 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200569 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000570 auto frame_generator = CreateFromYuvFileFrameGenerator(
571 video, ClipNameToClipPath("foreman_cif"));
572 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200573 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200574 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200575 [](PeerConfigurer* bob) {
576 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
577 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100578 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200579}
580
Jeremy Leconte4100d552020-09-11 18:02:36 +0200581TEST(PCFullStackTest, Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200582 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
583 CreateNetworkEmulationManager();
584 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200585 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200586 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200587 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900588 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200589 [](PeerConfigurer* alice) {
590 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200591 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000592 auto frame_generator = CreateFromYuvFileFrameGenerator(
593 video, ClipNameToClipPath("foreman_cif"));
594 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200595
Niels Möller29d59a12020-06-22 14:48:10 +0200596 BitrateSettings bitrate_settings;
597 bitrate_settings.min_bitrate_bps = 30000;
598 bitrate_settings.start_bitrate_bps = 30000;
599 bitrate_settings.max_bitrate_bps = 30000;
600 alice->SetBitrateSettings(bitrate_settings);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200601 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200602 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200603 [](PeerConfigurer* bob) {
604 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
605 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100606 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200607}
608
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200609TEST(PCGenericDescriptorTest,
610 Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200611 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
612 CreateNetworkEmulationManager();
613 BuiltInNetworkBehaviorConfig config;
614 config.loss_percent = 5;
615 config.queue_delay_ms = 50;
616 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200617 "pc_foreman_cif_delay_50_0_plr_5_H264_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200618 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900619 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200620 [](PeerConfigurer* alice) {
621 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200622 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000623 auto frame_generator = CreateFromYuvFileFrameGenerator(
624 video, ClipNameToClipPath("foreman_cif"));
625 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200626 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200627 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200628 [](PeerConfigurer* bob) {
629 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
630 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100631 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200632}
633
Erik Språngeb3307f2022-08-22 09:06:06 +0000634TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Sps_Pps_Idr) {
635 test::ScopedFieldTrials override_field_trials(
636 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
637
638 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
639 CreateNetworkEmulationManager();
640 BuiltInNetworkBehaviorConfig config;
641 config.loss_percent = 5;
642 config.queue_delay_ms = 50;
643 auto fixture = CreateTestFixture(
644 "pc_foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr",
645 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900646 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Erik Språngeb3307f2022-08-22 09:06:06 +0000647 [](PeerConfigurer* alice) {
648 VideoConfig video(352, 288, 30);
649 video.stream_label = "alice-video";
650 auto frame_generator = CreateFromYuvFileFrameGenerator(
651 video, ClipNameToClipPath("foreman_cif"));
652 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
653 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
654 },
655 [](PeerConfigurer* bob) {
656 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
657 });
658 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
659}
660
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200661TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200662 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
663 CreateNetworkEmulationManager();
664 BuiltInNetworkBehaviorConfig config;
665 config.loss_percent = 5;
666 config.queue_delay_ms = 50;
667 auto fixture = CreateTestFixture(
668 "pc_foreman_cif_delay_50_0_plr_5_H264_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200669 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900670 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200671 [](PeerConfigurer* alice) {
672 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200673 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000674 auto frame_generator = CreateFromYuvFileFrameGenerator(
675 video, ClipNameToClipPath("foreman_cif"));
676 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200677 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100678 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200679 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200680 [](PeerConfigurer* bob) {
681 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100682 bob->SetUseFlexFEC(true);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200683 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100684 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovdf2b2642022-02-16 13:44:25 +0100685 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200686 fixture->Run(std::move(run_params));
687}
688
689// Ulpfec with H264 is an unsupported combination, so this test is only useful
690// for debugging. It is therefore disabled by default.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200691TEST(PCFullStackTest, DISABLED_Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200692 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
693 CreateNetworkEmulationManager();
694 BuiltInNetworkBehaviorConfig config;
695 config.loss_percent = 5;
696 config.queue_delay_ms = 50;
697 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200698 "pc_foreman_cif_delay_50_0_plr_5_H264_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200699 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900700 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200701 [](PeerConfigurer* alice) {
702 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200703 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000704 auto frame_generator = CreateFromYuvFileFrameGenerator(
705 video, ClipNameToClipPath("foreman_cif"));
706 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200707 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100708 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200709 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200710 [](PeerConfigurer* bob) {
711 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100712 bob->SetUseUlpFEC(true);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200713 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100714 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200715}
716#endif // defined(WEBRTC_USE_H264)
717
Jeremy Leconte4100d552020-09-11 18:02:36 +0200718TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps) {
Artem Titov137f6c82019-05-17 10:51:15 +0200719 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
720 CreateNetworkEmulationManager();
721 BuiltInNetworkBehaviorConfig config;
722 config.queue_length_packets = 0;
723 config.queue_delay_ms = 0;
724 config.link_capacity_kbps = 500;
725 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200726 "pc_foreman_cif_500kbps", *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900727 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200728 [](PeerConfigurer* alice) {
729 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200730 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000731 auto frame_generator = CreateFromYuvFileFrameGenerator(
732 video, ClipNameToClipPath("foreman_cif"));
733 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200734 },
735 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100736 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200737}
738
Per Kjellanderf363d0d2022-10-13 10:21:05 +0200739TEST_P(ParameterizedPCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200740 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
741 CreateNetworkEmulationManager();
742 BuiltInNetworkBehaviorConfig config;
743 config.queue_length_packets = 32;
744 config.queue_delay_ms = 0;
745 config.link_capacity_kbps = 500;
746 auto fixture = CreateTestFixture(
Per Kjellanderf363d0d2022-10-13 10:21:05 +0200747 "pc_foreman_cif_500kbps_32pkts_queue" + GetParam().test_case_name_postfix,
Artem Titov1ff3c582020-07-01 15:20:37 +0200748 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900749 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200750 [](PeerConfigurer* alice) {
751 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200752 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000753 auto frame_generator = CreateFromYuvFileFrameGenerator(
754 video, ClipNameToClipPath("foreman_cif"));
755 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Per Kjellanderf363d0d2022-10-13 10:21:05 +0200756 if (GetParam().use_network_thread_as_worker_thread) {
757 alice->SetUseNetworkThreadAsWorkerThread();
758 }
Artem Titov137f6c82019-05-17 10:51:15 +0200759 },
Per Kjellanderf363d0d2022-10-13 10:21:05 +0200760 [](PeerConfigurer* bob) {
761 if (GetParam().use_network_thread_as_worker_thread) {
762 bob->SetUseNetworkThreadAsWorkerThread();
763 }
764 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100765 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200766}
767
Jeremy Leconte4100d552020-09-11 18:02:36 +0200768TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_100ms) {
Artem Titov137f6c82019-05-17 10:51:15 +0200769 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
770 CreateNetworkEmulationManager();
771 BuiltInNetworkBehaviorConfig config;
772 config.queue_length_packets = 0;
773 config.queue_delay_ms = 100;
774 config.link_capacity_kbps = 500;
775 auto fixture = CreateTestFixture(
776 "pc_foreman_cif_500kbps_100ms",
Artem Titov1ff3c582020-07-01 15:20:37 +0200777 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900778 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200779 [](PeerConfigurer* alice) {
780 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200781 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000782 auto frame_generator = CreateFromYuvFileFrameGenerator(
783 video, ClipNameToClipPath("foreman_cif"));
784 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200785 },
786 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100787 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200788}
789
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200790TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200791 Pc_Foreman_Cif_500kbps_100ms_32pkts_Queue_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200792 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
793 CreateNetworkEmulationManager();
794 BuiltInNetworkBehaviorConfig config;
795 config.queue_length_packets = 32;
796 config.queue_delay_ms = 100;
797 config.link_capacity_kbps = 500;
798 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200799 "pc_foreman_cif_500kbps_100ms_32pkts_queue_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200800 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900801 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200802 [](PeerConfigurer* alice) {
803 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200804 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000805 auto frame_generator = CreateFromYuvFileFrameGenerator(
806 video, ClipNameToClipPath("foreman_cif"));
807 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200808 },
809 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100810 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200811}
812
813/*
814// TODO(bugs.webrtc.org/10639) we need to disable send side bwe, but it isn't
Artem Titov39483c62019-07-19 17:03:52 +0200815// supported in PC level framework.
Artem Titov137f6c82019-05-17 10:51:15 +0200816TEST(PCFullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
817 auto fixture = CreateVideoQualityTestFixture();
818 ParamsWithLogging foreman_cif;
819 foreman_cif.call.send_side_bwe = false;
820 foreman_cif.video[0] = {
821 true, 352, 288, 30,
822 30000, 500000, 2000000, false,
823 "VP8", 1, 0, 0,
824 false, false, true, ClipNameToClipPath("foreman_cif")};
825 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
826 0.0, 0.0, kTestDurationSec};
827 foreman_cif.config->queue_length_packets = 32;
828 foreman_cif.config->queue_delay_ms = 100;
829 foreman_cif.config->link_capacity_kbps = 500;
830 fixture->RunWithAnalyzer(foreman_cif);
831}
832*/
833
Jeremy Leconte4100d552020-09-11 18:02:36 +0200834TEST(PCFullStackTest, Pc_Foreman_Cif_1000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200835 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
836 CreateNetworkEmulationManager();
837 BuiltInNetworkBehaviorConfig config;
838 config.queue_length_packets = 32;
839 config.queue_delay_ms = 100;
840 config.link_capacity_kbps = 1000;
841 auto fixture = CreateTestFixture(
842 "pc_foreman_cif_1000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200843 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900844 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200845 [](PeerConfigurer* alice) {
846 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200847 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000848 auto frame_generator = CreateFromYuvFileFrameGenerator(
849 video, ClipNameToClipPath("foreman_cif"));
850 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200851 },
852 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100853 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200854}
855
856// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Jeremy Leconte4100d552020-09-11 18:02:36 +0200857TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200858 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
859 CreateNetworkEmulationManager();
860 BuiltInNetworkBehaviorConfig config;
861 config.queue_length_packets = 32;
862 config.queue_delay_ms = 100;
863 config.link_capacity_kbps = 2000;
864 auto fixture = CreateTestFixture(
865 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200866 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +0900867 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +0200868 [](PeerConfigurer* alice) {
869 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200870 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000871 auto frame_generator = CreateFromYuvFileFrameGenerator(
872 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
873 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200874 },
875 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100876 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200877}
878
Artem Titov137f6c82019-05-17 10:51:15 +0200879/*
880// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Danil Chapovalov636865e2020-06-03 14:11:26 +0200881TEST(PCGenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Artem Titov137f6c82019-05-17 10:51:15 +0200882 auto fixture = CreateVideoQualityTestFixture();
883 ParamsWithLogging conf_motion_hd;
884 conf_motion_hd.call.send_side_bwe = true;
885 conf_motion_hd.video[0] = {
886 true, 1280,
887 720, 50,
888 30000, 3000000,
889 3000000, false,
890 "VP8", 2,
891 -1, 0,
892 false, false,
893 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
894 conf_motion_hd.analyzer = {
Danil Chapovalov636865e2020-06-03 14:11:26 +0200895 "conference_motion_hd_2tl_moderate_limits_generic_descriptor", 0.0, 0.0,
Artem Titov137f6c82019-05-17 10:51:15 +0200896 kTestDurationSec};
897 conf_motion_hd.config->queue_length_packets = 50;
898 conf_motion_hd.config->loss_percent = 3;
899 conf_motion_hd.config->queue_delay_ms = 100;
900 conf_motion_hd.config->link_capacity_kbps = 2000;
901 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
902 fixture->RunWithAnalyzer(conf_motion_hd);
903}
904
905// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
906TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimits) {
907 auto fixture = CreateVideoQualityTestFixture();
908 ParamsWithLogging conf_motion_hd;
909 conf_motion_hd.call.send_side_bwe = true;
910 conf_motion_hd.video[0] = {
911 true, 1280,
912 720, 50,
913 30000, 3000000,
914 3000000, false,
915 "VP8", 3,
916 -1, 0,
917 false, false,
918 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
919 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
920 0.0, kTestDurationSec};
921 conf_motion_hd.config->queue_length_packets = 50;
922 conf_motion_hd.config->loss_percent = 3;
923 conf_motion_hd.config->queue_delay_ms = 100;
924 conf_motion_hd.config->link_capacity_kbps = 2000;
925 fixture->RunWithAnalyzer(conf_motion_hd);
926}
927
928// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
929TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
930 auto fixture = CreateVideoQualityTestFixture();
931 ParamsWithLogging conf_motion_hd;
932 conf_motion_hd.call.send_side_bwe = true;
933 conf_motion_hd.video[0] = {
934 true, 1280,
935 720, 50,
936 30000, 3000000,
937 3000000, false,
938 "VP8", 4,
939 -1, 0,
940 false, false,
941 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
942 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
943 0.0, kTestDurationSec};
944 conf_motion_hd.config->queue_length_packets = 50;
945 conf_motion_hd.config->loss_percent = 3;
946 conf_motion_hd.config->queue_delay_ms = 100;
947 conf_motion_hd.config->link_capacity_kbps = 2000;
948 fixture->RunWithAnalyzer(conf_motion_hd);
949}
950
951// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
952TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
953 test::ScopedFieldTrials field_trial(
954 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
955 auto fixture = CreateVideoQualityTestFixture();
956 ParamsWithLogging conf_motion_hd;
957 conf_motion_hd.call.send_side_bwe = true;
958 conf_motion_hd.video[0] = {
959 true, 1280,
960 720, 50,
961 30000, 3000000,
962 3000000, false,
963 "VP8", 3,
964 -1, 0,
965 false, false,
966 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
967 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
968 0.0, 0.0, kTestDurationSec};
969 conf_motion_hd.config->queue_length_packets = 50;
970 conf_motion_hd.config->loss_percent = 3;
971 conf_motion_hd.config->queue_delay_ms = 100;
972 conf_motion_hd.config->link_capacity_kbps = 2000;
973 fixture->RunWithAnalyzer(conf_motion_hd);
974}
975
976// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
977TEST(PCFullStackTest,
978 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
979 auto fixture = CreateVideoQualityTestFixture();
980 test::ScopedFieldTrials field_trial(
981 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
982 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
983 ParamsWithLogging conf_motion_hd;
984 conf_motion_hd.call.send_side_bwe = true;
985 conf_motion_hd.video[0] = {
986 true, 1280,
987 720, 50,
988 30000, 3000000,
989 3000000, false,
990 "VP8", 3,
991 -1, 0,
992 false, false,
993 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
994 conf_motion_hd.analyzer = {
995 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
996 kTestDurationSec};
997 conf_motion_hd.config->queue_length_packets = 50;
998 conf_motion_hd.config->loss_percent = 3;
999 conf_motion_hd.config->queue_delay_ms = 100;
1000 conf_motion_hd.config->link_capacity_kbps = 2000;
1001 fixture->RunWithAnalyzer(conf_motion_hd);
1002}
1003*/
1004
1005#if defined(RTC_ENABLE_VP9)
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001006TEST_P(ParameterizedPCFullStackTest,
1007 Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) {
Artem Titov137f6c82019-05-17 10:51:15 +02001008 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1009 CreateNetworkEmulationManager();
1010 BuiltInNetworkBehaviorConfig config;
1011 config.queue_length_packets = 32;
1012 config.queue_delay_ms = 100;
1013 config.link_capacity_kbps = 2000;
1014 auto fixture = CreateTestFixture(
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001015 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9" +
1016 GetParam().test_case_name_postfix,
Artem Titov1ff3c582020-07-01 15:20:37 +02001017 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001018 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov137f6c82019-05-17 10:51:15 +02001019 [](PeerConfigurer* alice) {
1020 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +02001021 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001022 auto frame_generator = CreateFromYuvFileFrameGenerator(
1023 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1024 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001025 alice->SetVideoCodecs({VideoCodecConfig(
1026 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1027 {kVP9FmtpProfileId,
1028 VP9ProfileToString(VP9Profile::kProfile0)}})});
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001029 if (GetParam().use_network_thread_as_worker_thread) {
1030 alice->SetUseNetworkThreadAsWorkerThread();
1031 }
Artem Titov137f6c82019-05-17 10:51:15 +02001032 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001033 [](PeerConfigurer* bob) {
1034 bob->SetVideoCodecs({VideoCodecConfig(
1035 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1036 {kVP9FmtpProfileId,
1037 VP9ProfileToString(VP9Profile::kProfile0)}})});
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001038 if (GetParam().use_network_thread_as_worker_thread) {
1039 bob->SetUseNetworkThreadAsWorkerThread();
1040 }
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001041 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001042 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001043}
1044#endif
1045
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001046TEST(PCFullStackTest, Pc_Screenshare_Slides_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001047 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1048 CreateNetworkEmulationManager();
1049 auto fixture = CreateTestFixture(
1050 "pc_screenshare_slides_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001051 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001052 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
1053 BuiltInNetworkBehaviorConfig()),
Artem Titov39483c62019-07-19 17:03:52 +02001054 [](PeerConfigurer* alice) {
1055 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001056 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001057 video.content_hint = VideoTrackInterface::ContentHint::kText;
1058 auto frame_generator = CreateScreenShareFrameGenerator(
1059 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001060 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001061 },
1062 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001063 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001064}
1065
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001066TEST(PCFullStackTest, Pc_Screenshare_Slides) {
Artem Titov39483c62019-07-19 17:03:52 +02001067 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1068 CreateNetworkEmulationManager();
1069 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001070 "pc_screenshare_slides", *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001071 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
1072 BuiltInNetworkBehaviorConfig()),
Artem Titov39483c62019-07-19 17:03:52 +02001073 [](PeerConfigurer* alice) {
1074 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001075 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001076 video.content_hint = VideoTrackInterface::ContentHint::kText;
1077 auto frame_generator = CreateScreenShareFrameGenerator(
1078 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001079 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001080 },
1081 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001082 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001083 run_params.use_conference_mode = true;
1084 fixture->Run(std::move(run_params));
1085}
1086
1087// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1088#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001089TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001090 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1091 CreateNetworkEmulationManager();
1092 auto fixture = CreateTestFixture(
1093 "pc_screenshare_slides_simulcast_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001094 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001095 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
1096 BuiltInNetworkBehaviorConfig()),
Artem Titov39483c62019-07-19 17:03:52 +02001097 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001098 VideoConfig video(1850, 1110, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001099 video.simulcast_config = VideoSimulcastConfig(2);
1100 video.emulated_sfu_config = EmulatedSFUConfig(1);
Artem Titov4b9701e2019-08-28 13:48:02 +02001101 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001102 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001103 video.content_hint = VideoTrackInterface::ContentHint::kText;
1104 auto frame_generator = CreateScreenShareFrameGenerator(
1105 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001106 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001107 },
1108 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001109 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov39483c62019-07-19 17:03:52 +02001110}
1111
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001112TEST_P(ParameterizedPCFullStackTest, Pc_Screenshare_Slides_Simulcast) {
Artem Titov39483c62019-07-19 17:03:52 +02001113 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1114 CreateNetworkEmulationManager();
1115 auto fixture = CreateTestFixture(
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001116 "pc_screenshare_slides_simulcast" + GetParam().test_case_name_postfix,
Artem Titov1ff3c582020-07-01 15:20:37 +02001117 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001118 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
1119 BuiltInNetworkBehaviorConfig()),
Artem Titov39483c62019-07-19 17:03:52 +02001120 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001121 VideoConfig video(1850, 1110, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001122 video.simulcast_config = VideoSimulcastConfig(2);
1123 video.emulated_sfu_config = EmulatedSFUConfig(1);
Artem Titov4b9701e2019-08-28 13:48:02 +02001124 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001125 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001126 video.content_hint = VideoTrackInterface::ContentHint::kText;
1127 auto frame_generator = CreateScreenShareFrameGenerator(
1128 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001129 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001130 if (GetParam().use_network_thread_as_worker_thread) {
1131 alice->SetUseNetworkThreadAsWorkerThread();
1132 }
Artem Titov39483c62019-07-19 17:03:52 +02001133 },
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001134 [](PeerConfigurer* bob) {
1135 if (GetParam().use_network_thread_as_worker_thread) {
1136 bob->SetUseNetworkThreadAsWorkerThread();
1137 }
1138 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001139 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001140 run_params.use_conference_mode = true;
1141 fixture->Run(std::move(run_params));
1142}
1143#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1144
1145/*
Artem Titov137f6c82019-05-17 10:51:15 +02001146#if !defined(WEBRTC_MAC)
Artem Titov137f6c82019-05-17 10:51:15 +02001147// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1148#if !defined(WEBRTC_WIN)
Artem Titov137f6c82019-05-17 10:51:15 +02001149// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1150TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Artem Titov137f6c82019-05-17 10:51:15 +02001151 auto fixture = CreateVideoQualityTestFixture();
1152 ParamsWithLogging screenshare;
1153 screenshare.call.send_side_bwe = true;
1154 screenshare.screenshare[0] = {true, false, 10};
1155 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1156 2500000, false, "VP8", 2, 1, 400000,
1157 false, false, false, ""};
1158 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
1159 kTestDurationSec};
1160 VideoQualityTest::Params screenshare_params_high;
1161 screenshare_params_high.video[0] = {
1162 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1163 "VP8", 2, 0, 400000, false, false, false, ""};
1164 VideoQualityTest::Params screenshare_params_low;
1165 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1166 1000000, false, "VP8", 2, 0, 400000,
1167 false, false, false, ""};
1168
1169 std::vector<VideoStream> streams = {
1170 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1171 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1172 screenshare.ss[0] = {
1173 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1174 false};
1175 fixture->RunWithAnalyzer(screenshare);
1176}
1177
1178#endif // !defined(WEBRTC_WIN)
1179#endif // !defined(WEBRTC_MAC)
1180
1181// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1182TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
1183 auto fixture = CreateVideoQualityTestFixture();
1184 ParamsWithLogging config;
1185 config.call.send_side_bwe = true;
1186 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
1187 1000000, false, "VP8", 2, 1, 400000,
1188 false, false, false, ""};
1189 config.screenshare[0] = {true, false, 10, 2};
1190 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
1191 kTestDurationSec};
1192 fixture->RunWithAnalyzer(config);
1193}
1194
1195// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001196TEST(PCGenericDescriptorTest, Screenshare_Slides_Lossy_Net_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +02001197 auto fixture = CreateVideoQualityTestFixture();
1198 ParamsWithLogging screenshare;
1199 screenshare.call.send_side_bwe = true;
1200 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1201 1000000, false, "VP8", 2, 1, 400000,
1202 false, false, false, ""};
1203 screenshare.screenshare[0] = {true, false, 10};
Danil Chapovalov636865e2020-06-03 14:11:26 +02001204 screenshare.analyzer = {"screenshare_slides_lossy_net_generic_descriptor",
1205 0.0, 0.0, kTestDurationSec};
Artem Titov137f6c82019-05-17 10:51:15 +02001206 screenshare.config->loss_percent = 5;
1207 screenshare.config->queue_delay_ms = 200;
1208 screenshare.config->link_capacity_kbps = 500;
Danil Chapovalov636865e2020-06-03 14:11:26 +02001209 screenshare.call.generic_descriptor = true;
Artem Titov137f6c82019-05-17 10:51:15 +02001210 fixture->RunWithAnalyzer(screenshare);
1211}
1212
1213// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1214TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
1215 auto fixture = CreateVideoQualityTestFixture();
1216 ParamsWithLogging screenshare;
1217 screenshare.call.send_side_bwe = true;
1218 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1219 1000000, false, "VP8", 2, 1, 400000,
1220 false, false, false, ""};
1221 screenshare.screenshare[0] = {true, false, 10};
1222 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
1223 kTestDurationSec};
1224 screenshare.config->loss_percent = 10;
1225 screenshare.config->queue_delay_ms = 200;
1226 screenshare.config->link_capacity_kbps = 500;
1227 fixture->RunWithAnalyzer(screenshare);
1228}
1229
1230// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1231TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
1232 auto fixture = CreateVideoQualityTestFixture();
1233 ParamsWithLogging screenshare;
1234 screenshare.call.send_side_bwe = true;
1235 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1236 1000000, false, "VP8", 2, 1, 400000,
1237 false, false, false, ""};
1238 screenshare.screenshare[0] = {true, false, 10};
1239 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
1240 kTestDurationSec};
1241 screenshare.config->loss_percent = 5;
1242 screenshare.config->link_capacity_kbps = 200;
1243 screenshare.config->queue_length_packets = 30;
1244
1245 fixture->RunWithAnalyzer(screenshare);
1246}
1247
1248// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1249TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
1250 auto fixture = CreateVideoQualityTestFixture();
1251 ParamsWithLogging screenshare;
1252 screenshare.call.send_side_bwe = true;
1253 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1254 1000000, false, "VP8", 2, 1, 400000,
1255 false, false, false, ""};
1256 screenshare.screenshare[0] = {true, false, 10};
1257 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1258 kTestDurationSec};
1259 screenshare.config->loss_percent = 1;
1260 screenshare.config->link_capacity_kbps = 1200;
1261 screenshare.config->queue_length_packets = 30;
1262
1263 fixture->RunWithAnalyzer(screenshare);
1264}
1265
1266namespace {
1267// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1268// Since ParamsWithLogging::Video is not trivially destructible, we can't
1269// store these structs as const globals.
1270ParamsWithLogging::Video SvcVp9Video() {
1271 return ParamsWithLogging::Video{
1272 true, 1280,
1273 720, 30,
1274 800000, 2500000,
1275 2500000, false,
1276 "VP9", 3,
1277 2, 400000,
1278 false, false,
1279 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1280}
1281
1282ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1283 return ParamsWithLogging::Video{
1284 true, 1280,
1285 720, 30,
1286 800000, 2500000,
1287 2500000, false,
1288 "VP8", 3,
1289 2, 400000,
1290 false, false,
1291 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1292}
1293
1294ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1295 return ParamsWithLogging::Video{
1296 true, 640,
1297 360, 30,
1298 150000, 500000,
1299 700000, false,
1300 "VP8", 3,
1301 2, 400000,
1302 false, false,
1303 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1304}
1305
1306ParamsWithLogging::Video SimulcastVp8VideoLow() {
1307 return ParamsWithLogging::Video{
1308 true, 320,
1309 180, 30,
1310 30000, 150000,
1311 200000, false,
1312 "VP8", 3,
1313 2, 400000,
1314 false, false,
1315 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1316}
1317} // namespace
Artem Titov733a7812019-07-24 14:53:15 +02001318*/
Artem Titov137f6c82019-05-17 10:51:15 +02001319
1320#if defined(RTC_ENABLE_VP9)
1321
Jeremy Leconte4100d552020-09-11 18:02:36 +02001322TEST(PCFullStackTest, Pc_Screenshare_Slides_Vp9_3sl_High_Fps) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001323 webrtc::test::ScopedFieldTrials override_trials(
1324 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1325 "Enabled,inter_layer_pred_mode:on/"));
Artem Titov733a7812019-07-24 14:53:15 +02001326 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1327 CreateNetworkEmulationManager();
1328 auto fixture = CreateTestFixture(
1329 "pc_screenshare_slides_vp9_3sl_high_fps",
Artem Titov1ff3c582020-07-01 15:20:37 +02001330 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001331 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
1332 BuiltInNetworkBehaviorConfig()),
Artem Titov733a7812019-07-24 14:53:15 +02001333 [](PeerConfigurer* alice) {
1334 VideoConfig video(1850, 1110, 30);
1335 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001336 video.simulcast_config = VideoSimulcastConfig(3);
1337 video.emulated_sfu_config = EmulatedSFUConfig(2);
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001338 video.content_hint = VideoTrackInterface::ContentHint::kText;
1339 auto frame_generator = CreateScreenShareFrameGenerator(
1340 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001341 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001342 alice->SetVideoCodecs({VideoCodecConfig(
1343 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1344 {kVP9FmtpProfileId,
1345 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov733a7812019-07-24 14:53:15 +02001346 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001347 [](PeerConfigurer* bob) {
1348 bob->SetVideoCodecs({VideoCodecConfig(
1349 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1350 {kVP9FmtpProfileId,
1351 VP9ProfileToString(VP9Profile::kProfile0)}})});
1352 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001353 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001354}
1355
Jeremy Leconte4100d552020-09-11 18:02:36 +02001356TEST(PCFullStackTest, Pc_Vp9svc_3sl_High) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001357 webrtc::test::ScopedFieldTrials override_trials(
1358 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1359 "Enabled,inter_layer_pred_mode:on/"));
1360 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1361 CreateNetworkEmulationManager();
1362 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001363 "pc_vp9svc_3sl_high", *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001364 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
1365 BuiltInNetworkBehaviorConfig()),
Artem Titov1e49ab22019-07-30 13:17:25 +02001366 [](PeerConfigurer* alice) {
1367 VideoConfig video(1280, 720, 30);
1368 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001369 video.simulcast_config = VideoSimulcastConfig(3);
1370 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov1e49ab22019-07-30 13:17:25 +02001371 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001372 auto frame_generator = CreateFromYuvFileFrameGenerator(
1373 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1374 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001375 alice->SetVideoCodecs({VideoCodecConfig(
1376 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1377 {kVP9FmtpProfileId,
1378 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001379 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001380 [](PeerConfigurer* bob) {
1381 bob->SetVideoCodecs({VideoCodecConfig(
1382 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1383 {kVP9FmtpProfileId,
1384 VP9ProfileToString(VP9Profile::kProfile0)}})});
1385 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001386 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov1e49ab22019-07-30 13:17:25 +02001387}
1388
Jeremy Leconte4100d552020-09-11 18:02:36 +02001389TEST(PCFullStackTest, Pc_Vp9svc_3sl_Low) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001390 webrtc::test::ScopedFieldTrials override_trials(
1391 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1392 "Enabled,inter_layer_pred_mode:on/"));
1393 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1394 CreateNetworkEmulationManager();
1395 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001396 "pc_vp9svc_3sl_low", *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001397 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(
1398 BuiltInNetworkBehaviorConfig()),
Artem Titov1e49ab22019-07-30 13:17:25 +02001399 [](PeerConfigurer* alice) {
1400 VideoConfig video(1280, 720, 30);
1401 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001402 video.simulcast_config = VideoSimulcastConfig(3);
1403 video.emulated_sfu_config = EmulatedSFUConfig(0);
Artem Titov1e49ab22019-07-30 13:17:25 +02001404 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001405 auto frame_generator = CreateFromYuvFileFrameGenerator(
1406 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1407 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001408 alice->SetVideoCodecs({VideoCodecConfig(
1409 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1410 {kVP9FmtpProfileId,
1411 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001412 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001413 [](PeerConfigurer* bob) {
1414 bob->SetVideoCodecs({VideoCodecConfig(
1415 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1416 {kVP9FmtpProfileId,
1417 VP9ProfileToString(VP9Profile::kProfile0)}})});
1418 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001419 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov1e49ab22019-07-30 13:17:25 +02001420}
1421
Artem Titov733a7812019-07-24 14:53:15 +02001422#endif // defined(RTC_ENABLE_VP9)
1423
1424/*
Artem Titov137f6c82019-05-17 10:51:15 +02001425// bugs.webrtc.org/9506
1426#if !defined(WEBRTC_MAC)
1427
1428// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1429TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1430 webrtc::test::ScopedFieldTrials override_trials(
1431 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1432 auto fixture = CreateVideoQualityTestFixture();
1433 ParamsWithLogging simulcast;
1434 simulcast.call.send_side_bwe = true;
1435 simulcast.video[0] = SvcVp9Video();
1436 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1437 simulcast.ss[0] = {
1438 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1439 std::vector<SpatialLayer>(), false};
1440 fixture->RunWithAnalyzer(simulcast);
1441}
1442
1443// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1444TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1445 webrtc::test::ScopedFieldTrials override_trials(
1446 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1447 auto fixture = CreateVideoQualityTestFixture();
1448 ParamsWithLogging simulcast;
1449 simulcast.call.send_side_bwe = true;
1450 simulcast.video[0] = SvcVp9Video();
1451 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1452 simulcast.ss[0] = {
1453 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1454 std::vector<SpatialLayer>(), false};
1455 fixture->RunWithAnalyzer(simulcast);
1456}
1457
1458// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1459TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1460 webrtc::test::ScopedFieldTrials override_trials(
1461 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1462 auto fixture = CreateVideoQualityTestFixture();
1463 ParamsWithLogging simulcast;
1464 simulcast.call.send_side_bwe = true;
1465 simulcast.video[0] = SvcVp9Video();
1466 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1467 simulcast.ss[0] = {
1468 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1469 std::vector<SpatialLayer>(), false};
1470 fixture->RunWithAnalyzer(simulcast);
1471}
1472
1473// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1474TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1475 webrtc::test::ScopedFieldTrials override_trials(
1476 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1477 auto fixture = CreateVideoQualityTestFixture();
1478 ParamsWithLogging simulcast;
1479 simulcast.call.send_side_bwe = true;
1480 simulcast.video[0] = SvcVp9Video();
1481 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1482 kTestDurationSec};
1483 simulcast.ss[0] = {
1484 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1485 std::vector<SpatialLayer>(), false};
1486 simulcast.config->link_capacity_kbps = 1000;
1487 simulcast.config->queue_delay_ms = 100;
1488 fixture->RunWithAnalyzer(simulcast);
1489}
1490
1491// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1492// TODO(webrtc:9722): Remove when experiment is cleaned up.
1493TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1494 webrtc::test::ScopedFieldTrials override_trials(
Mirko Bonadeie39b3782020-09-24 14:02:39 +02001495 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Artem Titov137f6c82019-05-17 10:51:15 +02001496 auto fixture = CreateVideoQualityTestFixture();
1497 ParamsWithLogging simulcast;
1498 simulcast.call.send_side_bwe = true;
1499 simulcast.video[0] = SvcVp9Video();
1500 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1501 0.0, 0.0, kTestDurationSec};
1502 simulcast.ss[0] = {
1503 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1504 std::vector<SpatialLayer>(), false};
1505 simulcast.config->link_capacity_kbps = 1000;
1506 simulcast.config->queue_delay_ms = 100;
1507 fixture->RunWithAnalyzer(simulcast);
1508}
1509#endif // !defined(WEBRTC_MAC)
1510
1511#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001512*/
Artem Titov137f6c82019-05-17 10:51:15 +02001513
1514// Android bots can't handle FullHD, so disable the test.
1515// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1516#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001517#define MAYBE_Pc_Simulcast_HD_High DISABLED_Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001518#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001519#define MAYBE_Pc_Simulcast_HD_High Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001520#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001521TEST(PCFullStackTest, MAYBE_Pc_Simulcast_HD_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001522 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1523 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001524 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1525 CreateNetworkEmulationManager();
1526 BuiltInNetworkBehaviorConfig config;
1527 config.loss_percent = 0;
1528 config.queue_delay_ms = 100;
1529 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001530 "pc_simulcast_HD_high", *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001531 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov39483c62019-07-19 17:03:52 +02001532 [](PeerConfigurer* alice) {
1533 VideoConfig video(1920, 1080, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001534 video.simulcast_config = VideoSimulcastConfig(3);
1535 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov4b9701e2019-08-28 13:48:02 +02001536 video.temporal_layers_count = 3;
Artem Titov39483c62019-07-19 17:03:52 +02001537 video.stream_label = "alice-video";
Andrey Logvin42c59522020-05-06 12:18:26 +00001538 alice->AddVideoConfig(std::move(video));
Artem Titov39483c62019-07-19 17:03:52 +02001539 },
1540 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001541 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001542}
1543
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001544TEST_P(ParameterizedPCFullStackTest, Pc_Simulcast_Vp8_3sl_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001545 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1546 CreateNetworkEmulationManager();
1547 BuiltInNetworkBehaviorConfig config;
1548 config.loss_percent = 0;
1549 config.queue_delay_ms = 100;
1550 auto fixture = CreateTestFixture(
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001551 "pc_simulcast_vp8_3sl_high" + GetParam().test_case_name_postfix,
Artem Titov1ff3c582020-07-01 15:20:37 +02001552 *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001553 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov39483c62019-07-19 17:03:52 +02001554 [](PeerConfigurer* alice) {
1555 VideoConfig video(1280, 720, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001556 video.simulcast_config = VideoSimulcastConfig(3);
1557 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov39483c62019-07-19 17:03:52 +02001558 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001559 auto frame_generator = CreateFromYuvFileFrameGenerator(
1560 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1561 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001562 if (GetParam().use_network_thread_as_worker_thread) {
1563 alice->SetUseNetworkThreadAsWorkerThread();
1564 }
Artem Titov39483c62019-07-19 17:03:52 +02001565 },
Per Kjellanderf363d0d2022-10-13 10:21:05 +02001566 [](PeerConfigurer* bob) {
1567 if (GetParam().use_network_thread_as_worker_thread) {
1568 bob->SetUseNetworkThreadAsWorkerThread();
1569 }
1570 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001571 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001572}
1573
Jeremy Leconte4100d552020-09-11 18:02:36 +02001574TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001575 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1576 CreateNetworkEmulationManager();
1577 BuiltInNetworkBehaviorConfig config;
1578 config.loss_percent = 0;
1579 config.queue_delay_ms = 100;
1580 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001581 "pc_simulcast_vp8_3sl_low", *network_emulation_manager->time_controller(),
Byoungchan Leee2f2cae2022-09-26 23:44:44 +09001582 network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config),
Artem Titov39483c62019-07-19 17:03:52 +02001583 [](PeerConfigurer* alice) {
1584 VideoConfig video(1280, 720, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001585 video.simulcast_config = VideoSimulcastConfig(3);
1586 video.emulated_sfu_config = EmulatedSFUConfig(0);
Artem Titov39483c62019-07-19 17:03:52 +02001587 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001588 auto frame_generator = CreateFromYuvFileFrameGenerator(
1589 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1590 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001591 },
1592 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001593 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001594}
1595
Artem Titov39483c62019-07-19 17:03:52 +02001596/*
Artem Titov137f6c82019-05-17 10:51:15 +02001597// This test assumes ideal network conditions with target bandwidth being
1598// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1599// Android32 bots can't handle this high bitrate, so disable test for those.
1600#if defined(WEBRTC_ANDROID)
1601#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1602#else
1603#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1604#endif // defined(WEBRTC_ANDROID)
1605// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1606configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1607fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1608 ParamsWithLogging generator;
1609 generator.call.send_side_bwe = true;
1610 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1611 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1612 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1613 generator.video[0] = {true,
1614 360,
1615 240,
1616 30,
1617 target_bitrate / 2,
1618 target_bitrate,
1619 target_bitrate * 2,
1620 false,
1621 "FakeCodec",
1622 1,
1623 0,
1624 0,
1625 false,
1626 false,
1627 false,
1628 "Generator"};
1629 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1630 kTestDurationSec};
1631 fixture->RunWithAnalyzer(generator);
1632}
1633
1634// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1635TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1636 auto fixture = CreateVideoQualityTestFixture();
1637 ParamsWithLogging large_room;
1638 large_room.call.send_side_bwe = true;
1639 large_room.video[0] = SimulcastVp8VideoHigh();
1640 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1641 large_room.config->loss_percent = 0;
1642 large_room.config->queue_delay_ms = 100;
1643 ParamsWithLogging video_params_high;
1644 video_params_high.video[0] = SimulcastVp8VideoHigh();
1645 ParamsWithLogging video_params_medium;
1646 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1647 ParamsWithLogging video_params_low;
1648 video_params_low.video[0] = SimulcastVp8VideoLow();
1649
1650 std::vector<VideoStream> streams = {
1651 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1652 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1653 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1654 large_room.call.num_thumbnails = 5;
1655 large_room.ss[0] = {
1656 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1657 false};
1658 fixture->RunWithAnalyzer(large_room);
1659}
1660
1661#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1662// Fails on mobile devices:
1663// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1664#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1665#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1666#else
1667#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1668#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1669#endif
1670// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1671TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1672 auto fixture = CreateVideoQualityTestFixture();
1673 ParamsWithLogging large_room;
1674 large_room.call.send_side_bwe = true;
1675 large_room.video[0] = SimulcastVp8VideoHigh();
1676 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1677 large_room.config->loss_percent = 0;
1678 large_room.config->queue_delay_ms = 100;
1679 ParamsWithLogging video_params_high;
1680 video_params_high.video[0] = SimulcastVp8VideoHigh();
1681 ParamsWithLogging video_params_medium;
1682 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1683 ParamsWithLogging video_params_low;
1684 video_params_low.video[0] = SimulcastVp8VideoLow();
1685
1686 std::vector<VideoStream> streams = {
1687 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1688 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1689 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1690 large_room.call.num_thumbnails = 15;
1691 large_room.ss[0] = {
1692 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1693 false};
1694 fixture->RunWithAnalyzer(large_room);
1695}
1696
1697// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1698TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1699 auto fixture = CreateVideoQualityTestFixture();
1700 ParamsWithLogging large_room;
1701 large_room.call.send_side_bwe = true;
1702 large_room.video[0] = SimulcastVp8VideoHigh();
1703 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1704 large_room.config->loss_percent = 0;
1705 large_room.config->queue_delay_ms = 100;
1706 ParamsWithLogging video_params_high;
1707 video_params_high.video[0] = SimulcastVp8VideoHigh();
1708 ParamsWithLogging video_params_medium;
1709 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1710 ParamsWithLogging video_params_low;
1711 video_params_low.video[0] = SimulcastVp8VideoLow();
1712
1713 std::vector<VideoStream> streams = {
1714 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1715 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1716 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1717 large_room.call.num_thumbnails = 50;
1718 large_room.ss[0] = {
1719 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1720 false};
1721 fixture->RunWithAnalyzer(large_room);
1722}
1723*/
1724
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001725/*
Artem Titov137f6c82019-05-17 10:51:15 +02001726class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1727
Artem Titov137f6c82019-05-17 10:51:15 +02001728// Disable dual video test on mobile device becuase it's too heavy.
1729// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1730#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1731// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1732TEST_P(PCDualStreamsTest,
1733 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001734 const int first_stream = GetParam();
1735 ParamsWithLogging dual_streams;
1736
1737 // Screenshare Settings.
1738 dual_streams.screenshare[first_stream] = {true, false, 10};
1739 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1740 2500000, false, "VP8", 2, 1, 400000,
1741 false, false, false, ""};
1742
1743 ParamsWithLogging screenshare_params_high;
1744 screenshare_params_high.video[0] = {
1745 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1746 "VP8", 2, 0, 400000, false, false, false, ""};
1747 VideoQualityTest::Params screenshare_params_low;
1748 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1749 1000000, false, "VP8", 2, 0, 400000,
1750 false, false, false, ""};
1751 std::vector<VideoStream> screenhsare_streams = {
1752 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1753 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1754
1755 dual_streams.ss[first_stream] = {
1756 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1757 std::vector<SpatialLayer>(), false};
1758
1759 // Video settings.
1760 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1761
1762 ParamsWithLogging video_params_high;
1763 video_params_high.video[0] = SimulcastVp8VideoHigh();
1764 ParamsWithLogging video_params_medium;
1765 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1766 ParamsWithLogging video_params_low;
1767 video_params_low.video[0] = SimulcastVp8VideoLow();
1768 std::vector<VideoStream> streams = {
1769 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1770 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1771 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1772
1773 dual_streams.ss[1 - first_stream] = {
1774 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1775 false};
1776
1777 // Call settings.
1778 dual_streams.call.send_side_bwe = true;
1779 dual_streams.call.dual_video = true;
1780 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1781 std::to_string(first_stream);
1782 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1783 dual_streams.config->loss_percent = 1;
1784 dual_streams.config->link_capacity_kbps = 7500;
1785 dual_streams.config->queue_length_packets = 30;
1786 dual_streams.config->queue_delay_ms = 100;
1787
1788 auto fixture = CreateVideoQualityTestFixture();
1789 fixture->RunWithAnalyzer(dual_streams);
1790}
1791#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1792 // !defined(WEBRTC_MAC)
1793
1794// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1795TEST_P(PCDualStreamsTest, Conference_Restricted) {
1796 const int first_stream = GetParam();
1797 ParamsWithLogging dual_streams;
1798
1799 // Screenshare Settings.
1800 dual_streams.screenshare[first_stream] = {true, false, 10};
1801 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1802 2500000, false, "VP8", 3, 2, 400000,
1803 false, false, false, ""};
1804 // Video settings.
1805 dual_streams.video[1 - first_stream] = {
1806 true, 1280,
1807 720, 30,
1808 150000, 500000,
1809 700000, false,
1810 "VP8", 3,
1811 2, 400000,
1812 false, false,
1813 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1814
1815 // Call settings.
1816 dual_streams.call.send_side_bwe = true;
1817 dual_streams.call.dual_video = true;
1818 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1819 std::to_string(first_stream);
1820 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1821 dual_streams.config->loss_percent = 1;
1822 dual_streams.config->link_capacity_kbps = 5000;
1823 dual_streams.config->queue_length_packets = 30;
1824 dual_streams.config->queue_delay_ms = 100;
1825
1826 auto fixture = CreateVideoQualityTestFixture();
1827 fixture->RunWithAnalyzer(dual_streams);
1828}
Artem Titov137f6c82019-05-17 10:51:15 +02001829
1830INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1831 PCDualStreamsTest,
1832 ::testing::Values(0, 1));
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001833*/
Artem Titov137f6c82019-05-17 10:51:15 +02001834
1835} // namespace webrtc