diff --git a/BUILD.gn b/BUILD.gn index bb5c953bc1..9e24f371e6 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -434,6 +434,7 @@ if (rtc_include_tests) { "rtc_base:sequenced_task_checker_unittests", "rtc_base:weak_ptr_unittests", "system_wrappers:metrics_default", + "system_wrappers:runtime_enabled_features_default", ] if (rtc_enable_protobuf) { diff --git a/call/BUILD.gn b/call/BUILD.gn index 03ed9b417d..90b44cf562 100644 --- a/call/BUILD.gn +++ b/call/BUILD.gn @@ -263,6 +263,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_approved", "../system_wrappers", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "../test:direct_transport", "../test:fake_audio_device", "../test:field_trial", diff --git a/examples/BUILD.gn b/examples/BUILD.gn index 36065e41d3..1bbcf743a4 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -169,12 +169,14 @@ if (is_ios || (is_mac && target_cpu != "x86")) { ":AppRTCMobile_ios_frameworks", "../sdk:common_objc", "../system_wrappers:field_trial_default", + "../system_wrappers:runtime_enabled_features_default", ] } else { deps = [ "../sdk:common_objc", "../system_wrappers:field_trial_default", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", ] } } @@ -556,6 +558,7 @@ if (is_linux || is_win) { "../rtc_base:rtc_json", "../system_wrappers:field_trial_default", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "//third_party/libyuv", ] } @@ -594,6 +597,7 @@ if (is_linux || is_win) { "../rtc_base:rtc_base_approved", "../system_wrappers:field_trial_default", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", ] if (!build_with_chromium && is_clang) { # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). @@ -612,6 +616,7 @@ if (is_linux || is_win) { "../rtc_base:rtc_base_approved", "../system_wrappers:field_trial_default", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", ] if (!build_with_chromium && is_clang) { # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). @@ -630,6 +635,7 @@ if (is_linux || is_win) { "../rtc_base:rtc_base_approved", "../system_wrappers:field_trial_default", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", ] if (!build_with_chromium && is_clang) { # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). @@ -689,6 +695,7 @@ if (is_win || is_android) { "../rtc_base:rtc_base", "../system_wrappers:field_trial_default", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", ] if (is_android) { deps += [ "../sdk/android:libjingle_peerconnection_jni" ] diff --git a/media/BUILD.gn b/media/BUILD.gn index bfd91ce718..9be093c34d 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -612,6 +612,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_tests_main", "../rtc_base:rtc_base_tests_utils", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "../test:audio_codec_mocks", "../test:test_support", "../test:video_test_common", diff --git a/modules/congestion_controller/BUILD.gn b/modules/congestion_controller/BUILD.gn index cf303a578c..84de71dd1f 100644 --- a/modules/congestion_controller/BUILD.gn +++ b/modules/congestion_controller/BUILD.gn @@ -48,6 +48,7 @@ rtc_static_library("congestion_controller") { "../../system_wrappers", "../../system_wrappers:field_trial_api", "../../system_wrappers:metrics_api", + "../../system_wrappers:runtime_enabled_features_api", "../bitrate_controller", "../pacing", "../remote_bitrate_estimator", diff --git a/modules/congestion_controller/send_side_congestion_controller.cc b/modules/congestion_controller/send_side_congestion_controller.cc index 2aeed51a01..cb3e610e38 100644 --- a/modules/congestion_controller/send_side_congestion_controller.cc +++ b/modules/congestion_controller/send_side_congestion_controller.cc @@ -28,6 +28,7 @@ #include "rtc_base/socket.h" #include "rtc_base/timeutils.h" #include "system_wrappers/include/field_trial.h" +#include "system_wrappers/include/runtime_enabled_features.h" namespace webrtc { namespace { @@ -93,6 +94,13 @@ void SortPacketFeedbackVector( std::sort(input->begin(), input->end(), PacketFeedbackComparator()); } +bool IsPacerPushbackExperimentEnabled() { + return webrtc::field_trial::IsEnabled(kPacerPushbackExperiment) || ( + !webrtc::field_trial::IsDisabled(kPacerPushbackExperiment) && + webrtc::runtime_enabled_features::IsFeatureEnabled( + webrtc::runtime_enabled_features::kDualStreamModeFeatureName)); +} + } // namespace SendSideCongestionController::SendSideCongestionController( @@ -124,7 +132,7 @@ SendSideCongestionController::SendSideCongestionController( accepted_queue_ms_(kDefaultAcceptedQueueMs), was_in_alr_(false), pacer_pushback_experiment_( - webrtc::field_trial::IsEnabled(kPacerPushbackExperiment)) { + IsPacerPushbackExperimentEnabled()) { delay_based_bwe_->SetMinBitrate(min_bitrate_bps_); if (in_cwnd_experiment_ && !ReadCwndExperimentParameter(&accepted_queue_ms_)) { diff --git a/modules/pacing/BUILD.gn b/modules/pacing/BUILD.gn index 3734fcf0db..df83aa5582 100644 --- a/modules/pacing/BUILD.gn +++ b/modules/pacing/BUILD.gn @@ -43,6 +43,7 @@ rtc_static_library("pacing") { "../../rtc_base/experiments:alr_experiment", "../../system_wrappers", "../../system_wrappers:field_trial_api", + "../../system_wrappers:runtime_enabled_features_api", "../remote_bitrate_estimator", "../rtp_rtcp", "../rtp_rtcp:rtp_rtcp_format", @@ -69,6 +70,7 @@ if (rtc_include_tests) { "../../rtc_base/experiments:alr_experiment", "../../system_wrappers", "../../system_wrappers:field_trial_api", + "../../system_wrappers:runtime_enabled_features_api", "../../test:field_trial", "../../test:test_support", "../rtp_rtcp", diff --git a/modules/pacing/paced_sender.cc b/modules/pacing/paced_sender.cc index 6ca4599c59..f559ffc2c2 100644 --- a/modules/pacing/paced_sender.cc +++ b/modules/pacing/paced_sender.cc @@ -27,6 +27,7 @@ #include "rtc_base/ptr_util.h" #include "system_wrappers/include/clock.h" #include "system_wrappers/include/field_trial.h" +#include "system_wrappers/include/runtime_enabled_features.h" namespace { // Time limit in milliseconds between packet bursts. @@ -37,6 +38,15 @@ const int64_t kPausedPacketIntervalMs = 500; // time. const int64_t kMaxIntervalTimeMs = 30; +const char kRoundRobinExperimentName[] = "WebRTC-RoundRobinPacing"; + +bool IsRoundRobinPacingEnabled() { + return webrtc::field_trial::IsEnabled(kRoundRobinExperimentName) || ( + !webrtc::field_trial::IsDisabled(kRoundRobinExperimentName) && + webrtc::runtime_enabled_features::IsFeatureEnabled( + webrtc::runtime_enabled_features::kDualStreamModeFeatureName)); +} + } // namespace namespace webrtc { @@ -48,7 +58,7 @@ PacedSender::PacedSender(const Clock* clock, PacketSender* packet_sender, RtcEventLog* event_log) : PacedSender(clock, packet_sender, event_log, - webrtc::field_trial::IsEnabled("WebRTC-RoundRobinPacing") + IsRoundRobinPacingEnabled() ? rtc::MakeUnique(clock) : rtc::MakeUnique(clock)) {} diff --git a/ortc/BUILD.gn b/ortc/BUILD.gn index 0150d89102..20055568b6 100644 --- a/ortc/BUILD.gn +++ b/ortc/BUILD.gn @@ -91,6 +91,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_tests_main", "../rtc_base:rtc_base_tests_utils", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", ] if (!build_with_chromium && is_clang) { diff --git a/pc/BUILD.gn b/pc/BUILD.gn index 27679ac299..58e27c0b05 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -309,6 +309,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_tests_main", "../rtc_base:rtc_base_tests_utils", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "../test:test_support", ] @@ -495,6 +496,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_tests_main", "../rtc_base:rtc_base_tests_utils", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "../test:audio_codec_mocks", "../test:test_support", ] diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 121e47c7aa..b587a55ca9 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -751,6 +751,7 @@ if (is_ios || is_mac) { "../rtc_base:rtc_base_approved", "../system_wrappers:field_trial_default", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", ] libs = [ @@ -779,6 +780,7 @@ if (is_ios || is_mac) { ":ui_objc", "../system_wrappers:field_trial_default", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", ] } diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index fa4a8f9df2..e484632ff0 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -471,6 +471,7 @@ rtc_static_library("libjingle_peerconnection_metrics_default_jni") { "../../system_wrappers:field_trial_default", "../../system_wrappers:metrics_api", "../../system_wrappers:metrics_default", + "../../system_wrappers:runtime_enabled_features_default", ] } diff --git a/system_wrappers/include/runtime_enabled_features.h b/system_wrappers/include/runtime_enabled_features.h index a972cdac93..9ccbedc2b1 100644 --- a/system_wrappers/include/runtime_enabled_features.h +++ b/system_wrappers/include/runtime_enabled_features.h @@ -21,8 +21,12 @@ // TODO(ilnik): Find a more flexible way to use Chrome features. // This interface requires manual translation from feature name to // Chrome feature class in third_party/webrtc_overrides. + namespace webrtc { namespace runtime_enabled_features { + +const char kDualStreamModeFeatureName[] = "WebRtcDualStreamMode"; + bool IsFeatureEnabled(std::string feature_name); } // namespace runtime_enabled_features diff --git a/system_wrappers/source/runtime_enabled_features_default.cc b/system_wrappers/source/runtime_enabled_features_default.cc index cd0d157d68..31a3ff7f4e 100644 --- a/system_wrappers/source/runtime_enabled_features_default.cc +++ b/system_wrappers/source/runtime_enabled_features_default.cc @@ -22,7 +22,7 @@ namespace webrtc { namespace runtime_enabled_features { bool IsFeatureEnabled(std::string feature_name) { - if (feature_name == "WebRtcDualStreamMode") + if (feature_name == kDualStreamModeFeatureName) return flags::FLAG_enable_dual_stream_mode; return false; } diff --git a/test/BUILD.gn b/test/BUILD.gn index a83e8bb216..d7a2e77284 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -214,6 +214,7 @@ if (rtc_include_tests) { ":perf_test", "../rtc_base:rtc_base_approved", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "//testing/gmock", "//testing/gtest", ] @@ -626,6 +627,7 @@ rtc_source_set("test_common") { "../rtc_base:sequenced_task_checker", "../system_wrappers", "../system_wrappers:field_trial_api", + "../system_wrappers:runtime_enabled_features_api", "../video", "//testing/gmock", "//testing/gtest", diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn index 0ccabfc179..90fb62c51e 100644 --- a/test/fuzzers/BUILD.gn +++ b/test/fuzzers/BUILD.gn @@ -18,6 +18,7 @@ rtc_static_library("webrtc_fuzzer_main") { "../../rtc_base:rtc_base_approved", "../../system_wrappers:field_trial_default", "../../system_wrappers:metrics_default", + "../../system_wrappers:runtime_enabled_features_default", "//testing/libfuzzer:libfuzzer_main", ] } diff --git a/video/BUILD.gn b/video/BUILD.gn index 85026918ab..3d2d5e904d 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -169,6 +169,7 @@ if (rtc_include_tests) { ":video_quality_test", "../rtc_base:rtc_base_approved", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "../test:field_trial", "../test:run_test", "../test:run_test_interface", @@ -194,6 +195,7 @@ if (rtc_include_tests) { ":video_quality_test", "../rtc_base:rtc_base_approved", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "../test:field_trial", "../test:run_test", "../test:run_test_interface", @@ -217,6 +219,7 @@ if (rtc_include_tests) { ":video_quality_test", "../rtc_base:rtc_base_approved", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "../test:field_trial", "../test:run_test", "../test:run_test_interface", @@ -249,6 +252,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_approved", "../system_wrappers", "../system_wrappers:metrics_default", + "../system_wrappers:runtime_enabled_features_default", "../test:field_trial", "../test:rtp_test_utils", "../test:run_test",