From f363d0d4d3ad3d353bac8965a8817012fc415ef8 Mon Sep 17 00:00:00 2001 From: Per Kjellander Date: Thu, 13 Oct 2022 10:21:05 +0200 Subject: [PATCH] Parameterize some PCFullStackTest and run with reduced number of threads. The parameterized tests run in two versions. 1. Default with separate network and worker thread 2. The network thread is used as a worker thread. All packet sending and receiving is done on that thread. Bug: webrtc:14502 Change-Id: Iba09295f6c1d7030d726f387f9cab8c2bf7c03d7 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/278980 Reviewed-by: Evan Shrubsole Reviewed-by: Artem Titov Commit-Queue: Per Kjellander Reviewed-by: Ilya Nikolaevskiy Cr-Commit-Position: refs/heads/main@{#38379} --- video/pc_full_stack_tests.cc | 89 +++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/video/pc_full_stack_tests.cc b/video/pc_full_stack_tests.cc index 90617c8f75..715f3993ba 100644 --- a/video/pc_full_stack_tests.cc +++ b/video/pc_full_stack_tests.cc @@ -85,6 +85,44 @@ std::string ClipNameToClipPath(const char* clip_name) { } // namespace +struct PCFullStackTestParams { + bool use_network_thread_as_worker_thread = false; + std::string field_trials; + std::string test_case_name_postfix; +}; + +std::vector ParameterizedTestParams() { + return {// Run with default parameters and field trials. + {}, + // Use the network thread as worker thread. + // Use the worker thread for sending packets. + // https://bugs.chromium.org/p/webrtc/issues/detail?id=14502 + {// TODO(webrtc:14502): Enable field trial soon but let it first run a + // couple of times to get a baseline.. + // .use_network_thread_as_worker_thread = true, + // .field_trials = "WebRTC-SendPacketsOnWorkerThread/Enabled/", + .test_case_name_postfix = "_ReducedThreads"}}; +} + +class ParameterizedPCFullStackTest + : public ::testing::TestWithParam { + public: + ParameterizedPCFullStackTest() : field_trials_(GetParam().field_trials) {} + + private: + test::ScopedFieldTrials field_trials_; +}; + +INSTANTIATE_TEST_SUITE_P( + ParameterizedPCFullStackTest, + ParameterizedPCFullStackTest, + testing::ValuesIn(ParameterizedTestParams()), + [](const testing::TestParamInfo& info) { + if (info.param.test_case_name_postfix.empty()) + return std::string("Default"); + return info.param.test_case_name_postfix; + }); + #if defined(RTC_ENABLE_VP9) TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_VP9) { std::unique_ptr network_emulation_manager = @@ -698,7 +736,7 @@ TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps) { fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec))); } -TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) { +TEST_P(ParameterizedPCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) { std::unique_ptr network_emulation_manager = CreateNetworkEmulationManager(); BuiltInNetworkBehaviorConfig config; @@ -706,7 +744,7 @@ TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) { config.queue_delay_ms = 0; config.link_capacity_kbps = 500; auto fixture = CreateTestFixture( - "pc_foreman_cif_500kbps_32pkts_queue", + "pc_foreman_cif_500kbps_32pkts_queue" + GetParam().test_case_name_postfix, *network_emulation_manager->time_controller(), network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config), [](PeerConfigurer* alice) { @@ -715,8 +753,15 @@ TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) { auto frame_generator = CreateFromYuvFileFrameGenerator( video, ClipNameToClipPath("foreman_cif")); alice->AddVideoConfig(std::move(video), std::move(frame_generator)); + if (GetParam().use_network_thread_as_worker_thread) { + alice->SetUseNetworkThreadAsWorkerThread(); + } }, - [](PeerConfigurer* bob) {}); + [](PeerConfigurer* bob) { + if (GetParam().use_network_thread_as_worker_thread) { + bob->SetUseNetworkThreadAsWorkerThread(); + } + }); fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec))); } @@ -958,7 +1003,8 @@ TEST(PCFullStackTest, */ #if defined(RTC_ENABLE_VP9) -TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) { +TEST_P(ParameterizedPCFullStackTest, + Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) { std::unique_ptr network_emulation_manager = CreateNetworkEmulationManager(); BuiltInNetworkBehaviorConfig config; @@ -966,7 +1012,8 @@ TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) { config.queue_delay_ms = 100; config.link_capacity_kbps = 2000; auto fixture = CreateTestFixture( - "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", + "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9" + + GetParam().test_case_name_postfix, *network_emulation_manager->time_controller(), network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config), [](PeerConfigurer* alice) { @@ -979,12 +1026,18 @@ TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) { /*name=*/cricket::kVp9CodecName, /*required_params=*/{ {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})}); + if (GetParam().use_network_thread_as_worker_thread) { + alice->SetUseNetworkThreadAsWorkerThread(); + } }, [](PeerConfigurer* bob) { bob->SetVideoCodecs({VideoCodecConfig( /*name=*/cricket::kVp9CodecName, /*required_params=*/{ {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})}); + if (GetParam().use_network_thread_as_worker_thread) { + bob->SetUseNetworkThreadAsWorkerThread(); + } }); fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec))); } @@ -1056,11 +1109,11 @@ TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast_No_Conference_Mode) { fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec))); } -TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast) { +TEST_P(ParameterizedPCFullStackTest, Pc_Screenshare_Slides_Simulcast) { std::unique_ptr network_emulation_manager = CreateNetworkEmulationManager(); auto fixture = CreateTestFixture( - "pc_screenshare_slides_simulcast", + "pc_screenshare_slides_simulcast" + GetParam().test_case_name_postfix, *network_emulation_manager->time_controller(), network_emulation_manager->CreateEndpointPairWithTwoWayRoutes( BuiltInNetworkBehaviorConfig()), @@ -1074,8 +1127,15 @@ TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast) { auto frame_generator = CreateScreenShareFrameGenerator( video, ScreenShareConfig(TimeDelta::Seconds(10))); alice->AddVideoConfig(std::move(video), std::move(frame_generator)); + if (GetParam().use_network_thread_as_worker_thread) { + alice->SetUseNetworkThreadAsWorkerThread(); + } }, - [](PeerConfigurer* bob) {}); + [](PeerConfigurer* bob) { + if (GetParam().use_network_thread_as_worker_thread) { + bob->SetUseNetworkThreadAsWorkerThread(); + } + }); RunParams run_params(TimeDelta::Seconds(kTestDurationSec)); run_params.use_conference_mode = true; fixture->Run(std::move(run_params)); @@ -1481,14 +1541,14 @@ TEST(PCFullStackTest, MAYBE_Pc_Simulcast_HD_High) { fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec))); } -TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_High) { +TEST_P(ParameterizedPCFullStackTest, Pc_Simulcast_Vp8_3sl_High) { std::unique_ptr network_emulation_manager = CreateNetworkEmulationManager(); BuiltInNetworkBehaviorConfig config; config.loss_percent = 0; config.queue_delay_ms = 100; auto fixture = CreateTestFixture( - "pc_simulcast_vp8_3sl_high", + "pc_simulcast_vp8_3sl_high" + GetParam().test_case_name_postfix, *network_emulation_manager->time_controller(), network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config), [](PeerConfigurer* alice) { @@ -1499,8 +1559,15 @@ TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_High) { auto frame_generator = CreateFromYuvFileFrameGenerator( video, ClipNameToClipPath("ConferenceMotion_1280_720_50")); alice->AddVideoConfig(std::move(video), std::move(frame_generator)); + if (GetParam().use_network_thread_as_worker_thread) { + alice->SetUseNetworkThreadAsWorkerThread(); + } }, - [](PeerConfigurer* bob) {}); + [](PeerConfigurer* bob) { + if (GetParam().use_network_thread_as_worker_thread) { + bob->SetUseNetworkThreadAsWorkerThread(); + } + }); fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec))); }