Use propagated instead of global field trials for alr expriment
Bug: webrtc:10335
Change-Id: I52a286d38dadaac79afd55ebbe3c06e44a7e881b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/330360
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41333}
diff --git a/rtc_base/experiments/BUILD.gn b/rtc_base/experiments/BUILD.gn
index 185d593..d44eefd 100644
--- a/rtc_base/experiments/BUILD.gn
+++ b/rtc_base/experiments/BUILD.gn
@@ -16,10 +16,9 @@
deps = [
"..:logging",
"../../api:field_trials_view",
- "../../api/transport:field_trial_based_config",
]
absl_deps = [
- "//third_party/abseil-cpp/absl/strings:strings",
+ "//third_party/abseil-cpp/absl/strings:string_view",
"//third_party/abseil-cpp/absl/types:optional",
]
}
diff --git a/rtc_base/experiments/alr_experiment.cc b/rtc_base/experiments/alr_experiment.cc
index f5d36f6..5370de5 100644
--- a/rtc_base/experiments/alr_experiment.cc
+++ b/rtc_base/experiments/alr_experiment.cc
@@ -16,21 +16,16 @@
#include <string>
#include "absl/strings/string_view.h"
-#include "api/transport/field_trial_based_config.h"
+#include "api/field_trials_view.h"
#include "rtc_base/logging.h"
namespace webrtc {
+namespace {
-const char AlrExperimentSettings::kScreenshareProbingBweExperimentName[] =
- "WebRTC-ProbingScreenshareBwe";
-const char AlrExperimentSettings::kStrictPacingAndProbingExperimentName[] =
- "WebRTC-StrictPacingAndProbing";
-const char kDefaultProbingScreenshareBweSettings[] = "1.0,2875,80,40,-60,3";
+constexpr absl::string_view kDefaultProbingScreenshareBweSettings =
+ "1.0,2875,80,40,-60,3";
-bool AlrExperimentSettings::MaxOneFieldTrialEnabled() {
- return AlrExperimentSettings::MaxOneFieldTrialEnabled(
- FieldTrialBasedConfig());
-}
+} // namespace
bool AlrExperimentSettings::MaxOneFieldTrialEnabled(
const FieldTrialsView& key_value_config) {
@@ -40,12 +35,6 @@
}
absl::optional<AlrExperimentSettings>
-AlrExperimentSettings::CreateFromFieldTrial(absl::string_view experiment_name) {
- return AlrExperimentSettings::CreateFromFieldTrial(FieldTrialBasedConfig(),
- experiment_name);
-}
-
-absl::optional<AlrExperimentSettings>
AlrExperimentSettings::CreateFromFieldTrial(
const FieldTrialsView& key_value_config,
absl::string_view experiment_name) {
diff --git a/rtc_base/experiments/alr_experiment.h b/rtc_base/experiments/alr_experiment.h
index 048fd90..9914828 100644
--- a/rtc_base/experiments/alr_experiment.h
+++ b/rtc_base/experiments/alr_experiment.h
@@ -30,14 +30,14 @@
// reserved value to indicate absence of experiment.
int group_id;
- static const char kScreenshareProbingBweExperimentName[];
- static const char kStrictPacingAndProbingExperimentName[];
- static absl::optional<AlrExperimentSettings> CreateFromFieldTrial(
- absl::string_view experiment_name);
+ static constexpr absl::string_view kScreenshareProbingBweExperimentName =
+ "WebRTC-ProbingScreenshareBwe";
+ static constexpr absl::string_view kStrictPacingAndProbingExperimentName =
+ "WebRTC-StrictPacingAndProbing";
+
static absl::optional<AlrExperimentSettings> CreateFromFieldTrial(
const FieldTrialsView& key_value_config,
absl::string_view experiment_name);
- static bool MaxOneFieldTrialEnabled();
static bool MaxOneFieldTrialEnabled(const FieldTrialsView& key_value_config);
private:
diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc
index ee023d9..6075cc7 100644
--- a/video/video_send_stream_impl.cc
+++ b/video/video_send_stream_impl.cc
@@ -18,6 +18,7 @@
#include "absl/algorithm/container.h"
#include "api/crypto/crypto_options.h"
+#include "api/field_trials_view.h"
#include "api/rtp_parameters.h"
#include "api/scoped_refptr.h"
#include "api/sequence_checker.h"
@@ -139,12 +140,15 @@
}
absl::optional<AlrExperimentSettings> GetAlrSettings(
+ const FieldTrialsView& field_trials,
VideoEncoderConfig::ContentType content_type) {
if (content_type == VideoEncoderConfig::ContentType::kScreen) {
return AlrExperimentSettings::CreateFromFieldTrial(
+ field_trials,
AlrExperimentSettings::kScreenshareProbingBweExperimentName);
}
return AlrExperimentSettings::CreateFromFieldTrial(
+ field_trials,
AlrExperimentSettings::kStrictPacingAndProbingExperimentName);
}
@@ -171,7 +175,7 @@
return absl::nullopt;
absl::optional<AlrExperimentSettings> alr_settings =
- GetAlrSettings(content_type);
+ GetAlrSettings(field_trials, content_type);
if (alr_settings)
return alr_settings->pacing_factor;
@@ -230,7 +234,7 @@
const FieldTrialsView& field_trials)
: clock_(clock),
has_alr_probing_(config->periodic_alr_bandwidth_probing ||
- GetAlrSettings(content_type)),
+ GetAlrSettings(field_trials, content_type)),
pacing_config_(PacingConfig(field_trials)),
stats_proxy_(stats_proxy),
config_(config),
@@ -258,7 +262,7 @@
RTC_DCHECK_NE(initial_encoder_max_bitrate, 0);
RTC_LOG(LS_INFO) << "VideoSendStreamImpl: " << config_->ToString();
- RTC_CHECK(AlrExperimentSettings::MaxOneFieldTrialEnabled());
+ RTC_CHECK(AlrExperimentSettings::MaxOneFieldTrialEnabled(field_trials));
// Only request rotation at the source when we positively know that the remote
// side doesn't support the rotation extension. This allows us to prepare the
@@ -277,7 +281,7 @@
// pacing settings.
if (configured_pacing_factor_) {
absl::optional<AlrExperimentSettings> alr_settings =
- GetAlrSettings(content_type);
+ GetAlrSettings(field_trials, content_type);
int queue_time_limit_ms;
if (alr_settings) {
enable_alr_bw_probing = true;