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:weak_ptr_unittests",
"system_wrappers:metrics_default",
"system_wrappers:runtime_enabled_features_default",
]
if (rtc_enable_protobuf) {

View File

@ -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",

View File

@ -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" ]

View File

@ -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",

View File

@ -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",

View File

@ -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_)) {

View File

@ -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",

View File

@ -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<PacketQueue2>(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_utils",
"../system_wrappers:metrics_default",
"../system_wrappers:runtime_enabled_features_default",
]
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_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",
]

View File

@ -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",
]
}

View File

@ -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",
]
}

View File

@ -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

View File

@ -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;
}

View File

@ -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",

View File

@ -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",
]
}

View File

@ -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",