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:

committed by
Commit Bot

parent
e36a7cbd1d
commit
2ffe3e80db
1
BUILD.gn
1
BUILD.gn
@ -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) {
|
||||||
|
@ -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",
|
||||||
|
@ -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" ]
|
||||||
|
@ -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",
|
||||||
|
@ -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",
|
||||||
|
@ -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_)) {
|
||||||
|
@ -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",
|
||||||
|
@ -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)) {}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
@ -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",
|
||||||
]
|
]
|
||||||
|
@ -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",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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",
|
||||||
|
@ -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",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -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",
|
||||||
|
Reference in New Issue
Block a user