Reland Use runtime enabled features API to enable dual stream mode

This is an unchanged patch after dependency fixes in downstream projects are implemented.

Original patch was reviewed here:
https://webrtc-review.googlesource.com/c/src/+/39008

TBR=phoglund@webrtc.org,ilnik@webrtc.org,nisse@webrtc.org,philipel@webrtc.org,lliuu@webrtc.org

Change-Id: I648bbf63d34282a48cabc854615005ec65b28cb3
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8287
Reviewed-on: https://webrtc-review.googlesource.com/40420
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21674}
This commit is contained in:
Ilya Nikolaevskiy
2018-01-17 19:57:24 +00:00
committed by Commit Bot
parent e36a7cbd1d
commit 2ffe3e80db
17 changed files with 51 additions and 3 deletions

View File

@ -434,6 +434,7 @@ if (rtc_include_tests) {
"rtc_base:sequenced_task_checker_unittests", "rtc_base:sequenced_task_checker_unittests",
"rtc_base:weak_ptr_unittests", "rtc_base:weak_ptr_unittests",
"system_wrappers:metrics_default", "system_wrappers:metrics_default",
"system_wrappers:runtime_enabled_features_default",
] ]
if (rtc_enable_protobuf) { if (rtc_enable_protobuf) {

View File

@ -263,6 +263,7 @@ if (rtc_include_tests) {
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers", "../system_wrappers",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"../test:direct_transport", "../test:direct_transport",
"../test:fake_audio_device", "../test:fake_audio_device",
"../test:field_trial", "../test:field_trial",

View File

@ -169,12 +169,14 @@ if (is_ios || (is_mac && target_cpu != "x86")) {
":AppRTCMobile_ios_frameworks", ":AppRTCMobile_ios_frameworks",
"../sdk:common_objc", "../sdk:common_objc",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
} else { } else {
deps = [ deps = [
"../sdk:common_objc", "../sdk:common_objc",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
} }
} }
@ -556,6 +558,7 @@ if (is_linux || is_win) {
"../rtc_base:rtc_json", "../rtc_base:rtc_json",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"//third_party/libyuv", "//third_party/libyuv",
] ]
} }
@ -594,6 +597,7 @@ if (is_linux || is_win) {
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
if (!build_with_chromium && is_clang) { if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). # 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", "../rtc_base:rtc_base_approved",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
if (!build_with_chromium && is_clang) { if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). # 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", "../rtc_base:rtc_base_approved",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
if (!build_with_chromium && is_clang) { if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
@ -689,6 +695,7 @@ if (is_win || is_android) {
"../rtc_base:rtc_base", "../rtc_base:rtc_base",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
if (is_android) { if (is_android) {
deps += [ "../sdk/android:libjingle_peerconnection_jni" ] deps += [ "../sdk/android:libjingle_peerconnection_jni" ]

View File

@ -612,6 +612,7 @@ if (rtc_include_tests) {
"../rtc_base:rtc_base_tests_main", "../rtc_base:rtc_base_tests_main",
"../rtc_base:rtc_base_tests_utils", "../rtc_base:rtc_base_tests_utils",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"../test:audio_codec_mocks", "../test:audio_codec_mocks",
"../test:test_support", "../test:test_support",
"../test:video_test_common", "../test:video_test_common",

View File

@ -48,6 +48,7 @@ rtc_static_library("congestion_controller") {
"../../system_wrappers", "../../system_wrappers",
"../../system_wrappers:field_trial_api", "../../system_wrappers:field_trial_api",
"../../system_wrappers:metrics_api", "../../system_wrappers:metrics_api",
"../../system_wrappers:runtime_enabled_features_api",
"../bitrate_controller", "../bitrate_controller",
"../pacing", "../pacing",
"../remote_bitrate_estimator", "../remote_bitrate_estimator",

View File

@ -28,6 +28,7 @@
#include "rtc_base/socket.h" #include "rtc_base/socket.h"
#include "rtc_base/timeutils.h" #include "rtc_base/timeutils.h"
#include "system_wrappers/include/field_trial.h" #include "system_wrappers/include/field_trial.h"
#include "system_wrappers/include/runtime_enabled_features.h"
namespace webrtc { namespace webrtc {
namespace { namespace {
@ -93,6 +94,13 @@ void SortPacketFeedbackVector(
std::sort(input->begin(), input->end(), PacketFeedbackComparator()); 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 } // namespace
SendSideCongestionController::SendSideCongestionController( SendSideCongestionController::SendSideCongestionController(
@ -124,7 +132,7 @@ SendSideCongestionController::SendSideCongestionController(
accepted_queue_ms_(kDefaultAcceptedQueueMs), accepted_queue_ms_(kDefaultAcceptedQueueMs),
was_in_alr_(false), was_in_alr_(false),
pacer_pushback_experiment_( pacer_pushback_experiment_(
webrtc::field_trial::IsEnabled(kPacerPushbackExperiment)) { IsPacerPushbackExperimentEnabled()) {
delay_based_bwe_->SetMinBitrate(min_bitrate_bps_); delay_based_bwe_->SetMinBitrate(min_bitrate_bps_);
if (in_cwnd_experiment_ && if (in_cwnd_experiment_ &&
!ReadCwndExperimentParameter(&accepted_queue_ms_)) { !ReadCwndExperimentParameter(&accepted_queue_ms_)) {

View File

@ -43,6 +43,7 @@ rtc_static_library("pacing") {
"../../rtc_base/experiments:alr_experiment", "../../rtc_base/experiments:alr_experiment",
"../../system_wrappers", "../../system_wrappers",
"../../system_wrappers:field_trial_api", "../../system_wrappers:field_trial_api",
"../../system_wrappers:runtime_enabled_features_api",
"../remote_bitrate_estimator", "../remote_bitrate_estimator",
"../rtp_rtcp", "../rtp_rtcp",
"../rtp_rtcp:rtp_rtcp_format", "../rtp_rtcp:rtp_rtcp_format",
@ -69,6 +70,7 @@ if (rtc_include_tests) {
"../../rtc_base/experiments:alr_experiment", "../../rtc_base/experiments:alr_experiment",
"../../system_wrappers", "../../system_wrappers",
"../../system_wrappers:field_trial_api", "../../system_wrappers:field_trial_api",
"../../system_wrappers:runtime_enabled_features_api",
"../../test:field_trial", "../../test:field_trial",
"../../test:test_support", "../../test:test_support",
"../rtp_rtcp", "../rtp_rtcp",

View File

@ -27,6 +27,7 @@
#include "rtc_base/ptr_util.h" #include "rtc_base/ptr_util.h"
#include "system_wrappers/include/clock.h" #include "system_wrappers/include/clock.h"
#include "system_wrappers/include/field_trial.h" #include "system_wrappers/include/field_trial.h"
#include "system_wrappers/include/runtime_enabled_features.h"
namespace { namespace {
// Time limit in milliseconds between packet bursts. // Time limit in milliseconds between packet bursts.
@ -37,6 +38,15 @@ const int64_t kPausedPacketIntervalMs = 500;
// time. // time.
const int64_t kMaxIntervalTimeMs = 30; 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
namespace webrtc { namespace webrtc {
@ -48,7 +58,7 @@ PacedSender::PacedSender(const Clock* clock,
PacketSender* packet_sender, PacketSender* packet_sender,
RtcEventLog* event_log) : RtcEventLog* event_log) :
PacedSender(clock, packet_sender, event_log, PacedSender(clock, packet_sender, event_log,
webrtc::field_trial::IsEnabled("WebRTC-RoundRobinPacing") IsRoundRobinPacingEnabled()
? rtc::MakeUnique<PacketQueue2>(clock) ? rtc::MakeUnique<PacketQueue2>(clock)
: rtc::MakeUnique<PacketQueue>(clock)) {} : rtc::MakeUnique<PacketQueue>(clock)) {}

View File

@ -91,6 +91,7 @@ if (rtc_include_tests) {
"../rtc_base:rtc_base_tests_main", "../rtc_base:rtc_base_tests_main",
"../rtc_base:rtc_base_tests_utils", "../rtc_base:rtc_base_tests_utils",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
if (!build_with_chromium && is_clang) { if (!build_with_chromium && is_clang) {

View File

@ -309,6 +309,7 @@ if (rtc_include_tests) {
"../rtc_base:rtc_base_tests_main", "../rtc_base:rtc_base_tests_main",
"../rtc_base:rtc_base_tests_utils", "../rtc_base:rtc_base_tests_utils",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"../test:test_support", "../test:test_support",
] ]
@ -495,6 +496,7 @@ if (rtc_include_tests) {
"../rtc_base:rtc_base_tests_main", "../rtc_base:rtc_base_tests_main",
"../rtc_base:rtc_base_tests_utils", "../rtc_base:rtc_base_tests_utils",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"../test:audio_codec_mocks", "../test:audio_codec_mocks",
"../test:test_support", "../test:test_support",
] ]

View File

@ -751,6 +751,7 @@ if (is_ios || is_mac) {
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
libs = [ libs = [
@ -779,6 +780,7 @@ if (is_ios || is_mac) {
":ui_objc", ":ui_objc",
"../system_wrappers:field_trial_default", "../system_wrappers:field_trial_default",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
] ]
} }

View File

@ -471,6 +471,7 @@ rtc_static_library("libjingle_peerconnection_metrics_default_jni") {
"../../system_wrappers:field_trial_default", "../../system_wrappers:field_trial_default",
"../../system_wrappers:metrics_api", "../../system_wrappers:metrics_api",
"../../system_wrappers:metrics_default", "../../system_wrappers:metrics_default",
"../../system_wrappers:runtime_enabled_features_default",
] ]
} }

View File

@ -21,8 +21,12 @@
// TODO(ilnik): Find a more flexible way to use Chrome features. // TODO(ilnik): Find a more flexible way to use Chrome features.
// This interface requires manual translation from feature name to // This interface requires manual translation from feature name to
// Chrome feature class in third_party/webrtc_overrides. // Chrome feature class in third_party/webrtc_overrides.
namespace webrtc { namespace webrtc {
namespace runtime_enabled_features { namespace runtime_enabled_features {
const char kDualStreamModeFeatureName[] = "WebRtcDualStreamMode";
bool IsFeatureEnabled(std::string feature_name); bool IsFeatureEnabled(std::string feature_name);
} // namespace runtime_enabled_features } // namespace runtime_enabled_features

View File

@ -22,7 +22,7 @@ namespace webrtc {
namespace runtime_enabled_features { namespace runtime_enabled_features {
bool IsFeatureEnabled(std::string feature_name) { bool IsFeatureEnabled(std::string feature_name) {
if (feature_name == "WebRtcDualStreamMode") if (feature_name == kDualStreamModeFeatureName)
return flags::FLAG_enable_dual_stream_mode; return flags::FLAG_enable_dual_stream_mode;
return false; return false;
} }

View File

@ -214,6 +214,7 @@ if (rtc_include_tests) {
":perf_test", ":perf_test",
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"//testing/gmock", "//testing/gmock",
"//testing/gtest", "//testing/gtest",
] ]
@ -626,6 +627,7 @@ rtc_source_set("test_common") {
"../rtc_base:sequenced_task_checker", "../rtc_base:sequenced_task_checker",
"../system_wrappers", "../system_wrappers",
"../system_wrappers:field_trial_api", "../system_wrappers:field_trial_api",
"../system_wrappers:runtime_enabled_features_api",
"../video", "../video",
"//testing/gmock", "//testing/gmock",
"//testing/gtest", "//testing/gtest",

View File

@ -18,6 +18,7 @@ rtc_static_library("webrtc_fuzzer_main") {
"../../rtc_base:rtc_base_approved", "../../rtc_base:rtc_base_approved",
"../../system_wrappers:field_trial_default", "../../system_wrappers:field_trial_default",
"../../system_wrappers:metrics_default", "../../system_wrappers:metrics_default",
"../../system_wrappers:runtime_enabled_features_default",
"//testing/libfuzzer:libfuzzer_main", "//testing/libfuzzer:libfuzzer_main",
] ]
} }

View File

@ -169,6 +169,7 @@ if (rtc_include_tests) {
":video_quality_test", ":video_quality_test",
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"../test:field_trial", "../test:field_trial",
"../test:run_test", "../test:run_test",
"../test:run_test_interface", "../test:run_test_interface",
@ -194,6 +195,7 @@ if (rtc_include_tests) {
":video_quality_test", ":video_quality_test",
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"../test:field_trial", "../test:field_trial",
"../test:run_test", "../test:run_test",
"../test:run_test_interface", "../test:run_test_interface",
@ -217,6 +219,7 @@ if (rtc_include_tests) {
":video_quality_test", ":video_quality_test",
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"../test:field_trial", "../test:field_trial",
"../test:run_test", "../test:run_test",
"../test:run_test_interface", "../test:run_test_interface",
@ -249,6 +252,7 @@ if (rtc_include_tests) {
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers", "../system_wrappers",
"../system_wrappers:metrics_default", "../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
"../test:field_trial", "../test:field_trial",
"../test:rtp_test_utils", "../test:rtp_test_utils",
"../test:run_test", "../test:run_test",