Adding the option to experiment with the max_allowed_excess_render_blocks parameter.

Bug: webrtc:337900458
Change-Id: I2108c7c67eb9aa460932efe881760924109b1915
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/349460
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42207}
diff --git a/experiments/field_trials.py b/experiments/field_trials.py
index 6cb0d53..c23d523 100755
--- a/experiments/field_trials.py
+++ b/experiments/field_trials.py
@@ -41,6 +41,9 @@
 # registered in the container below.
 ACTIVE_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
     # keep-sorted start
+    FieldTrial('WebRTC-Aec3BufferingMaxAllowedExcessRenderBlocksOverride',
+               337900458,
+               date(2024, 9, 1)),
     FieldTrial('WebRTC-Audio-GainController2',
                42232605,
                date(2024, 4, 1)),
diff --git a/modules/audio_processing/aec3/echo_canceller3.cc b/modules/audio_processing/aec3/echo_canceller3.cc
index fcd9757..4c500f4 100644
--- a/modules/audio_processing/aec3/echo_canceller3.cc
+++ b/modules/audio_processing/aec3/echo_canceller3.cc
@@ -633,6 +633,13 @@
       "WebRTC-Aec3DelayEstimateSmoothingDelayFoundOverride", 0.f, 1.f,
       &adjusted_cfg.delay.delay_estimate_smoothing_delay_found);
 
+  int max_allowed_excess_render_blocks_override =
+      adjusted_cfg.buffering.max_allowed_excess_render_blocks;
+  RetrieveFieldTrialValue(
+      "WebRTC-Aec3BufferingMaxAllowedExcessRenderBlocksOverride", 0, 20,
+      &max_allowed_excess_render_blocks_override);
+  adjusted_cfg.buffering.max_allowed_excess_render_blocks =
+      max_allowed_excess_render_blocks_override;
   return adjusted_cfg;
 }
 
diff --git a/modules/audio_processing/aec3/echo_canceller3_unittest.cc b/modules/audio_processing/aec3/echo_canceller3_unittest.cc
index ad126af..10957fd 100644
--- a/modules/audio_processing/aec3/echo_canceller3_unittest.cc
+++ b/modules/audio_processing/aec3/echo_canceller3_unittest.cc
@@ -924,6 +924,16 @@
   EXPECT_FLOAT_EQ(adjusted_config.ep_strength.nearend_len, 0.8);
 }
 
+// Testing the field trial-based that overrides the maximum allowed ecess render
+// blocks in the render buffering.
+TEST(EchoCanceller3FieldTrials, Aec3BufferingMaxAllowedExcessRenderBlocks) {
+  webrtc::test::ScopedFieldTrials field_trials(
+      "WebRTC-Aec3BufferingMaxAllowedExcessRenderBlocksOverride/2/");
+  EchoCanceller3Config default_config;
+  EchoCanceller3Config adjusted_config = AdjustConfig(default_config);
+  EXPECT_EQ(adjusted_config.buffering.max_allowed_excess_render_blocks, 2ul);
+}
+
 TEST(EchoCanceller3, DetectionOfProperStereo) {
   constexpr int kSampleRateHz = 16000;
   constexpr int kNumChannels = 2;