Use runtime enabled features API to enable dual stream mode
Bug: webrtc:8287
Change-Id: I1a366d959a8b7f2a704baa7ea8ace64c1c398d52
Reviewed-on: https://webrtc-review.googlesource.com/39008
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21661}
diff --git a/BUILD.gn b/BUILD.gn
index bb5c953..9e24f37 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -434,6 +434,7 @@
"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 03ed9b4..90b44cf 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -263,6 +263,7 @@
"../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 36065e4..1bbcf74 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -169,12 +169,14 @@
":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 @@
"../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 @@
"../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 @@
"../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 @@
"../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 @@
"../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 bfd91ce..9be093c 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -612,6 +612,7 @@
"../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 cf303a5..84de71d 100644
--- a/modules/congestion_controller/BUILD.gn
+++ b/modules/congestion_controller/BUILD.gn
@@ -48,6 +48,7 @@
"../../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 2aeed51..cb3e610 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 @@
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 @@
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 3734fcf..df83aa5 100644
--- a/modules/pacing/BUILD.gn
+++ b/modules/pacing/BUILD.gn
@@ -43,6 +43,7 @@
"../../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 @@
"../../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 6ca4599..f559ffc 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 @@
// 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 @@
PacketSender* packet_sender,
RtcEventLog* event_log) :
PacedSender(clock, packet_sender, event_log,
- webrtc::field_trial::IsEnabled("WebRTC-RoundRobinPacing")
+ IsRoundRobinPacingEnabled()
? rtc::MakeUnique<PacketQueue2>(clock)
: rtc::MakeUnique<PacketQueue>(clock)) {}
diff --git a/ortc/BUILD.gn b/ortc/BUILD.gn
index 0150d89..2005556 100644
--- a/ortc/BUILD.gn
+++ b/ortc/BUILD.gn
@@ -91,6 +91,7 @@
"../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 27679ac..58e27c0 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -309,6 +309,7 @@
"../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 @@
"../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 121e47c..b587a55 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -751,6 +751,7 @@
"../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 @@
":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 fa4a8f9..e484632 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -471,6 +471,7 @@
"../../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 a972cda..9ccbedc 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 cd0d157..31a3ff7 100644
--- a/system_wrappers/source/runtime_enabled_features_default.cc
+++ b/system_wrappers/source/runtime_enabled_features_default.cc
@@ -22,7 +22,7 @@
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 a83e8bb..d7a2e77 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -214,6 +214,7 @@
":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_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 0ccabfc..90fb62c 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -18,6 +18,7 @@
"../../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 8502691..3d2d5e9 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -169,6 +169,7 @@
":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 @@
":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 @@
":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 @@
"../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",