blob: d515a5271b5509585b85a7a4a9aa4e4381527e8c [file] [log] [blame]
Artem Titov137f6c82019-05-17 10:51:15 +02001/*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10#include <memory>
11#include <string>
12#include <utility>
13#include <vector>
14
Andrey Logvin435fb9a2020-05-08 08:02:49 +000015#include "api/media_stream_interface.h"
Artem Titov137f6c82019-05-17 10:51:15 +020016#include "api/test/create_network_emulation_manager.h"
Andrey Logvinc0644672020-05-05 10:33:01 +000017#include "api/test/create_peer_connection_quality_test_frame_generator.h"
Artem Titov137f6c82019-05-17 10:51:15 +020018#include "api/test/create_peerconnection_quality_test_fixture.h"
Andrey Logvinc0644672020-05-05 10:33:01 +000019#include "api/test/frame_generator_interface.h"
Artem Titov137f6c82019-05-17 10:51:15 +020020#include "api/test/network_emulation_manager.h"
21#include "api/test/peerconnection_quality_test_fixture.h"
22#include "api/test/simulated_network.h"
Artem Titov1ff3c582020-07-01 15:20:37 +020023#include "api/test/time_controller.h"
Artem Titov137f6c82019-05-17 10:51:15 +020024#include "call/simulated_network.h"
25#include "media/base/vp9_profile.h"
26#include "modules/video_coding/codecs/vp9/include/vp9.h"
27#include "system_wrappers/include/field_trial.h"
28#include "test/field_trial.h"
29#include "test/gtest.h"
30#include "test/pc/e2e/network_quality_metrics_reporter.h"
31#include "test/testsupport/file_utils.h"
32
33namespace webrtc {
34
35using PeerConfigurer =
36 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer;
37using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
38using VideoConfig =
39 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
40using AudioConfig =
41 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
Artem Titov39483c62019-07-19 17:03:52 +020042using ScreenShareConfig =
43 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
44using VideoSimulcastConfig =
45 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoSimulcastConfig;
Artem Titovcdd73e02020-01-23 14:09:09 +010046using VideoCodecConfig =
47 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoCodecConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020048
49namespace {
50
51constexpr int kTestDurationSec = 45;
Artem Titov137f6c82019-05-17 10:51:15 +020052
53EmulatedNetworkNode* CreateEmulatedNodeWithConfig(
54 NetworkEmulationManager* emulation,
55 const BuiltInNetworkBehaviorConfig& config) {
56 return emulation->CreateEmulatedNode(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020057 std::make_unique<SimulatedNetwork>(config));
Artem Titov137f6c82019-05-17 10:51:15 +020058}
59
60std::pair<EmulatedNetworkManagerInterface*, EmulatedNetworkManagerInterface*>
61CreateTwoNetworkLinks(NetworkEmulationManager* emulation,
62 const BuiltInNetworkBehaviorConfig& config) {
63 auto* alice_node = CreateEmulatedNodeWithConfig(emulation, config);
64 auto* bob_node = CreateEmulatedNodeWithConfig(emulation, config);
65
66 auto* alice_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
67 auto* bob_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
68
69 emulation->CreateRoute(alice_endpoint, {alice_node}, bob_endpoint);
70 emulation->CreateRoute(bob_endpoint, {bob_node}, alice_endpoint);
71
72 return {
73 emulation->CreateEmulatedNetworkManagerInterface({alice_endpoint}),
74 emulation->CreateEmulatedNetworkManagerInterface({bob_endpoint}),
75 };
76}
77
78std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture>
79CreateTestFixture(const std::string& test_case_name,
Artem Titov1ff3c582020-07-01 15:20:37 +020080 TimeController& time_controller,
Artem Titov137f6c82019-05-17 10:51:15 +020081 std::pair<EmulatedNetworkManagerInterface*,
82 EmulatedNetworkManagerInterface*> network_links,
83 rtc::FunctionView<void(PeerConfigurer*)> alice_configurer,
84 rtc::FunctionView<void(PeerConfigurer*)> bob_configurer) {
85 auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +020086 test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
Artem Titov137f6c82019-05-17 10:51:15 +020087 /*video_quality_analyzer=*/nullptr);
88 fixture->AddPeer(network_links.first->network_thread(),
89 network_links.first->network_manager(), alice_configurer);
90 fixture->AddPeer(network_links.second->network_thread(),
91 network_links.second->network_manager(), bob_configurer);
92 fixture->AddQualityMetricsReporter(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020093 std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
Artem Titov137f6c82019-05-17 10:51:15 +020094 network_links.first, network_links.second));
95 return fixture;
96}
97
98// Takes the current active field trials set, and appends some new trials.
99std::string AppendFieldTrials(std::string new_trial_string) {
100 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
101}
102
103std::string ClipNameToClipPath(const char* clip_name) {
104 return test::ResourcePath(clip_name, "yuv");
105}
106
107} // namespace
108
Artem Titov137f6c82019-05-17 10:51:15 +0200109#if defined(RTC_ENABLE_VP9)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200110TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_VP9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200111 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
112 CreateNetworkEmulationManager();
113 auto fixture = CreateTestFixture(
114 "pc_foreman_cif_net_delay_0_0_plr_0_VP9",
Artem Titov1ff3c582020-07-01 15:20:37 +0200115 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200116 CreateTwoNetworkLinks(network_emulation_manager.get(),
117 BuiltInNetworkBehaviorConfig()),
118 [](PeerConfigurer* alice) {
119 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200120 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000121 auto frame_generator = CreateFromYuvFileFrameGenerator(
122 video, ClipNameToClipPath("foreman_cif"));
123 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200124 },
125 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100126 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100127 run_params.video_codecs = {VideoCodecConfig(
128 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
129 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov137f6c82019-05-17 10:51:15 +0200130 run_params.use_flex_fec = false;
131 run_params.use_ulp_fec = false;
132 fixture->Run(std::move(run_params));
133}
134
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200135TEST(PCGenericDescriptorTest,
136 Pc_Foreman_Cif_Delay_50_0_Plr_5_VP9_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200137 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
138 CreateNetworkEmulationManager();
139 BuiltInNetworkBehaviorConfig config;
140 config.loss_percent = 5;
141 config.queue_delay_ms = 50;
142 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200143 "pc_foreman_cif_delay_50_0_plr_5_VP9_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200144 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200145 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
146 [](PeerConfigurer* alice) {
147 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200148 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000149 auto frame_generator = CreateFromYuvFileFrameGenerator(
150 video, ClipNameToClipPath("foreman_cif"));
151 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200152 },
153 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100154 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100155 run_params.video_codecs = {VideoCodecConfig(
156 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
157 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov137f6c82019-05-17 10:51:15 +0200158 run_params.use_flex_fec = false;
159 run_params.use_ulp_fec = false;
160 fixture->Run(std::move(run_params));
161}
162
Artem Titove731a2e2019-07-02 10:08:17 +0200163// VP9 2nd profile isn't supported on android arm and arm 64.
Artem Titovcecee992019-07-03 11:55:28 +0200164#if (defined(WEBRTC_ANDROID) && \
165 (defined(WEBRTC_ARCH_ARM64) || defined(WEBRTC_ARCH_ARM))) || \
166 (defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64))
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200167#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
168 DISABLED_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200169#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200170#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
171 Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200172#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200173TEST(PCFullStackTest, MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2) {
Artem Titov137f6c82019-05-17 10:51:15 +0200174 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
175 CreateNetworkEmulationManager();
176 auto fixture = CreateTestFixture(
177 "pc_generator_net_delay_0_0_plr_0_VP9Profile2",
Artem Titov1ff3c582020-07-01 15:20:37 +0200178 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200179 CreateTwoNetworkLinks(network_emulation_manager.get(),
180 BuiltInNetworkBehaviorConfig()),
181 [](PeerConfigurer* alice) {
182 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200183 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000184 auto frame_generator = CreateSquareFrameGenerator(
185 video, test::FrameGeneratorInterface::OutputType::kI010);
186 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200187 },
188 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100189 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100190 run_params.video_codecs = {VideoCodecConfig(
191 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
192 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}})};
Artem Titov137f6c82019-05-17 10:51:15 +0200193 run_params.use_flex_fec = false;
194 run_params.use_ulp_fec = false;
195 fixture->Run(std::move(run_params));
196}
197
198/*
199// TODO(bugs.webrtc.org/10639) migrate commented out test, when required
200// functionality will be supported in PeerConnection level framework.
201TEST(PCFullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
202 auto fixture = CreateVideoQualityTestFixture();
203 ParamsWithLogging foreman_cif;
204 foreman_cif.call.send_side_bwe = true;
205 foreman_cif.video[0] = {
206 true, 352, 288, 30,
207 700000, 700000, 700000, false,
208 "multiplex", 1, 0, 0,
209 false, false, false, ClipNameToClipPath("foreman_cif")};
210 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
211 kTestDurationSec};
212 fixture->RunWithAnalyzer(foreman_cif);
213}
214
215TEST(PCFullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
216 auto fixture = CreateVideoQualityTestFixture();
217
218 ParamsWithLogging generator;
219 generator.call.send_side_bwe = true;
220 generator.video[0] = {
221 true, 352, 288, 30, 700000, 700000, 700000, false,
222 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
223 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
224 kTestDurationSec};
225 fixture->RunWithAnalyzer(generator);
226}
227*/
228#endif // defined(RTC_ENABLE_VP9)
229
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200230TEST(PCFullStackTest, Pc_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200231 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
232 CreateNetworkEmulationManager();
233 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200234 "pc_net_delay_0_0_plr_0", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200235 CreateTwoNetworkLinks(network_emulation_manager.get(),
236 BuiltInNetworkBehaviorConfig()),
237 [](PeerConfigurer* alice) {
238 VideoConfig video(176, 144, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200239 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000240 auto frame_generator = CreateFromYuvFileFrameGenerator(
241 video, ClipNameToClipPath("paris_qcif"));
242 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200243 },
244 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100245 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100246 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200247 run_params.use_flex_fec = false;
248 run_params.use_ulp_fec = false;
249 fixture->Run(std::move(run_params));
250}
251
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200252TEST(PCGenericDescriptorTest,
253 Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200254 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
255 CreateNetworkEmulationManager();
256 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200257 "pc_foreman_cif_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200258 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200259 CreateTwoNetworkLinks(network_emulation_manager.get(),
260 BuiltInNetworkBehaviorConfig()),
261 [](PeerConfigurer* alice) {
262 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200263 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000264 auto frame_generator = CreateFromYuvFileFrameGenerator(
265 video, ClipNameToClipPath("foreman_cif"));
266 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200267 },
268 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100269 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100270 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200271 run_params.use_flex_fec = false;
272 run_params.use_ulp_fec = false;
273 fixture->Run(std::move(run_params));
274}
275
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200276TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200277 Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200278 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
279 CreateNetworkEmulationManager();
280 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200281 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200282 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200283 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200284 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
285 [](PeerConfigurer* alice) {
286 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200287 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000288 auto frame_generator = CreateFromYuvFileFrameGenerator(
289 video, ClipNameToClipPath("foreman_cif"));
290 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200291
Niels Möller29d59a12020-06-22 14:48:10 +0200292 BitrateSettings bitrate_settings;
293 bitrate_settings.min_bitrate_bps = 30000;
294 bitrate_settings.start_bitrate_bps = 30000;
295 bitrate_settings.max_bitrate_bps = 30000;
296 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200297 },
298 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100299 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100300 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200301 run_params.use_flex_fec = false;
302 run_params.use_ulp_fec = false;
303 fixture->Run(std::move(run_params));
304}
305
Artem Titov137f6c82019-05-17 10:51:15 +0200306// Link capacity below default start rate.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200307TEST(PCFullStackTest, Pc_Foreman_Cif_Link_150kbps_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200308 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
309 CreateNetworkEmulationManager();
310 BuiltInNetworkBehaviorConfig config;
311 config.link_capacity_kbps = 150;
312 auto fixture = CreateTestFixture(
313 "pc_foreman_cif_link_150kbps_net_delay_0_0_plr_0",
Artem Titov1ff3c582020-07-01 15:20:37 +0200314 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200315 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
316 [](PeerConfigurer* alice) {
317 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200318 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000319 auto frame_generator = CreateFromYuvFileFrameGenerator(
320 video, ClipNameToClipPath("foreman_cif"));
321 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200322 },
323 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100324 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100325 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200326 run_params.use_flex_fec = false;
327 run_params.use_ulp_fec = false;
328 fixture->Run(std::move(run_params));
329}
330
Jeremy Leconte4100d552020-09-11 18:02:36 +0200331TEST(PCFullStackTest, Pc_Foreman_Cif_Link_130kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200332 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
333 CreateNetworkEmulationManager();
334 BuiltInNetworkBehaviorConfig config;
335 config.link_capacity_kbps = 130;
336 config.queue_delay_ms = 100;
337 config.loss_percent = 1;
338 auto fixture = CreateTestFixture(
339 "pc_foreman_cif_link_130kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200340 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200341 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
342 [](PeerConfigurer* alice) {
343 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200344 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000345 auto frame_generator = CreateFromYuvFileFrameGenerator(
346 video, ClipNameToClipPath("foreman_cif"));
347 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov65428262019-07-02 16:48:02 +0200348 },
349 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100350 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100351 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov65428262019-07-02 16:48:02 +0200352 run_params.use_flex_fec = false;
353 run_params.use_ulp_fec = true;
354 fixture->Run(std::move(run_params));
355}
356
Jeremy Leconte4100d552020-09-11 18:02:36 +0200357TEST(PCFullStackTest, Pc_Foreman_Cif_Link_50kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200358 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
359 CreateNetworkEmulationManager();
360 BuiltInNetworkBehaviorConfig config;
361 config.link_capacity_kbps = 50;
362 config.queue_delay_ms = 100;
363 config.loss_percent = 1;
364 auto fixture = CreateTestFixture(
365 "pc_foreman_cif_link_50kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200366 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200367 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
368 [](PeerConfigurer* alice) {
369 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200370 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000371 auto frame_generator = CreateFromYuvFileFrameGenerator(
372 video, ClipNameToClipPath("foreman_cif"));
373 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov65428262019-07-02 16:48:02 +0200374 },
375 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100376 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100377 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov65428262019-07-02 16:48:02 +0200378 run_params.use_flex_fec = false;
379 run_params.use_ulp_fec = true;
380 fixture->Run(std::move(run_params));
381}
382
Artem Titov137f6c82019-05-17 10:51:15 +0200383// Restricted network and encoder overproducing by 30%.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200384TEST(PCFullStackTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200385 Pc_Foreman_Cif_Link_150kbps_Delay100ms_30pkts_Queue_Overshoot30) {
Artem Titov137f6c82019-05-17 10:51:15 +0200386 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
387 CreateNetworkEmulationManager();
388 BuiltInNetworkBehaviorConfig config;
389 config.link_capacity_kbps = 150;
390 config.queue_length_packets = 30;
391 config.queue_delay_ms = 100;
392 auto fixture = CreateTestFixture(
393 "pc_foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30",
Artem Titov1ff3c582020-07-01 15:20:37 +0200394 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200395 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
396 [](PeerConfigurer* alice) {
397 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200398 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000399 auto frame_generator = CreateFromYuvFileFrameGenerator(
400 video, ClipNameToClipPath("foreman_cif"));
401 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200402 },
403 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100404 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100405 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200406 run_params.use_flex_fec = false;
407 run_params.use_ulp_fec = false;
408 run_params.video_encoder_bitrate_multiplier = 1.30;
409 fixture->Run(std::move(run_params));
410}
411
412// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
413// Packet rate and loss are low enough that loss will happen with ~3s interval.
414// This triggers protection overhead to toggle between zero and non-zero.
415// Link queue is restrictive enough to trigger loss on probes.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200416TEST(PCFullStackTest, Pc_Foreman_Cif_Link_250kbps_Delay100ms_10pkts_Loss1) {
Artem Titov137f6c82019-05-17 10:51:15 +0200417 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
418 CreateNetworkEmulationManager();
419 BuiltInNetworkBehaviorConfig config;
420 config.link_capacity_kbps = 250;
421 config.queue_length_packets = 10;
422 config.queue_delay_ms = 100;
423 config.loss_percent = 1;
424 auto fixture = CreateTestFixture(
425 "pc_foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
Artem Titov1ff3c582020-07-01 15:20:37 +0200426 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200427 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
428 [](PeerConfigurer* alice) {
429 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200430 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000431 auto frame_generator = CreateFromYuvFileFrameGenerator(
432 video, ClipNameToClipPath("foreman_cif"));
433 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200434 },
435 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100436 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100437 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200438 run_params.use_flex_fec = false;
439 run_params.use_ulp_fec = false;
440 run_params.video_encoder_bitrate_multiplier = 1.30;
441 fixture->Run(std::move(run_params));
442}
443
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200444TEST(PCGenericDescriptorTest,
445 Pc_Foreman_Cif_Delay_50_0_Plr_5_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200446 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
447 CreateNetworkEmulationManager();
448 BuiltInNetworkBehaviorConfig config;
449 config.loss_percent = 5;
450 config.queue_delay_ms = 50;
451 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200452 "pc_foreman_cif_delay_50_0_plr_5_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200453 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200454 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
455 [](PeerConfigurer* alice) {
456 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200457 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000458 auto frame_generator = CreateFromYuvFileFrameGenerator(
459 video, ClipNameToClipPath("foreman_cif"));
460 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200461 },
462 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100463 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100464 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200465 run_params.use_flex_fec = false;
466 run_params.use_ulp_fec = false;
467 fixture->Run(std::move(run_params));
468}
469
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200470TEST(PCGenericDescriptorTest,
471 Pc_Foreman_Cif_Delay_50_0_Plr_5_Ulpfec_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200472 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
473 CreateNetworkEmulationManager();
474 BuiltInNetworkBehaviorConfig config;
475 config.loss_percent = 5;
476 config.queue_delay_ms = 50;
477 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200478 "pc_foreman_cif_delay_50_0_plr_5_ulpfec_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200479 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200480 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
481 [](PeerConfigurer* alice) {
482 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200483 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000484 auto frame_generator = CreateFromYuvFileFrameGenerator(
485 video, ClipNameToClipPath("foreman_cif"));
486 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200487 },
488 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100489 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100490 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200491 run_params.use_flex_fec = false;
492 run_params.use_ulp_fec = true;
493 fixture->Run(std::move(run_params));
494}
495
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200496TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200497 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
498 CreateNetworkEmulationManager();
499 BuiltInNetworkBehaviorConfig config;
500 config.loss_percent = 5;
501 config.queue_delay_ms = 50;
502 auto fixture = CreateTestFixture(
503 "pc_foreman_cif_delay_50_0_plr_5_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200504 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200505 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
506 [](PeerConfigurer* alice) {
507 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200508 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000509 auto frame_generator = CreateFromYuvFileFrameGenerator(
510 video, ClipNameToClipPath("foreman_cif"));
511 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200512 },
513 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100514 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100515 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200516 run_params.use_flex_fec = true;
517 run_params.use_ulp_fec = false;
518 fixture->Run(std::move(run_params));
519}
520
Jeremy Leconte4100d552020-09-11 18:02:36 +0200521TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200522 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
523 CreateNetworkEmulationManager();
524 BuiltInNetworkBehaviorConfig config;
525 config.loss_percent = 3;
526 config.link_capacity_kbps = 500;
527 config.queue_delay_ms = 50;
528 auto fixture = CreateTestFixture(
529 "pc_foreman_cif_500kbps_delay_50_0_plr_3_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200530 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200531 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
532 [](PeerConfigurer* alice) {
533 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200534 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000535 auto frame_generator = CreateFromYuvFileFrameGenerator(
536 video, ClipNameToClipPath("foreman_cif"));
537 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200538 },
539 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100540 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100541 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200542 run_params.use_flex_fec = true;
543 run_params.use_ulp_fec = false;
544 fixture->Run(std::move(run_params));
545}
546
Jeremy Leconte4100d552020-09-11 18:02:36 +0200547TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200548 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
549 CreateNetworkEmulationManager();
550 BuiltInNetworkBehaviorConfig config;
551 config.loss_percent = 3;
552 config.link_capacity_kbps = 500;
553 config.queue_delay_ms = 50;
554 auto fixture = CreateTestFixture(
555 "pc_foreman_cif_500kbps_delay_50_0_plr_3_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200556 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200557 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
558 [](PeerConfigurer* alice) {
559 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200560 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000561 auto frame_generator = CreateFromYuvFileFrameGenerator(
562 video, ClipNameToClipPath("foreman_cif"));
563 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200564 },
565 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100566 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100567 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200568 run_params.use_flex_fec = false;
569 run_params.use_ulp_fec = true;
570 fixture->Run(std::move(run_params));
571}
572
573#if defined(WEBRTC_USE_H264)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200574TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200575 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
576 CreateNetworkEmulationManager();
577 auto fixture = CreateTestFixture(
578 "pc_foreman_cif_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200579 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200580 CreateTwoNetworkLinks(network_emulation_manager.get(),
581 BuiltInNetworkBehaviorConfig()),
582 [](PeerConfigurer* alice) {
583 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200584 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000585 auto frame_generator = CreateFromYuvFileFrameGenerator(
586 video, ClipNameToClipPath("foreman_cif"));
587 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200588 },
589 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100590 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100591 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200592 run_params.use_flex_fec = false;
593 run_params.use_ulp_fec = false;
594 fixture->Run(std::move(run_params));
595}
596
Jeremy Leconte4100d552020-09-11 18:02:36 +0200597TEST(PCFullStackTest, Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200598 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
599 CreateNetworkEmulationManager();
600 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200601 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200602 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200603 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200604 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
605 [](PeerConfigurer* alice) {
606 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200607 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000608 auto frame_generator = CreateFromYuvFileFrameGenerator(
609 video, ClipNameToClipPath("foreman_cif"));
610 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200611
Niels Möller29d59a12020-06-22 14:48:10 +0200612 BitrateSettings bitrate_settings;
613 bitrate_settings.min_bitrate_bps = 30000;
614 bitrate_settings.start_bitrate_bps = 30000;
615 bitrate_settings.max_bitrate_bps = 30000;
616 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200617 },
618 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100619 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100620 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200621 run_params.use_flex_fec = false;
622 run_params.use_ulp_fec = false;
623 fixture->Run(std::move(run_params));
624}
625
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200626TEST(PCGenericDescriptorTest,
627 Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200628 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
629 CreateNetworkEmulationManager();
630 BuiltInNetworkBehaviorConfig config;
631 config.loss_percent = 5;
632 config.queue_delay_ms = 50;
633 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200634 "pc_foreman_cif_delay_50_0_plr_5_H264_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200635 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200636 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
637 [](PeerConfigurer* alice) {
638 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200639 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000640 auto frame_generator = CreateFromYuvFileFrameGenerator(
641 video, ClipNameToClipPath("foreman_cif"));
642 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200643 },
644 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100645 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100646 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200647 run_params.use_flex_fec = false;
648 run_params.use_ulp_fec = false;
649 fixture->Run(std::move(run_params));
650}
651
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200652TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Sps_Pps_Idr) {
Artem Titov137f6c82019-05-17 10:51:15 +0200653 test::ScopedFieldTrials override_field_trials(
654 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
655
656 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
657 CreateNetworkEmulationManager();
658 BuiltInNetworkBehaviorConfig config;
659 config.loss_percent = 5;
660 config.queue_delay_ms = 50;
661 auto fixture = CreateTestFixture(
662 "pc_foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr",
Artem Titov1ff3c582020-07-01 15:20:37 +0200663 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200664 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
665 [](PeerConfigurer* alice) {
666 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200667 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000668 auto frame_generator = CreateFromYuvFileFrameGenerator(
669 video, ClipNameToClipPath("foreman_cif"));
670 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200671 },
672 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100673 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100674 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200675 run_params.use_flex_fec = false;
676 run_params.use_ulp_fec = false;
677 fixture->Run(std::move(run_params));
678}
679
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200680TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200681 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
682 CreateNetworkEmulationManager();
683 BuiltInNetworkBehaviorConfig config;
684 config.loss_percent = 5;
685 config.queue_delay_ms = 50;
686 auto fixture = CreateTestFixture(
687 "pc_foreman_cif_delay_50_0_plr_5_H264_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200688 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200689 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
690 [](PeerConfigurer* alice) {
691 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200692 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000693 auto frame_generator = CreateFromYuvFileFrameGenerator(
694 video, ClipNameToClipPath("foreman_cif"));
695 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200696 },
697 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100698 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100699 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200700 run_params.use_flex_fec = true;
701 run_params.use_ulp_fec = false;
702 fixture->Run(std::move(run_params));
703}
704
705// Ulpfec with H264 is an unsupported combination, so this test is only useful
706// for debugging. It is therefore disabled by default.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200707TEST(PCFullStackTest, DISABLED_Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200708 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
709 CreateNetworkEmulationManager();
710 BuiltInNetworkBehaviorConfig config;
711 config.loss_percent = 5;
712 config.queue_delay_ms = 50;
713 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200714 "pc_foreman_cif_delay_50_0_plr_5_H264_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200715 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200716 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
717 [](PeerConfigurer* alice) {
718 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200719 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000720 auto frame_generator = CreateFromYuvFileFrameGenerator(
721 video, ClipNameToClipPath("foreman_cif"));
722 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200723 },
724 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100725 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100726 run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200727 run_params.use_flex_fec = false;
728 run_params.use_ulp_fec = true;
729 fixture->Run(std::move(run_params));
730}
731#endif // defined(WEBRTC_USE_H264)
732
Jeremy Leconte4100d552020-09-11 18:02:36 +0200733TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps) {
Artem Titov137f6c82019-05-17 10:51:15 +0200734 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
735 CreateNetworkEmulationManager();
736 BuiltInNetworkBehaviorConfig config;
737 config.queue_length_packets = 0;
738 config.queue_delay_ms = 0;
739 config.link_capacity_kbps = 500;
740 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200741 "pc_foreman_cif_500kbps", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200742 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
743 [](PeerConfigurer* alice) {
744 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200745 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000746 auto frame_generator = CreateFromYuvFileFrameGenerator(
747 video, ClipNameToClipPath("foreman_cif"));
748 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200749 },
750 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100751 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100752 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200753 run_params.use_flex_fec = false;
754 run_params.use_ulp_fec = false;
755 fixture->Run(std::move(run_params));
756}
757
Jeremy Leconte4100d552020-09-11 18:02:36 +0200758TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200759 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
760 CreateNetworkEmulationManager();
761 BuiltInNetworkBehaviorConfig config;
762 config.queue_length_packets = 32;
763 config.queue_delay_ms = 0;
764 config.link_capacity_kbps = 500;
765 auto fixture = CreateTestFixture(
766 "pc_foreman_cif_500kbps_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200767 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200768 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
769 [](PeerConfigurer* alice) {
770 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200771 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000772 auto frame_generator = CreateFromYuvFileFrameGenerator(
773 video, ClipNameToClipPath("foreman_cif"));
774 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200775 },
776 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100777 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100778 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200779 run_params.use_flex_fec = false;
780 run_params.use_ulp_fec = false;
781 fixture->Run(std::move(run_params));
782}
783
Jeremy Leconte4100d552020-09-11 18:02:36 +0200784TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_100ms) {
Artem Titov137f6c82019-05-17 10:51:15 +0200785 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
786 CreateNetworkEmulationManager();
787 BuiltInNetworkBehaviorConfig config;
788 config.queue_length_packets = 0;
789 config.queue_delay_ms = 100;
790 config.link_capacity_kbps = 500;
791 auto fixture = CreateTestFixture(
792 "pc_foreman_cif_500kbps_100ms",
Artem Titov1ff3c582020-07-01 15:20:37 +0200793 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200794 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
795 [](PeerConfigurer* alice) {
796 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200797 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000798 auto frame_generator = CreateFromYuvFileFrameGenerator(
799 video, ClipNameToClipPath("foreman_cif"));
800 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200801 },
802 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100803 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100804 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200805 run_params.use_flex_fec = false;
806 run_params.use_ulp_fec = false;
807 fixture->Run(std::move(run_params));
808}
809
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200810TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200811 Pc_Foreman_Cif_500kbps_100ms_32pkts_Queue_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200812 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
813 CreateNetworkEmulationManager();
814 BuiltInNetworkBehaviorConfig config;
815 config.queue_length_packets = 32;
816 config.queue_delay_ms = 100;
817 config.link_capacity_kbps = 500;
818 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200819 "pc_foreman_cif_500kbps_100ms_32pkts_queue_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200820 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200821 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
822 [](PeerConfigurer* alice) {
823 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200824 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000825 auto frame_generator = CreateFromYuvFileFrameGenerator(
826 video, ClipNameToClipPath("foreman_cif"));
827 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200828 },
829 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100830 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100831 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200832 run_params.use_flex_fec = false;
833 run_params.use_ulp_fec = false;
834 fixture->Run(std::move(run_params));
835}
836
837/*
838// TODO(bugs.webrtc.org/10639) we need to disable send side bwe, but it isn't
Artem Titov39483c62019-07-19 17:03:52 +0200839// supported in PC level framework.
Artem Titov137f6c82019-05-17 10:51:15 +0200840TEST(PCFullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
841 auto fixture = CreateVideoQualityTestFixture();
842 ParamsWithLogging foreman_cif;
843 foreman_cif.call.send_side_bwe = false;
844 foreman_cif.video[0] = {
845 true, 352, 288, 30,
846 30000, 500000, 2000000, false,
847 "VP8", 1, 0, 0,
848 false, false, true, ClipNameToClipPath("foreman_cif")};
849 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
850 0.0, 0.0, kTestDurationSec};
851 foreman_cif.config->queue_length_packets = 32;
852 foreman_cif.config->queue_delay_ms = 100;
853 foreman_cif.config->link_capacity_kbps = 500;
854 fixture->RunWithAnalyzer(foreman_cif);
855}
856*/
857
Jeremy Leconte4100d552020-09-11 18:02:36 +0200858TEST(PCFullStackTest, Pc_Foreman_Cif_1000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200859 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
860 CreateNetworkEmulationManager();
861 BuiltInNetworkBehaviorConfig config;
862 config.queue_length_packets = 32;
863 config.queue_delay_ms = 100;
864 config.link_capacity_kbps = 1000;
865 auto fixture = CreateTestFixture(
866 "pc_foreman_cif_1000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200867 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200868 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
869 [](PeerConfigurer* alice) {
870 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200871 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000872 auto frame_generator = CreateFromYuvFileFrameGenerator(
873 video, ClipNameToClipPath("foreman_cif"));
874 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200875 },
876 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100877 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100878 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200879 run_params.use_flex_fec = false;
880 run_params.use_ulp_fec = false;
881 fixture->Run(std::move(run_params));
882}
883
884// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Jeremy Leconte4100d552020-09-11 18:02:36 +0200885TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200886 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
887 CreateNetworkEmulationManager();
888 BuiltInNetworkBehaviorConfig config;
889 config.queue_length_packets = 32;
890 config.queue_delay_ms = 100;
891 config.link_capacity_kbps = 2000;
892 auto fixture = CreateTestFixture(
893 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200894 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200895 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
896 [](PeerConfigurer* alice) {
897 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200898 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000899 auto frame_generator = CreateFromYuvFileFrameGenerator(
900 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
901 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200902 },
903 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100904 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +0100905 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov137f6c82019-05-17 10:51:15 +0200906 run_params.use_flex_fec = false;
907 run_params.use_ulp_fec = false;
908 fixture->Run(std::move(run_params));
909}
910
Artem Titov137f6c82019-05-17 10:51:15 +0200911/*
912// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Danil Chapovalov636865e2020-06-03 14:11:26 +0200913TEST(PCGenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Artem Titov137f6c82019-05-17 10:51:15 +0200914 auto fixture = CreateVideoQualityTestFixture();
915 ParamsWithLogging conf_motion_hd;
916 conf_motion_hd.call.send_side_bwe = true;
917 conf_motion_hd.video[0] = {
918 true, 1280,
919 720, 50,
920 30000, 3000000,
921 3000000, false,
922 "VP8", 2,
923 -1, 0,
924 false, false,
925 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
926 conf_motion_hd.analyzer = {
Danil Chapovalov636865e2020-06-03 14:11:26 +0200927 "conference_motion_hd_2tl_moderate_limits_generic_descriptor", 0.0, 0.0,
Artem Titov137f6c82019-05-17 10:51:15 +0200928 kTestDurationSec};
929 conf_motion_hd.config->queue_length_packets = 50;
930 conf_motion_hd.config->loss_percent = 3;
931 conf_motion_hd.config->queue_delay_ms = 100;
932 conf_motion_hd.config->link_capacity_kbps = 2000;
933 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
934 fixture->RunWithAnalyzer(conf_motion_hd);
935}
936
937// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
938TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimits) {
939 auto fixture = CreateVideoQualityTestFixture();
940 ParamsWithLogging conf_motion_hd;
941 conf_motion_hd.call.send_side_bwe = true;
942 conf_motion_hd.video[0] = {
943 true, 1280,
944 720, 50,
945 30000, 3000000,
946 3000000, false,
947 "VP8", 3,
948 -1, 0,
949 false, false,
950 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
951 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
952 0.0, kTestDurationSec};
953 conf_motion_hd.config->queue_length_packets = 50;
954 conf_motion_hd.config->loss_percent = 3;
955 conf_motion_hd.config->queue_delay_ms = 100;
956 conf_motion_hd.config->link_capacity_kbps = 2000;
957 fixture->RunWithAnalyzer(conf_motion_hd);
958}
959
960// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
961TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
962 auto fixture = CreateVideoQualityTestFixture();
963 ParamsWithLogging conf_motion_hd;
964 conf_motion_hd.call.send_side_bwe = true;
965 conf_motion_hd.video[0] = {
966 true, 1280,
967 720, 50,
968 30000, 3000000,
969 3000000, false,
970 "VP8", 4,
971 -1, 0,
972 false, false,
973 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
974 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
975 0.0, kTestDurationSec};
976 conf_motion_hd.config->queue_length_packets = 50;
977 conf_motion_hd.config->loss_percent = 3;
978 conf_motion_hd.config->queue_delay_ms = 100;
979 conf_motion_hd.config->link_capacity_kbps = 2000;
980 fixture->RunWithAnalyzer(conf_motion_hd);
981}
982
983// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
984TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
985 test::ScopedFieldTrials field_trial(
986 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
987 auto fixture = CreateVideoQualityTestFixture();
988 ParamsWithLogging conf_motion_hd;
989 conf_motion_hd.call.send_side_bwe = true;
990 conf_motion_hd.video[0] = {
991 true, 1280,
992 720, 50,
993 30000, 3000000,
994 3000000, false,
995 "VP8", 3,
996 -1, 0,
997 false, false,
998 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
999 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
1000 0.0, 0.0, kTestDurationSec};
1001 conf_motion_hd.config->queue_length_packets = 50;
1002 conf_motion_hd.config->loss_percent = 3;
1003 conf_motion_hd.config->queue_delay_ms = 100;
1004 conf_motion_hd.config->link_capacity_kbps = 2000;
1005 fixture->RunWithAnalyzer(conf_motion_hd);
1006}
1007
1008// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1009TEST(PCFullStackTest,
1010 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
1011 auto fixture = CreateVideoQualityTestFixture();
1012 test::ScopedFieldTrials field_trial(
1013 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
1014 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
1015 ParamsWithLogging conf_motion_hd;
1016 conf_motion_hd.call.send_side_bwe = true;
1017 conf_motion_hd.video[0] = {
1018 true, 1280,
1019 720, 50,
1020 30000, 3000000,
1021 3000000, false,
1022 "VP8", 3,
1023 -1, 0,
1024 false, false,
1025 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1026 conf_motion_hd.analyzer = {
1027 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
1028 kTestDurationSec};
1029 conf_motion_hd.config->queue_length_packets = 50;
1030 conf_motion_hd.config->loss_percent = 3;
1031 conf_motion_hd.config->queue_delay_ms = 100;
1032 conf_motion_hd.config->link_capacity_kbps = 2000;
1033 fixture->RunWithAnalyzer(conf_motion_hd);
1034}
1035*/
1036
1037#if defined(RTC_ENABLE_VP9)
Jeremy Leconte4100d552020-09-11 18:02:36 +02001038TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) {
Artem Titov137f6c82019-05-17 10:51:15 +02001039 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1040 CreateNetworkEmulationManager();
1041 BuiltInNetworkBehaviorConfig config;
1042 config.queue_length_packets = 32;
1043 config.queue_delay_ms = 100;
1044 config.link_capacity_kbps = 2000;
1045 auto fixture = CreateTestFixture(
1046 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9",
Artem Titov1ff3c582020-07-01 15:20:37 +02001047 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +02001048 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1049 [](PeerConfigurer* alice) {
1050 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +02001051 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001052 auto frame_generator = CreateFromYuvFileFrameGenerator(
1053 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1054 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +02001055 },
1056 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001057 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001058 run_params.video_codecs = {VideoCodecConfig(
1059 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1060 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov137f6c82019-05-17 10:51:15 +02001061 run_params.use_flex_fec = false;
1062 run_params.use_ulp_fec = false;
1063 fixture->Run(std::move(run_params));
1064}
1065#endif
1066
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001067TEST(PCFullStackTest, Pc_Screenshare_Slides_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001068 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1069 CreateNetworkEmulationManager();
1070 auto fixture = CreateTestFixture(
1071 "pc_screenshare_slides_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001072 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001073 CreateTwoNetworkLinks(network_emulation_manager.get(),
1074 BuiltInNetworkBehaviorConfig()),
1075 [](PeerConfigurer* alice) {
1076 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001077 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001078 video.content_hint = VideoTrackInterface::ContentHint::kText;
1079 auto frame_generator = CreateScreenShareFrameGenerator(
1080 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001081 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001082 },
1083 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001084 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001085 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001086 run_params.use_flex_fec = false;
1087 run_params.use_ulp_fec = false;
1088 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001089}
1090
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001091TEST(PCFullStackTest, Pc_Screenshare_Slides) {
Artem Titov39483c62019-07-19 17:03:52 +02001092 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1093 CreateNetworkEmulationManager();
1094 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001095 "pc_screenshare_slides", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001096 CreateTwoNetworkLinks(network_emulation_manager.get(),
1097 BuiltInNetworkBehaviorConfig()),
1098 [](PeerConfigurer* alice) {
1099 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001100 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001101 video.content_hint = VideoTrackInterface::ContentHint::kText;
1102 auto frame_generator = CreateScreenShareFrameGenerator(
1103 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001104 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001105 },
1106 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001107 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001108 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001109 run_params.use_flex_fec = false;
1110 run_params.use_ulp_fec = false;
1111 run_params.use_conference_mode = true;
1112 fixture->Run(std::move(run_params));
1113}
1114
1115// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1116#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001117TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001118 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1119 CreateNetworkEmulationManager();
1120 auto fixture = CreateTestFixture(
1121 "pc_screenshare_slides_simulcast_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001122 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001123 CreateTwoNetworkLinks(network_emulation_manager.get(),
1124 BuiltInNetworkBehaviorConfig()),
1125 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001126 VideoConfig video(1850, 1110, 30);
Artem Titov4b9701e2019-08-28 13:48:02 +02001127 video.simulcast_config = VideoSimulcastConfig(2, 1);
1128 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001129 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001130 video.content_hint = VideoTrackInterface::ContentHint::kText;
1131 auto frame_generator = CreateScreenShareFrameGenerator(
1132 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001133 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001134 },
1135 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001136 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001137 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001138 run_params.use_flex_fec = false;
1139 run_params.use_ulp_fec = false;
1140 fixture->Run(std::move(run_params));
1141}
1142
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001143TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast) {
Artem Titov39483c62019-07-19 17:03:52 +02001144 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1145 CreateNetworkEmulationManager();
1146 auto fixture = CreateTestFixture(
1147 "pc_screenshare_slides_simulcast",
Artem Titov1ff3c582020-07-01 15:20:37 +02001148 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001149 CreateTwoNetworkLinks(network_emulation_manager.get(),
1150 BuiltInNetworkBehaviorConfig()),
1151 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001152 VideoConfig video(1850, 1110, 30);
Artem Titov4b9701e2019-08-28 13:48:02 +02001153 video.simulcast_config = VideoSimulcastConfig(2, 1);
1154 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001155 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001156 video.content_hint = VideoTrackInterface::ContentHint::kText;
1157 auto frame_generator = CreateScreenShareFrameGenerator(
1158 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001159 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001160 },
1161 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001162 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001163 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001164 run_params.use_flex_fec = false;
1165 run_params.use_ulp_fec = false;
1166 run_params.use_conference_mode = true;
1167 fixture->Run(std::move(run_params));
1168}
1169#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1170
1171/*
Artem Titov137f6c82019-05-17 10:51:15 +02001172#if !defined(WEBRTC_MAC)
Artem Titov137f6c82019-05-17 10:51:15 +02001173// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1174#if !defined(WEBRTC_WIN)
Artem Titov137f6c82019-05-17 10:51:15 +02001175// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1176TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Artem Titov137f6c82019-05-17 10:51:15 +02001177 auto fixture = CreateVideoQualityTestFixture();
1178 ParamsWithLogging screenshare;
1179 screenshare.call.send_side_bwe = true;
1180 screenshare.screenshare[0] = {true, false, 10};
1181 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1182 2500000, false, "VP8", 2, 1, 400000,
1183 false, false, false, ""};
1184 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
1185 kTestDurationSec};
1186 VideoQualityTest::Params screenshare_params_high;
1187 screenshare_params_high.video[0] = {
1188 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1189 "VP8", 2, 0, 400000, false, false, false, ""};
1190 VideoQualityTest::Params screenshare_params_low;
1191 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1192 1000000, false, "VP8", 2, 0, 400000,
1193 false, false, false, ""};
1194
1195 std::vector<VideoStream> streams = {
1196 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1197 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1198 screenshare.ss[0] = {
1199 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1200 false};
1201 fixture->RunWithAnalyzer(screenshare);
1202}
1203
1204#endif // !defined(WEBRTC_WIN)
1205#endif // !defined(WEBRTC_MAC)
1206
1207// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1208TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
1209 auto fixture = CreateVideoQualityTestFixture();
1210 ParamsWithLogging config;
1211 config.call.send_side_bwe = true;
1212 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
1213 1000000, false, "VP8", 2, 1, 400000,
1214 false, false, false, ""};
1215 config.screenshare[0] = {true, false, 10, 2};
1216 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
1217 kTestDurationSec};
1218 fixture->RunWithAnalyzer(config);
1219}
1220
1221// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001222TEST(PCGenericDescriptorTest, Screenshare_Slides_Lossy_Net_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +02001223 auto fixture = CreateVideoQualityTestFixture();
1224 ParamsWithLogging screenshare;
1225 screenshare.call.send_side_bwe = true;
1226 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1227 1000000, false, "VP8", 2, 1, 400000,
1228 false, false, false, ""};
1229 screenshare.screenshare[0] = {true, false, 10};
Danil Chapovalov636865e2020-06-03 14:11:26 +02001230 screenshare.analyzer = {"screenshare_slides_lossy_net_generic_descriptor",
1231 0.0, 0.0, kTestDurationSec};
Artem Titov137f6c82019-05-17 10:51:15 +02001232 screenshare.config->loss_percent = 5;
1233 screenshare.config->queue_delay_ms = 200;
1234 screenshare.config->link_capacity_kbps = 500;
Danil Chapovalov636865e2020-06-03 14:11:26 +02001235 screenshare.call.generic_descriptor = true;
Artem Titov137f6c82019-05-17 10:51:15 +02001236 fixture->RunWithAnalyzer(screenshare);
1237}
1238
1239// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1240TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
1241 auto fixture = CreateVideoQualityTestFixture();
1242 ParamsWithLogging screenshare;
1243 screenshare.call.send_side_bwe = true;
1244 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1245 1000000, false, "VP8", 2, 1, 400000,
1246 false, false, false, ""};
1247 screenshare.screenshare[0] = {true, false, 10};
1248 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
1249 kTestDurationSec};
1250 screenshare.config->loss_percent = 10;
1251 screenshare.config->queue_delay_ms = 200;
1252 screenshare.config->link_capacity_kbps = 500;
1253 fixture->RunWithAnalyzer(screenshare);
1254}
1255
1256// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1257TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
1258 auto fixture = CreateVideoQualityTestFixture();
1259 ParamsWithLogging screenshare;
1260 screenshare.call.send_side_bwe = true;
1261 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1262 1000000, false, "VP8", 2, 1, 400000,
1263 false, false, false, ""};
1264 screenshare.screenshare[0] = {true, false, 10};
1265 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
1266 kTestDurationSec};
1267 screenshare.config->loss_percent = 5;
1268 screenshare.config->link_capacity_kbps = 200;
1269 screenshare.config->queue_length_packets = 30;
1270
1271 fixture->RunWithAnalyzer(screenshare);
1272}
1273
1274// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1275TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
1276 auto fixture = CreateVideoQualityTestFixture();
1277 ParamsWithLogging screenshare;
1278 screenshare.call.send_side_bwe = true;
1279 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1280 1000000, false, "VP8", 2, 1, 400000,
1281 false, false, false, ""};
1282 screenshare.screenshare[0] = {true, false, 10};
1283 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1284 kTestDurationSec};
1285 screenshare.config->loss_percent = 1;
1286 screenshare.config->link_capacity_kbps = 1200;
1287 screenshare.config->queue_length_packets = 30;
1288
1289 fixture->RunWithAnalyzer(screenshare);
1290}
1291
1292namespace {
1293// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1294// Since ParamsWithLogging::Video is not trivially destructible, we can't
1295// store these structs as const globals.
1296ParamsWithLogging::Video SvcVp9Video() {
1297 return ParamsWithLogging::Video{
1298 true, 1280,
1299 720, 30,
1300 800000, 2500000,
1301 2500000, false,
1302 "VP9", 3,
1303 2, 400000,
1304 false, false,
1305 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1306}
1307
1308ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1309 return ParamsWithLogging::Video{
1310 true, 1280,
1311 720, 30,
1312 800000, 2500000,
1313 2500000, false,
1314 "VP8", 3,
1315 2, 400000,
1316 false, false,
1317 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1318}
1319
1320ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1321 return ParamsWithLogging::Video{
1322 true, 640,
1323 360, 30,
1324 150000, 500000,
1325 700000, false,
1326 "VP8", 3,
1327 2, 400000,
1328 false, false,
1329 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1330}
1331
1332ParamsWithLogging::Video SimulcastVp8VideoLow() {
1333 return ParamsWithLogging::Video{
1334 true, 320,
1335 180, 30,
1336 30000, 150000,
1337 200000, false,
1338 "VP8", 3,
1339 2, 400000,
1340 false, false,
1341 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1342}
1343} // namespace
Artem Titov733a7812019-07-24 14:53:15 +02001344*/
Artem Titov137f6c82019-05-17 10:51:15 +02001345
1346#if defined(RTC_ENABLE_VP9)
1347
Jeremy Leconte4100d552020-09-11 18:02:36 +02001348TEST(PCFullStackTest, Pc_Screenshare_Slides_Vp9_3sl_High_Fps) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001349 webrtc::test::ScopedFieldTrials override_trials(
1350 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1351 "Enabled,inter_layer_pred_mode:on/"));
Artem Titov733a7812019-07-24 14:53:15 +02001352 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1353 CreateNetworkEmulationManager();
1354 auto fixture = CreateTestFixture(
1355 "pc_screenshare_slides_vp9_3sl_high_fps",
Artem Titov1ff3c582020-07-01 15:20:37 +02001356 *network_emulation_manager->time_controller(),
Artem Titov733a7812019-07-24 14:53:15 +02001357 CreateTwoNetworkLinks(network_emulation_manager.get(),
1358 BuiltInNetworkBehaviorConfig()),
1359 [](PeerConfigurer* alice) {
1360 VideoConfig video(1850, 1110, 30);
1361 video.stream_label = "alice-video";
Artem Titov733a7812019-07-24 14:53:15 +02001362 video.simulcast_config = VideoSimulcastConfig(3, 2);
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001363 video.content_hint = VideoTrackInterface::ContentHint::kText;
1364 auto frame_generator = CreateScreenShareFrameGenerator(
1365 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001366 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov733a7812019-07-24 14:53:15 +02001367 },
1368 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001369 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001370 run_params.video_codecs = {VideoCodecConfig(
1371 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1372 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov733a7812019-07-24 14:53:15 +02001373 run_params.use_flex_fec = false;
1374 run_params.use_ulp_fec = false;
1375 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001376}
1377
Jeremy Leconte4100d552020-09-11 18:02:36 +02001378TEST(PCFullStackTest, Pc_Vp9svc_3sl_High) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001379 webrtc::test::ScopedFieldTrials override_trials(
1380 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1381 "Enabled,inter_layer_pred_mode:on/"));
1382 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1383 CreateNetworkEmulationManager();
1384 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001385 "pc_vp9svc_3sl_high", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001386 CreateTwoNetworkLinks(network_emulation_manager.get(),
1387 BuiltInNetworkBehaviorConfig()),
1388 [](PeerConfigurer* alice) {
1389 VideoConfig video(1280, 720, 30);
1390 video.stream_label = "alice-video";
Artem Titov1e49ab22019-07-30 13:17:25 +02001391 video.simulcast_config = VideoSimulcastConfig(3, 2);
1392 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001393 auto frame_generator = CreateFromYuvFileFrameGenerator(
1394 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1395 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov1e49ab22019-07-30 13:17:25 +02001396 },
1397 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001398 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001399 run_params.video_codecs = {VideoCodecConfig(
1400 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1401 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov1e49ab22019-07-30 13:17:25 +02001402 run_params.use_flex_fec = false;
1403 run_params.use_ulp_fec = false;
1404 fixture->Run(std::move(run_params));
1405}
1406
Jeremy Leconte4100d552020-09-11 18:02:36 +02001407TEST(PCFullStackTest, Pc_Vp9svc_3sl_Low) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001408 webrtc::test::ScopedFieldTrials override_trials(
1409 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1410 "Enabled,inter_layer_pred_mode:on/"));
1411 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1412 CreateNetworkEmulationManager();
1413 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001414 "pc_vp9svc_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001415 CreateTwoNetworkLinks(network_emulation_manager.get(),
1416 BuiltInNetworkBehaviorConfig()),
1417 [](PeerConfigurer* alice) {
1418 VideoConfig video(1280, 720, 30);
1419 video.stream_label = "alice-video";
Artem Titov1e49ab22019-07-30 13:17:25 +02001420 video.simulcast_config = VideoSimulcastConfig(3, 0);
1421 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001422 auto frame_generator = CreateFromYuvFileFrameGenerator(
1423 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1424 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov1e49ab22019-07-30 13:17:25 +02001425 },
1426 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001427 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001428 run_params.video_codecs = {VideoCodecConfig(
1429 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1430 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
Artem Titov1e49ab22019-07-30 13:17:25 +02001431 run_params.use_flex_fec = false;
1432 run_params.use_ulp_fec = false;
1433 fixture->Run(std::move(run_params));
1434}
1435
Artem Titov733a7812019-07-24 14:53:15 +02001436#endif // defined(RTC_ENABLE_VP9)
1437
1438/*
Artem Titov137f6c82019-05-17 10:51:15 +02001439// bugs.webrtc.org/9506
1440#if !defined(WEBRTC_MAC)
1441
1442// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1443TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1444 webrtc::test::ScopedFieldTrials override_trials(
1445 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1446 auto fixture = CreateVideoQualityTestFixture();
1447 ParamsWithLogging simulcast;
1448 simulcast.call.send_side_bwe = true;
1449 simulcast.video[0] = SvcVp9Video();
1450 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1451 simulcast.ss[0] = {
1452 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1453 std::vector<SpatialLayer>(), false};
1454 fixture->RunWithAnalyzer(simulcast);
1455}
1456
1457// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1458TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1459 webrtc::test::ScopedFieldTrials override_trials(
1460 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1461 auto fixture = CreateVideoQualityTestFixture();
1462 ParamsWithLogging simulcast;
1463 simulcast.call.send_side_bwe = true;
1464 simulcast.video[0] = SvcVp9Video();
1465 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1466 simulcast.ss[0] = {
1467 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1468 std::vector<SpatialLayer>(), false};
1469 fixture->RunWithAnalyzer(simulcast);
1470}
1471
1472// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1473TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1474 webrtc::test::ScopedFieldTrials override_trials(
1475 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1476 auto fixture = CreateVideoQualityTestFixture();
1477 ParamsWithLogging simulcast;
1478 simulcast.call.send_side_bwe = true;
1479 simulcast.video[0] = SvcVp9Video();
1480 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1481 simulcast.ss[0] = {
1482 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1483 std::vector<SpatialLayer>(), false};
1484 fixture->RunWithAnalyzer(simulcast);
1485}
1486
1487// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1488TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1489 webrtc::test::ScopedFieldTrials override_trials(
1490 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1491 auto fixture = CreateVideoQualityTestFixture();
1492 ParamsWithLogging simulcast;
1493 simulcast.call.send_side_bwe = true;
1494 simulcast.video[0] = SvcVp9Video();
1495 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1496 kTestDurationSec};
1497 simulcast.ss[0] = {
1498 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1499 std::vector<SpatialLayer>(), false};
1500 simulcast.config->link_capacity_kbps = 1000;
1501 simulcast.config->queue_delay_ms = 100;
1502 fixture->RunWithAnalyzer(simulcast);
1503}
1504
1505// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1506// TODO(webrtc:9722): Remove when experiment is cleaned up.
1507TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1508 webrtc::test::ScopedFieldTrials override_trials(
Mirko Bonadeie39b3782020-09-24 14:02:39 +02001509 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Artem Titov137f6c82019-05-17 10:51:15 +02001510 auto fixture = CreateVideoQualityTestFixture();
1511 ParamsWithLogging simulcast;
1512 simulcast.call.send_side_bwe = true;
1513 simulcast.video[0] = SvcVp9Video();
1514 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1515 0.0, 0.0, kTestDurationSec};
1516 simulcast.ss[0] = {
1517 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1518 std::vector<SpatialLayer>(), false};
1519 simulcast.config->link_capacity_kbps = 1000;
1520 simulcast.config->queue_delay_ms = 100;
1521 fixture->RunWithAnalyzer(simulcast);
1522}
1523#endif // !defined(WEBRTC_MAC)
1524
1525#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001526*/
Artem Titov137f6c82019-05-17 10:51:15 +02001527
1528// Android bots can't handle FullHD, so disable the test.
1529// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1530#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001531#define MAYBE_Pc_Simulcast_HD_High DISABLED_Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001532#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001533#define MAYBE_Pc_Simulcast_HD_High Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001534#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001535TEST(PCFullStackTest, MAYBE_Pc_Simulcast_HD_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001536 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1537 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001538 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1539 CreateNetworkEmulationManager();
1540 BuiltInNetworkBehaviorConfig config;
1541 config.loss_percent = 0;
1542 config.queue_delay_ms = 100;
1543 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001544 "pc_simulcast_HD_high", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001545 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1546 [](PeerConfigurer* alice) {
1547 VideoConfig video(1920, 1080, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001548 video.simulcast_config = VideoSimulcastConfig(3, 2);
Artem Titov4b9701e2019-08-28 13:48:02 +02001549 video.temporal_layers_count = 3;
Artem Titov39483c62019-07-19 17:03:52 +02001550 video.stream_label = "alice-video";
Andrey Logvin42c59522020-05-06 12:18:26 +00001551 alice->AddVideoConfig(std::move(video));
Artem Titov39483c62019-07-19 17:03:52 +02001552 },
1553 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001554 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001555 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001556 run_params.use_flex_fec = false;
1557 run_params.use_ulp_fec = false;
1558 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001559}
1560
Jeremy Leconte4100d552020-09-11 18:02:36 +02001561TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001562 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1563 CreateNetworkEmulationManager();
1564 BuiltInNetworkBehaviorConfig config;
1565 config.loss_percent = 0;
1566 config.queue_delay_ms = 100;
1567 auto fixture = CreateTestFixture(
1568 "pc_simulcast_vp8_3sl_high",
Artem Titov1ff3c582020-07-01 15:20:37 +02001569 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001570 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1571 [](PeerConfigurer* alice) {
1572 VideoConfig video(1280, 720, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001573 video.simulcast_config = VideoSimulcastConfig(3, 2);
1574 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001575 auto frame_generator = CreateFromYuvFileFrameGenerator(
1576 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1577 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001578 },
1579 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001580 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001581 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001582 run_params.use_flex_fec = false;
1583 run_params.use_ulp_fec = false;
1584 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001585}
1586
Jeremy Leconte4100d552020-09-11 18:02:36 +02001587TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001588 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1589 CreateNetworkEmulationManager();
1590 BuiltInNetworkBehaviorConfig config;
1591 config.loss_percent = 0;
1592 config.queue_delay_ms = 100;
1593 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001594 "pc_simulcast_vp8_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001595 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1596 [](PeerConfigurer* alice) {
1597 VideoConfig video(1280, 720, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001598 video.simulcast_config = VideoSimulcastConfig(3, 0);
1599 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001600 auto frame_generator = CreateFromYuvFileFrameGenerator(
1601 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1602 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001603 },
1604 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001605 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovcdd73e02020-01-23 14:09:09 +01001606 run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
Artem Titov39483c62019-07-19 17:03:52 +02001607 run_params.use_flex_fec = false;
1608 run_params.use_ulp_fec = false;
1609 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001610}
1611
Artem Titov39483c62019-07-19 17:03:52 +02001612/*
Artem Titov137f6c82019-05-17 10:51:15 +02001613// This test assumes ideal network conditions with target bandwidth being
1614// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1615// Android32 bots can't handle this high bitrate, so disable test for those.
1616#if defined(WEBRTC_ANDROID)
1617#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1618#else
1619#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1620#endif // defined(WEBRTC_ANDROID)
1621// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1622configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1623fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1624 ParamsWithLogging generator;
1625 generator.call.send_side_bwe = true;
1626 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1627 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1628 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1629 generator.video[0] = {true,
1630 360,
1631 240,
1632 30,
1633 target_bitrate / 2,
1634 target_bitrate,
1635 target_bitrate * 2,
1636 false,
1637 "FakeCodec",
1638 1,
1639 0,
1640 0,
1641 false,
1642 false,
1643 false,
1644 "Generator"};
1645 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1646 kTestDurationSec};
1647 fixture->RunWithAnalyzer(generator);
1648}
1649
1650// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1651TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1652 auto fixture = CreateVideoQualityTestFixture();
1653 ParamsWithLogging large_room;
1654 large_room.call.send_side_bwe = true;
1655 large_room.video[0] = SimulcastVp8VideoHigh();
1656 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1657 large_room.config->loss_percent = 0;
1658 large_room.config->queue_delay_ms = 100;
1659 ParamsWithLogging video_params_high;
1660 video_params_high.video[0] = SimulcastVp8VideoHigh();
1661 ParamsWithLogging video_params_medium;
1662 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1663 ParamsWithLogging video_params_low;
1664 video_params_low.video[0] = SimulcastVp8VideoLow();
1665
1666 std::vector<VideoStream> streams = {
1667 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1668 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1669 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1670 large_room.call.num_thumbnails = 5;
1671 large_room.ss[0] = {
1672 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1673 false};
1674 fixture->RunWithAnalyzer(large_room);
1675}
1676
1677#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1678// Fails on mobile devices:
1679// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1680#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1681#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1682#else
1683#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1684#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1685#endif
1686// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1687TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1688 auto fixture = CreateVideoQualityTestFixture();
1689 ParamsWithLogging large_room;
1690 large_room.call.send_side_bwe = true;
1691 large_room.video[0] = SimulcastVp8VideoHigh();
1692 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1693 large_room.config->loss_percent = 0;
1694 large_room.config->queue_delay_ms = 100;
1695 ParamsWithLogging video_params_high;
1696 video_params_high.video[0] = SimulcastVp8VideoHigh();
1697 ParamsWithLogging video_params_medium;
1698 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1699 ParamsWithLogging video_params_low;
1700 video_params_low.video[0] = SimulcastVp8VideoLow();
1701
1702 std::vector<VideoStream> streams = {
1703 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1704 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1705 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1706 large_room.call.num_thumbnails = 15;
1707 large_room.ss[0] = {
1708 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1709 false};
1710 fixture->RunWithAnalyzer(large_room);
1711}
1712
1713// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1714TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1715 auto fixture = CreateVideoQualityTestFixture();
1716 ParamsWithLogging large_room;
1717 large_room.call.send_side_bwe = true;
1718 large_room.video[0] = SimulcastVp8VideoHigh();
1719 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1720 large_room.config->loss_percent = 0;
1721 large_room.config->queue_delay_ms = 100;
1722 ParamsWithLogging video_params_high;
1723 video_params_high.video[0] = SimulcastVp8VideoHigh();
1724 ParamsWithLogging video_params_medium;
1725 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1726 ParamsWithLogging video_params_low;
1727 video_params_low.video[0] = SimulcastVp8VideoLow();
1728
1729 std::vector<VideoStream> streams = {
1730 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1731 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1732 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1733 large_room.call.num_thumbnails = 50;
1734 large_room.ss[0] = {
1735 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1736 false};
1737 fixture->RunWithAnalyzer(large_room);
1738}
1739*/
1740
Artem Titov137f6c82019-05-17 10:51:15 +02001741class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1742
1743/*
1744// Disable dual video test on mobile device becuase it's too heavy.
1745// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1746#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1747// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1748TEST_P(PCDualStreamsTest,
1749 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001750 const int first_stream = GetParam();
1751 ParamsWithLogging dual_streams;
1752
1753 // Screenshare Settings.
1754 dual_streams.screenshare[first_stream] = {true, false, 10};
1755 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1756 2500000, false, "VP8", 2, 1, 400000,
1757 false, false, false, ""};
1758
1759 ParamsWithLogging screenshare_params_high;
1760 screenshare_params_high.video[0] = {
1761 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1762 "VP8", 2, 0, 400000, false, false, false, ""};
1763 VideoQualityTest::Params screenshare_params_low;
1764 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1765 1000000, false, "VP8", 2, 0, 400000,
1766 false, false, false, ""};
1767 std::vector<VideoStream> screenhsare_streams = {
1768 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1769 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1770
1771 dual_streams.ss[first_stream] = {
1772 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1773 std::vector<SpatialLayer>(), false};
1774
1775 // Video settings.
1776 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1777
1778 ParamsWithLogging video_params_high;
1779 video_params_high.video[0] = SimulcastVp8VideoHigh();
1780 ParamsWithLogging video_params_medium;
1781 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1782 ParamsWithLogging video_params_low;
1783 video_params_low.video[0] = SimulcastVp8VideoLow();
1784 std::vector<VideoStream> streams = {
1785 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1786 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1787 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1788
1789 dual_streams.ss[1 - first_stream] = {
1790 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1791 false};
1792
1793 // Call settings.
1794 dual_streams.call.send_side_bwe = true;
1795 dual_streams.call.dual_video = true;
1796 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1797 std::to_string(first_stream);
1798 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1799 dual_streams.config->loss_percent = 1;
1800 dual_streams.config->link_capacity_kbps = 7500;
1801 dual_streams.config->queue_length_packets = 30;
1802 dual_streams.config->queue_delay_ms = 100;
1803
1804 auto fixture = CreateVideoQualityTestFixture();
1805 fixture->RunWithAnalyzer(dual_streams);
1806}
1807#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1808 // !defined(WEBRTC_MAC)
1809
1810// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1811TEST_P(PCDualStreamsTest, Conference_Restricted) {
1812 const int first_stream = GetParam();
1813 ParamsWithLogging dual_streams;
1814
1815 // Screenshare Settings.
1816 dual_streams.screenshare[first_stream] = {true, false, 10};
1817 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1818 2500000, false, "VP8", 3, 2, 400000,
1819 false, false, false, ""};
1820 // Video settings.
1821 dual_streams.video[1 - first_stream] = {
1822 true, 1280,
1823 720, 30,
1824 150000, 500000,
1825 700000, false,
1826 "VP8", 3,
1827 2, 400000,
1828 false, false,
1829 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1830
1831 // Call settings.
1832 dual_streams.call.send_side_bwe = true;
1833 dual_streams.call.dual_video = true;
1834 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1835 std::to_string(first_stream);
1836 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1837 dual_streams.config->loss_percent = 1;
1838 dual_streams.config->link_capacity_kbps = 5000;
1839 dual_streams.config->queue_length_packets = 30;
1840 dual_streams.config->queue_delay_ms = 100;
1841
1842 auto fixture = CreateVideoQualityTestFixture();
1843 fixture->RunWithAnalyzer(dual_streams);
1844}
1845*/
1846
1847INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1848 PCDualStreamsTest,
1849 ::testing::Values(0, 1));
1850
1851} // namespace webrtc