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;