Embed Deceleration Target Level Offset Field Trial.

Bug: webrtc:10619
Change-Id: I4ef75ae03d6071bf84d2c1b6e50290ea26e83496
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/152663
Commit-Queue: Ruslan Burakov <kuddai@google.com>
Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29169}
diff --git a/modules/audio_coding/neteq/delay_manager.cc b/modules/audio_coding/neteq/delay_manager.cc
index 70991f3..afa2a3f 100644
--- a/modules/audio_coding/neteq/delay_manager.cc
+++ b/modules/audio_coding/neteq/delay_manager.cc
@@ -39,6 +39,7 @@
                                      // calculate relative packet arrival delay.
 constexpr int kDelayBuckets = 100;
 constexpr int kBucketSizeMs = 20;
+constexpr int kDecelerationTargetLevelOffsetMs = 85 << 8;  // In Q8.
 
 int PercentileToQuantile(double percentile) {
   return static_cast<int>((1 << 30) * percentile / 100.0 + 0.5);
@@ -79,29 +80,6 @@
   return config;
 }
 
-absl::optional<int> GetDecelerationTargetLevelOffsetMs() {
-  constexpr char kDecelerationTargetLevelOffsetFieldTrial[] =
-      "WebRTC-Audio-NetEqDecelerationTargetLevelOffset";
-  if (!webrtc::field_trial::IsEnabled(
-          kDecelerationTargetLevelOffsetFieldTrial)) {
-    return absl::nullopt;
-  }
-
-  const auto field_trial_string = webrtc::field_trial::FindFullName(
-      kDecelerationTargetLevelOffsetFieldTrial);
-  int deceleration_target_level_offset_ms = -1;
-  sscanf(field_trial_string.c_str(), "Enabled-%d",
-         &deceleration_target_level_offset_ms);
-  if (deceleration_target_level_offset_ms >= 0) {
-    RTC_LOG(LS_INFO) << "NetEq deceleration_target_level_offset "
-                     << "in milliseconds "
-                     << deceleration_target_level_offset_ms;
-    // Convert into Q8.
-    return deceleration_target_level_offset_ms << 8;
-  }
-  return absl::nullopt;
-}
-
 absl::optional<int> GetExtraDelayMs() {
   constexpr char kExtraDelayFieldTrial[] = "WebRTC-Audio-NetEqExtraDelay";
   if (!webrtc::field_trial::IsEnabled(kExtraDelayFieldTrial)) {
@@ -153,14 +131,10 @@
       frame_length_change_experiment_(
           field_trial::IsEnabled("WebRTC-Audio-NetEqFramelengthExperiment")),
       enable_rtx_handling_(enable_rtx_handling),
-      deceleration_target_level_offset_ms_(
-          GetDecelerationTargetLevelOffsetMs()),
       extra_delay_ms_(GetExtraDelayMs()) {
   assert(peak_detector);  // Should never be NULL.
   RTC_CHECK(histogram_);
   RTC_DCHECK_GE(base_minimum_delay_ms_, 0);
-  RTC_DCHECK(!deceleration_target_level_offset_ms_ ||
-             *deceleration_target_level_offset_ms_ >= 0);
 
   Reset();
 }
@@ -437,10 +411,10 @@
   // |target_level| is in Q8 already.
   *lower_limit = (target_level * 3) / 4;
 
-  if (deceleration_target_level_offset_ms_ && packet_len_ms_ > 0) {
-    *lower_limit = std::max(
-        *lower_limit,
-        target_level - *deceleration_target_level_offset_ms_ / packet_len_ms_);
+  if (packet_len_ms_ > 0) {
+    *lower_limit =
+        std::max(*lower_limit, target_level - kDecelerationTargetLevelOffsetMs /
+                                                  packet_len_ms_);
   }
 
   int window_20ms = 0x7FFF;  // Default large value for legacy bit-exactness.
@@ -549,4 +523,5 @@
   const int max_buffer_time = max_packets_in_buffer_ * packet_len_ms_;
   return rtc::dchecked_cast<int>(3 * max_buffer_time / 4);
 }
+
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq/delay_manager.h b/modules/audio_coding/neteq/delay_manager.h
index 642de4d..a701242 100644
--- a/modules/audio_coding/neteq/delay_manager.h
+++ b/modules/audio_coding/neteq/delay_manager.h
@@ -124,11 +124,6 @@
     return effective_minimum_delay_ms_;
   }
 
-  // This accessor is only intended for testing purposes.
-  absl::optional<int> deceleration_target_level_offset_ms() const {
-    return deceleration_target_level_offset_ms_;
-  }
-
   // These accessors are only intended for testing purposes.
   HistogramMode histogram_mode() const { return histogram_mode_; }
   int histogram_quantile() const { return histogram_quantile_; }
@@ -204,11 +199,6 @@
   };
   std::deque<PacketDelay> delay_history_;
 
-  // When current buffer level is more than
-  // |deceleration_target_level_offset_ms_| below the target level, NetEq will
-  // impose deceleration to increase the buffer level. The value is in Q8, and
-  // measured in milliseconds.
-  const absl::optional<int> deceleration_target_level_offset_ms_;
   const absl::optional<int> extra_delay_ms_;
 
   RTC_DISALLOW_COPY_AND_ASSIGN(DelayManager);
diff --git a/modules/audio_coding/neteq/delay_manager_unittest.cc b/modules/audio_coding/neteq/delay_manager_unittest.cc
index beb61b0..6979789 100644
--- a/modules/audio_coding/neteq/delay_manager_unittest.cc
+++ b/modules/audio_coding/neteq/delay_manager_unittest.cc
@@ -594,54 +594,17 @@
   InsertNextPacket();
 }
 
-TEST_F(DelayManagerTest, DecelerationTargetLevelOffsetFieldTrial) {
-  {
-    test::ScopedFieldTrials field_trial(
-        "WebRTC-Audio-NetEqDecelerationTargetLevelOffset/Enabled-105/");
-    RecreateDelayManager();
-    EXPECT_EQ(dm_->deceleration_target_level_offset_ms().value(), 105 << 8);
-  }
-  {
-    // Negative number.
-    test::ScopedFieldTrials field_trial(
-        "WebRTC-Audio-NetEqDecelerationTargetLevelOffset/Enabled--105/");
-    RecreateDelayManager();
-    EXPECT_FALSE(dm_->deceleration_target_level_offset_ms().has_value());
-  }
-  {
-    // Disabled.
-    test::ScopedFieldTrials field_trial(
-        "WebRTC-Audio-NetEqDecelerationTargetLevelOffset/Disabled/");
-    RecreateDelayManager();
-    EXPECT_FALSE(dm_->deceleration_target_level_offset_ms().has_value());
-  }
-  {
-    // Float number.
-    test::ScopedFieldTrials field_trial(
-        "WebRTC-Audio-NetEqDecelerationTargetLevelOffset/Enabled-105.5/");
-    RecreateDelayManager();
-    EXPECT_EQ(dm_->deceleration_target_level_offset_ms().value(), 105 << 8);
-  }
-  {
-    // Several numbers.
-    test::ScopedFieldTrials field_trial(
-        "WebRTC-Audio-NetEqDecelerationTargetLevelOffset/Enabled-20-40/");
-    RecreateDelayManager();
-    EXPECT_EQ(dm_->deceleration_target_level_offset_ms().value(), 20 << 8);
-  }
-}
-
 TEST_F(DelayManagerTest, DecelerationTargetLevelOffset) {
-  // Border value where 1/4 target buffer level meets
-  // WebRTC-Audio-NetEqDecelerationTargetLevelOffset.
-  constexpr int kBoarderTargetLevel = 100 * 4;
+  SetPacketAudioLength(kFrameSizeMs);
+
+  // Deceleration target level offset follows the value hardcoded in
+  // delay_manager.cc.
+  constexpr int kDecelerationTargetLevelOffsetMs = 85 << 8;  // In Q8.
+  // Border value where |x * 3/4 = target_level - x|.
+  constexpr int kBoarderTargetLevel = kDecelerationTargetLevelOffsetMs * 4;
   {
     // Test that for a low target level, default behaviour is intact.
-    test::ScopedFieldTrials field_trial(
-        "WebRTC-Audio-NetEqDecelerationTargetLevelOffset/Enabled-100/");
-    const int target_level_ms = ((kBoarderTargetLevel - 1) << 8) / kFrameSizeMs;
-    RecreateDelayManager();
-    SetPacketAudioLength(kFrameSizeMs);
+    const int target_level_ms = kBoarderTargetLevel / kFrameSizeMs - 1;
 
     int lower, higher;  // In Q8.
     dm_->BufferLimits(target_level_ms, &lower, &higher);
@@ -653,32 +616,14 @@
 
   {
     // Test that for the high target level, |lower| is below target level by
-    // fixed constant (100 ms in this Field Trial setup).
-    test::ScopedFieldTrials field_trial(
-        "WebRTC-Audio-NetEqDecelerationTargetLevelOffset/Enabled-100/");
-    const int target_level_ms = ((kBoarderTargetLevel + 1) << 8) / kFrameSizeMs;
-    RecreateDelayManager();
-    SetPacketAudioLength(kFrameSizeMs);
+    // fixed |kOffset|.
+    const int target_level_ms = kBoarderTargetLevel / kFrameSizeMs + 1;
 
     int lower, higher;  // In Q8.
     dm_->BufferLimits(target_level_ms, &lower, &higher);
 
-    EXPECT_EQ(target_level_ms - ((100 << 8) / kFrameSizeMs), lower);
-    EXPECT_EQ(target_level_ms, higher);
-  }
-
-  {
-    // Test that for the high target level, without Field Trial the behaviour
-    // will remain the same.
-    const int target_level_ms = ((kBoarderTargetLevel + 1) << 8) / kFrameSizeMs;
-    RecreateDelayManager();
-    SetPacketAudioLength(kFrameSizeMs);
-
-    int lower, higher;  // In Q8.
-    dm_->BufferLimits(target_level_ms, &lower, &higher);
-
-    // Default behaviour of taking 75% of target level.
-    EXPECT_EQ(target_level_ms * 3 / 4, lower);
+    EXPECT_EQ(target_level_ms - kDecelerationTargetLevelOffsetMs / kFrameSizeMs,
+              lower);
     EXPECT_EQ(target_level_ms, higher);
   }
 }