Add configuration of new cpu load estimator via field trials.

Field trial overrides setting via RTCConfiguration.

Bug: None
Change-Id: Id7b2aa9c533fe20f2870edd589bb169946cc4936
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/133568
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27757}
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 2555339..8d776d5 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -205,6 +205,7 @@
     "../rtc_base:rtc_task_queue",
     "../rtc_base:timeutils",
     "../rtc_base/experiments:alr_experiment",
+    "../rtc_base/experiments:field_trial_parser",
     "../rtc_base/experiments:quality_scaling_experiment",
     "../rtc_base/experiments:rate_control_settings",
     "../rtc_base/synchronization:sequence_checker",
diff --git a/video/overuse_frame_detector.cc b/video/overuse_frame_detector.cc
index 894a648..182ff54 100644
--- a/video/overuse_frame_detector.cc
+++ b/video/overuse_frame_detector.cc
@@ -533,6 +533,8 @@
       in_quick_rampup_(false),
       current_rampup_delay_ms_(kStandardRampUpDelayMs) {
   task_checker_.Detach();
+  ParseFieldTrial({&filter_time_constant_},
+                  field_trial::FindFullName("WebRTC-CpuLoadEstimator"));
 }
 
 OveruseFrameDetector::~OveruseFrameDetector() {}
@@ -683,6 +685,11 @@
 void OveruseFrameDetector::SetOptions(const CpuOveruseOptions& options) {
   RTC_DCHECK_RUN_ON(&task_checker_);
   options_ = options;
+
+  // Time constant config overridable by field trial.
+  if (filter_time_constant_) {
+    options_.filter_time_ms = filter_time_constant_->ms();
+  }
   // Force reset with next frame.
   num_pixels_ = 0;
   usage_ = CreateProcessingUsage(options);
diff --git a/video/overuse_frame_detector.h b/video/overuse_frame_detector.h
index c65acc2..20e0971 100644
--- a/video/overuse_frame_detector.h
+++ b/video/overuse_frame_detector.h
@@ -18,6 +18,7 @@
 #include "api/video/video_stream_encoder_observer.h"
 #include "modules/video_coding/utility/quality_scaler.h"
 #include "rtc_base/constructor_magic.h"
+#include "rtc_base/experiments/field_trial_parser.h"
 #include "rtc_base/numerics/exp_filter.h"
 #include "rtc_base/synchronization/sequence_checker.h"
 #include "rtc_base/task_queue.h"
@@ -146,6 +147,9 @@
 
   std::unique_ptr<ProcessingUsage> usage_ RTC_PT_GUARDED_BY(task_checker_);
 
+  // If set by field trial, overrides CpuOveruseOptions::filter_time_ms.
+  FieldTrialOptional<TimeDelta> filter_time_constant_{"tau"};
+
   RTC_DISALLOW_COPY_AND_ASSIGN(OveruseFrameDetector);
 };