Removes new delay based rate controller.

Will focus on delivering model based controller instead.

Bug: webrtc:9718
Change-Id: I5df82424469c577f3c170758e0db64e3e1aa7705
Reviewed-on: https://webrtc-review.googlesource.com/c/120607
Reviewed-by: Christoffer Rodbro <crodbro@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26478}
diff --git a/modules/congestion_controller/goog_cc/BUILD.gn b/modules/congestion_controller/goog_cc/BUILD.gn
index 9326f86..cb09ff5 100644
--- a/modules/congestion_controller/goog_cc/BUILD.gn
+++ b/modules/congestion_controller/goog_cc/BUILD.gn
@@ -26,7 +26,6 @@
   deps = [
     ":alr_detector",
     ":delay_based_bwe",
-    ":delay_based_rate_controller",
     ":estimators",
     ":probe_controller",
     ":pushback_controller",
@@ -134,30 +133,6 @@
   ]
 }
 
-rtc_source_set("delay_based_rate_controller") {
-  configs += [ ":bwe_test_logging" ]
-  sources = [
-    "delay_based_rate_controller.cc",
-    "delay_based_rate_controller.h",
-    "packet_grouping.cc",
-    "packet_grouping.h",
-  ]
-  deps = [
-    ":estimators",
-    ":link_capacity_estimator",
-    "../../../api/transport:network_control",
-    "../../../api/transport:webrtc_key_value_config",
-    "../../../logging:rtc_event_bwe",
-    "../../../logging:rtc_event_log_api",
-    "../../../rtc_base:checks",
-    "../../../rtc_base:rtc_base_approved",
-    "../../../rtc_base/experiments:field_trial_parser",
-    "../../../system_wrappers:metrics",
-    "//third_party/abseil-cpp/absl/memory",
-    "//third_party/abseil-cpp/absl/types:optional",
-  ]
-}
-
 rtc_source_set("delay_based_bwe") {
   configs += [ ":bwe_test_logging" ]
   sources = [
diff --git a/modules/congestion_controller/goog_cc/delay_based_rate_controller.cc b/modules/congestion_controller/goog_cc/delay_based_rate_controller.cc
deleted file mode 100644
index 3f0ff45..0000000
--- a/modules/congestion_controller/goog_cc/delay_based_rate_controller.cc
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-#include "modules/congestion_controller/goog_cc/delay_based_rate_controller.h"
-
-#include <algorithm>
-#include <cmath>
-
-#include "absl/memory/memory.h"
-#include "logging/rtc_event_log/events/rtc_event_bwe_update_delay_based.h"
-
-namespace webrtc {
-namespace {
-// Parameters for linear least squares fit of regression line to noisy data.
-constexpr size_t kDefaultTrendlineWindowSize = 20;
-constexpr double kDefaultTrendlineSmoothingCoeff = 0.9;
-constexpr double kDefaultTrendlineThresholdGain = 4.0;
-
-}  // namespace
-
-DelayBasedRateControllerConfig::DelayBasedRateControllerConfig(
-    const WebRtcKeyValueConfig* key_value_config)
-    : enabled("Enabled"),
-      no_ack_backoff_fraction("no_ack_frac", 0.8),
-      no_ack_backoff_interval("no_ack_int", TimeDelta::ms(1000)),
-      ack_backoff_fraction("ack_dec", 0.90),
-      probe_backoff_fraction("probe_dec", 0.85),
-      initial_increase_rate("probe_inc", 0.03),
-      increase_rate("inc", 0.01),
-      first_period_increase_rate("min_step", DataRate::kbps(5)),
-      stop_increase_after("stop", TimeDelta::ms(500)),
-      min_increase_interval("int", TimeDelta::ms(100)),
-      linear_increase_threshold("cut", DataRate::kbps(300)),
-      reference_duration_offset("dur_offs", TimeDelta::ms(100)) {
-  ParseFieldTrial(
-      {&enabled, &no_ack_backoff_fraction, &no_ack_backoff_interval,
-       &ack_backoff_fraction, &probe_backoff_fraction, &initial_increase_rate,
-       &increase_rate, &stop_increase_after, &min_increase_interval,
-       &first_period_increase_rate, &linear_increase_threshold,
-       &reference_duration_offset},
-      key_value_config->Lookup("WebRTC-Bwe-DelayBasedRateController"));
-}
-DelayBasedRateControllerConfig::~DelayBasedRateControllerConfig() = default;
-
-DelayBasedRateController::DelayBasedRateController(
-    const WebRtcKeyValueConfig* key_value_config,
-    RtcEventLog* event_log,
-    TargetRateConstraints constraints)
-    : conf_(key_value_config),
-      event_log_(event_log),
-      overuse_detector_(new TrendlineEstimator(kDefaultTrendlineWindowSize,
-                                               kDefaultTrendlineSmoothingCoeff,
-                                               kDefaultTrendlineThresholdGain)),
-      target_rate_(constraints.starting_rate.value()) {
-  UpdateConstraints(constraints);
-  MaybeLog();
-}
-
-DelayBasedRateController::~DelayBasedRateController() = default;
-
-void DelayBasedRateController::OnRouteChange() {
-  packet_grouper_.Reset();
-  link_capacity_.Reset();
-  overuse_detector_.reset(new TrendlineEstimator(
-      kDefaultTrendlineWindowSize, kDefaultTrendlineSmoothingCoeff,
-      kDefaultTrendlineThresholdGain));
-  logged_state_.reset();
-}
-
-void DelayBasedRateController::UpdateConstraints(TargetRateConstraints msg) {
-  if (msg.min_data_rate)
-    min_rate_ = *msg.min_data_rate;
-  if (msg.max_data_rate)
-    max_rate_ = *msg.max_data_rate;
-  if (msg.starting_rate)
-    target_rate_ = *msg.starting_rate;
-  target_rate_.Clamp(min_rate_, max_rate_);
-}
-
-void DelayBasedRateController::SetAcknowledgedRate(DataRate acknowledged_rate) {
-  acknowledged_rate_ = acknowledged_rate;
-  if (acknowledged_rate > link_capacity_.UpperBound())
-    link_capacity_.Reset();
-}
-
-void DelayBasedRateController::OnTransportPacketsFeedback(
-    TransportPacketsFeedback msg,
-    absl::optional<DataRate> probe_bitrate) {
-  auto packets = msg.ReceivedWithSendInfo();
-
-  last_rtt_ = msg.feedback_time - packets.back().sent_packet.send_time;
-  first_unacked_send_ = msg.first_unacked_send_time;
-
-  for (auto& packet : packets) {
-    packet_grouper_.AddPacketInfo(packet, msg.feedback_time);
-  }
-
-  for (auto& delta : packet_grouper_.PopDeltas()) {
-    overuse_detector_->Update(delta.receive.ms<double>(),
-                              delta.send.ms<double>(), delta.receive_time.ms());
-  }
-
-  BandwidthUsage usage = overuse_detector_->State();
-  Timestamp at_time = msg.feedback_time;
-  last_feedback_update_ = at_time;
-  if (probe_bitrate) {
-    if (!acknowledged_rate_)
-      acknowledged_rate_ = *probe_bitrate;
-    target_rate_ = *probe_bitrate * conf_.probe_backoff_fraction;
-    increase_reference_ = target_rate_;
-    link_capacity_.OnProbeRate(*probe_bitrate);
-  }
-
-  if (usage == BandwidthUsage::kBwNormal) {
-    if (!increasing_state_) {
-      increasing_state_ = true;
-      // Offset the next increase time by one RTT to avoid increasing too soon
-      // after overuse.
-      last_increase_update_ = at_time + last_rtt_;
-      accumulated_duration_ = 0;
-      increase_reference_ = target_rate_;
-    }
-  } else if (usage == BandwidthUsage::kBwOverusing && !probe_bitrate) {
-    increasing_state_ = false;
-    if (!acknowledged_rate_ &&
-        at_time - last_no_ack_backoff_ >= conf_.no_ack_backoff_interval) {
-      // Until we recieve out first acknowledged rate, we back of from the
-      // target rate, but pace the backoffs to avoid dropping the rate too fast.
-      last_no_ack_backoff_ = at_time;
-      target_rate_ = target_rate_ * conf_.no_ack_backoff_fraction;
-    } else if (acknowledged_rate_) {
-      if (acknowledged_rate_ < link_capacity_.LowerBound())
-        link_capacity_.Reset();
-      link_capacity_.OnOveruseDetected(*acknowledged_rate_);
-      target_rate_ = acknowledged_rate_.value() * conf_.ack_backoff_fraction;
-    }
-    target_rate_.Clamp(min_rate_, max_rate_);
-  }
-  MaybeLog();
-}
-
-void DelayBasedRateController::OnFeedbackUpdate(
-    BandwidthUsage usage,
-    absl::optional<DataRate> probe_bitrate,
-    Timestamp at_time) {}
-
-void DelayBasedRateController::OnTimeUpdate(Timestamp at_time) {
-  if (!increasing_state_ ||
-      at_time < last_increase_update_ + conf_.min_increase_interval)
-    return;
-  TimeDelta time_span = at_time - last_increase_update_;
-  last_increase_update_ = at_time;
-
-  if (at_time > last_feedback_update_ + conf_.stop_increase_after)
-    return;
-
-  TimeDelta rtt_lower_bound =
-      std::max(last_rtt_, at_time - first_unacked_send_);
-  TimeDelta reference_span = rtt_lower_bound + conf_.reference_duration_offset;
-  accumulated_duration_ += time_span / reference_span;
-  if (link_capacity_.has_estimate() &&
-      increase_reference_ > conf_.linear_increase_threshold) {
-    DataRate linear_increase_rate =
-        conf_.increase_rate.Get() * conf_.linear_increase_threshold.Get();
-    DataRate increase_amount = accumulated_duration_ * linear_increase_rate;
-    target_rate_ = increase_reference_ + increase_amount;
-  } else {
-    double increase_rate = link_capacity_.has_estimate()
-                               ? conf_.initial_increase_rate
-                               : conf_.increase_rate;
-    double increase_factor = 1 + increase_rate;
-    double increase_amount = pow(increase_factor, accumulated_duration_);
-    target_rate_ = increase_reference_ * increase_amount;
-  }
-  target_rate_.Clamp(min_rate_, max_rate_);
-  MaybeLog();
-}
-
-void DelayBasedRateController::OnRemoteBitrateControl(RemoteBitrateReport msg) {
-  target_rate_ = msg.bandwidth;
-  increasing_state_ = false;
-}
-
-TimeDelta DelayBasedRateController::GetExpectedBandwidthPeriod() const {
-  double expected_overuse = 0.05;
-  double bandwidth_cycle_max_min_ratio =
-      1 / conf_.ack_backoff_fraction + expected_overuse;
-  TimeDelta reference_span = last_rtt_ + conf_.reference_duration_offset;
-  TimeDelta period = reference_span * log(bandwidth_cycle_max_min_ratio) /
-                     log(1 + conf_.increase_rate);
-  return period.Clamped(TimeDelta::seconds(1), TimeDelta::seconds(20));
-}
-
-DataRate DelayBasedRateController::target_rate() const {
-  return target_rate_;
-}
-
-bool DelayBasedRateController::in_underuse() const {
-  return overuse_detector_->State() == BandwidthUsage::kBwUnderusing;
-}
-
-void DelayBasedRateController::MaybeLog() {
-  if (event_log_ && (logged_target_ != target_rate_ ||
-                     logged_state_ != overuse_detector_->State())) {
-    event_log_->Log(absl::make_unique<RtcEventBweUpdateDelayBased>(
-        target_rate_.bps(), overuse_detector_->State()));
-    logged_state_ = overuse_detector_->State();
-    logged_target_ = target_rate_;
-  }
-}
-
-}  // namespace webrtc
diff --git a/modules/congestion_controller/goog_cc/delay_based_rate_controller.h b/modules/congestion_controller/goog_cc/delay_based_rate_controller.h
deleted file mode 100644
index 21932d2..0000000
--- a/modules/congestion_controller/goog_cc/delay_based_rate_controller.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-#ifndef MODULES_CONGESTION_CONTROLLER_GOOG_CC_DELAY_BASED_RATE_CONTROLLER_H_
-#define MODULES_CONGESTION_CONTROLLER_GOOG_CC_DELAY_BASED_RATE_CONTROLLER_H_
-
-#include <memory>
-
-#include "absl/types/optional.h"
-#include "api/transport/network_types.h"
-#include "api/transport/webrtc_key_value_config.h"
-#include "logging/rtc_event_log/rtc_event_log.h"
-#include "modules/congestion_controller/goog_cc/link_capacity_estimator.h"
-#include "modules/congestion_controller/goog_cc/packet_grouping.h"
-#include "modules/congestion_controller/goog_cc/trendline_estimator.h"
-#include "rtc_base/experiments/field_trial_parser.h"
-#include "rtc_base/experiments/field_trial_units.h"
-
-namespace webrtc {
-struct DelayBasedRateControllerConfig {
-  FieldTrialFlag enabled;
-  FieldTrialParameter<double> no_ack_backoff_fraction;
-  FieldTrialParameter<TimeDelta> no_ack_backoff_interval;
-  FieldTrialParameter<double> ack_backoff_fraction;
-  FieldTrialParameter<double> probe_backoff_fraction;
-  FieldTrialParameter<double> initial_increase_rate;
-  FieldTrialParameter<double> increase_rate;
-  FieldTrialParameter<DataRate> first_period_increase_rate;
-  FieldTrialParameter<TimeDelta> stop_increase_after;
-  FieldTrialParameter<TimeDelta> min_increase_interval;
-  FieldTrialParameter<DataRate> linear_increase_threshold;
-  FieldTrialParameter<TimeDelta> reference_duration_offset;
-  explicit DelayBasedRateControllerConfig(
-      const WebRtcKeyValueConfig* key_value_config);
-  ~DelayBasedRateControllerConfig();
-};
-
-// Rate controller for GoogCC, increases the target rate based on a
-// fixed increase interval and an RTT dependent increase rate.
-class DelayBasedRateController {
- public:
-  DelayBasedRateController(const WebRtcKeyValueConfig* key_value_config,
-                           RtcEventLog* event_log,
-                           TargetRateConstraints constraints);
-  ~DelayBasedRateController();
-  void OnRouteChange();
-  void UpdateConstraints(TargetRateConstraints constraints);
-  void SetAcknowledgedRate(DataRate acknowledged_rate);
-  void OnTransportPacketsFeedback(TransportPacketsFeedback msg,
-                                  absl::optional<DataRate> probe_bitrate);
-  void OnTimeUpdate(Timestamp at_time);
-  void OnRemoteBitrateControl(RemoteBitrateReport msg);
-  TimeDelta GetExpectedBandwidthPeriod() const;
-
-  bool Enabled() const { return conf_.enabled; }
-  DataRate target_rate() const;
-  bool in_underuse() const;
-
- private:
-  enum class ControllerSate { kHold, kExponentialIncrease, kLinearIncrease };
-  friend class GoogCcStatePrinter;
-  void OnFeedbackUpdate(BandwidthUsage usage,
-                        absl::optional<DataRate> probe_bitrate,
-                        Timestamp at_time);
-  void MaybeLog();
-  const DelayBasedRateControllerConfig conf_;
-  RtcEventLog* event_log_;
-
-  PacketDelayGrouper packet_grouper_;
-  std::unique_ptr<TrendlineEstimator> overuse_detector_;
-  LinkCapacityEstimator link_capacity_;
-
-  DataRate min_rate_ = DataRate::Zero();
-  DataRate max_rate_ = DataRate::Infinity();
-
-  absl::optional<DataRate> acknowledged_rate_;
-  TimeDelta last_rtt_ = TimeDelta::seconds(1);
-  Timestamp first_unacked_send_ = Timestamp::PlusInfinity();
-  Timestamp last_feedback_update_ = Timestamp::MinusInfinity();
-
-  DataRate target_rate_;
-
-  Timestamp last_no_ack_backoff_ = Timestamp::MinusInfinity();
-  bool increasing_state_ = false;
-  double accumulated_duration_ = 0;
-  Timestamp last_increase_update_ = Timestamp::PlusInfinity();
-  DataRate increase_reference_ = DataRate::PlusInfinity();
-
-  absl::optional<BandwidthUsage> logged_state_;
-  DataRate logged_target_ = DataRate::PlusInfinity();
-};
-}  // namespace webrtc
-
-#endif  // MODULES_CONGESTION_CONTROLLER_GOOG_CC_DELAY_BASED_RATE_CONTROLLER_H_
diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control.cc b/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
index f0532f0..7f188e6 100644
--- a/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
+++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
@@ -114,18 +114,7 @@
           absl::make_unique<SendSideBandwidthEstimation>(event_log_)),
       alr_detector_(absl::make_unique<AlrDetector>()),
       probe_bitrate_estimator_(new ProbeBitrateEstimator(event_log)),
-      use_new_delay_based_controller_(
-          key_value_config_->Lookup("WebRTC-Bwe-DelayBasedRateController")
-              .find("Enabled") == 0),
-      delay_based_bwe_(use_new_delay_based_controller_
-                           ? nullptr
-                           : new DelayBasedBwe(key_value_config_, event_log_)),
-      delay_based_controller_(
-          use_new_delay_based_controller_
-              ? new DelayBasedRateController(key_value_config_,
-                                             event_log_,
-                                             config.constraints)
-              : nullptr),
+      delay_based_bwe_(new DelayBasedBwe(key_value_config_, event_log_)),
       acknowledged_bitrate_estimator_(
           absl::make_unique<AcknowledgedBitrateEstimator>(key_value_config_)),
       initial_config_(config),
@@ -188,16 +177,13 @@
   acknowledged_bitrate_estimator_.reset(
       new AcknowledgedBitrateEstimator(key_value_config_));
   probe_bitrate_estimator_.reset(new ProbeBitrateEstimator(event_log_));
-  if (delay_based_bwe_) {
+
     delay_based_bwe_.reset(new DelayBasedBwe(key_value_config_, event_log_));
     if (msg.constraints.starting_rate)
       delay_based_bwe_->SetStartBitrate(*msg.constraints.starting_rate);
     // TODO(srte): Use original values instead of converted.
     delay_based_bwe_->SetMinBitrate(DataRate::bps(min_bitrate_bps));
-  } else {
-    delay_based_controller_->UpdateConstraints(msg.constraints);
-    delay_based_controller_->OnRouteChange();
-  }
+
   bandwidth_estimation_->OnRouteChange();
   bandwidth_estimation_->SetBitrates(
       msg.constraints.starting_rate, DataRate::bps(min_bitrate_bps),
@@ -237,11 +223,6 @@
     }
     initial_config_.reset();
   }
-  if (delay_based_controller_) {
-    delay_based_controller_->OnTimeUpdate(msg.at_time);
-    bandwidth_estimation_->UpdateDelayBasedEstimate(
-        msg.at_time, delay_based_controller_->target_rate());
-  }
   if (congestion_window_pushback_controller_ && msg.pacer_queue) {
     congestion_window_pushback_controller_->UpdatePacingQueue(
         msg.pacer_queue->bytes());
@@ -265,8 +246,6 @@
     RTC_LOG(LS_ERROR) << "Received REMB for packet feedback only GoogCC";
     return NetworkControlUpdate();
   }
-  if (delay_based_controller_)
-    delay_based_controller_->OnRemoteBitrateControl(msg);
   bandwidth_estimation_->UpdateReceiverEstimate(msg.receive_time,
                                                 msg.bandwidth);
   BWE_TEST_LOGGING_PLOT(1, "REMB_kbps", msg.receive_time.ms(),
@@ -372,13 +351,9 @@
       starting_rate, DataRate::bps(min_bitrate_bps),
       constraints.max_data_rate.value_or(DataRate::Infinity()),
       constraints.at_time);
-  if (delay_based_bwe_) {
     if (starting_rate)
       delay_based_bwe_->SetStartBitrate(*starting_rate);
     delay_based_bwe_->SetMinBitrate(DataRate::bps(min_bitrate_bps));
-  } else {
-    delay_based_controller_->UpdateConstraints(constraints);
-  }
   return probes;
 }
 
@@ -500,42 +475,27 @@
   NetworkControlUpdate update;
   bool recovered_from_overuse = false;
   bool backoff_in_alr = false;
-  // TODO(srte): Add support for ALR backoff trial in the new rate controller.
-  if (delay_based_controller_) {
-    if (acknowledged_bitrate)
-      delay_based_controller_->SetAcknowledgedRate(*acknowledged_bitrate);
-    bool prior_underuse = delay_based_controller_->in_underuse();
-    delay_based_controller_->OnTransportPacketsFeedback(report, probe_bitrate);
-    recovered_from_overuse =
-        prior_underuse && !delay_based_controller_->in_underuse();
-    if (probe_bitrate) {
-      bandwidth_estimation_->SetSendBitrate(
-          delay_based_controller_->target_rate(), report.feedback_time);
-    }
-    bandwidth_estimation_->UpdateDelayBasedEstimate(
-        report.feedback_time, delay_based_controller_->target_rate());
-    MaybeTriggerOnNetworkChanged(&update, report.feedback_time);
-  } else {
-    DelayBasedBwe::Result result;
-    result = delay_based_bwe_->IncomingPacketFeedbackVector(
-        received_feedback_vector, acknowledged_bitrate, probe_bitrate,
-        alr_start_time.has_value(), report.feedback_time);
 
-    if (result.updated) {
-      if (result.probe) {
-        bandwidth_estimation_->SetSendBitrate(result.target_bitrate,
-                                              report.feedback_time);
-      }
-      // Since SetSendBitrate now resets the delay-based estimate, we have to
-      // call UpdateDelayBasedEstimate after SetSendBitrate.
-      bandwidth_estimation_->UpdateDelayBasedEstimate(report.feedback_time,
-                                                      result.target_bitrate);
-      // Update the estimate in the ProbeController, in case we want to probe.
-      MaybeTriggerOnNetworkChanged(&update, report.feedback_time);
+  DelayBasedBwe::Result result;
+  result = delay_based_bwe_->IncomingPacketFeedbackVector(
+      received_feedback_vector, acknowledged_bitrate, probe_bitrate,
+      alr_start_time.has_value(), report.feedback_time);
+
+  if (result.updated) {
+    if (result.probe) {
+      bandwidth_estimation_->SetSendBitrate(result.target_bitrate,
+                                            report.feedback_time);
     }
-    recovered_from_overuse = result.recovered_from_overuse;
-    backoff_in_alr = result.backoff_in_alr;
+    // Since SetSendBitrate now resets the delay-based estimate, we have to
+    // call UpdateDelayBasedEstimate after SetSendBitrate.
+    bandwidth_estimation_->UpdateDelayBasedEstimate(report.feedback_time,
+                                                    result.target_bitrate);
+    // Update the estimate in the ProbeController, in case we want to probe.
+    MaybeTriggerOnNetworkChanged(&update, report.feedback_time);
   }
+  recovered_from_overuse = result.recovered_from_overuse;
+  backoff_in_alr = result.backoff_in_alr;
+
   if (recovered_from_overuse) {
     probe_controller_->SetAlrStartTimeMs(alr_start_time);
     auto probes = probe_controller_->RequestProbe(report.feedback_time.ms());
@@ -592,8 +552,7 @@
       last_estimated_fraction_loss_ / 255.0;
   update.target_rate->network_estimate.round_trip_time = rtt;
   update.target_rate->network_estimate.bwe_period =
-      delay_based_bwe_ ? delay_based_bwe_->GetExpectedBwePeriod()
-                       : delay_based_controller_->GetExpectedBandwidthPeriod();
+      delay_based_bwe_->GetExpectedBwePeriod();
 
   update.target_rate->at_time = at_time;
   update.target_rate->target_rate = bandwidth;
@@ -647,10 +606,7 @@
                              ? bandwidth_estimation_->GetEstimatedLinkCapacity()
                              : last_raw_target_rate_;
 
-    TimeDelta bwe_period =
-        delay_based_bwe_
-            ? delay_based_bwe_->GetExpectedBwePeriod()
-            : delay_based_controller_->GetExpectedBandwidthPeriod();
+    TimeDelta bwe_period = delay_based_bwe_->GetExpectedBwePeriod();
 
     TargetTransferRate target_rate_msg;
     target_rate_msg.at_time = at_time;
diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control.h b/modules/congestion_controller/goog_cc/goog_cc_network_control.h
index 44de8b7..38a70ec 100644
--- a/modules/congestion_controller/goog_cc/goog_cc_network_control.h
+++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.h
@@ -30,7 +30,6 @@
 #include "modules/congestion_controller/goog_cc/alr_detector.h"
 #include "modules/congestion_controller/goog_cc/congestion_window_pushback_controller.h"
 #include "modules/congestion_controller/goog_cc/delay_based_bwe.h"
-#include "modules/congestion_controller/goog_cc/delay_based_rate_controller.h"
 #include "modules/congestion_controller/goog_cc/probe_controller.h"
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/experiments/field_trial_parser.h"
@@ -88,9 +87,7 @@
   std::unique_ptr<SendSideBandwidthEstimation> bandwidth_estimation_;
   std::unique_ptr<AlrDetector> alr_detector_;
   std::unique_ptr<ProbeBitrateEstimator> probe_bitrate_estimator_;
-  const bool use_new_delay_based_controller_;
   std::unique_ptr<DelayBasedBwe> delay_based_bwe_;
-  std::unique_ptr<DelayBasedRateController> delay_based_controller_;
   std::unique_ptr<AcknowledgedBitrateEstimator> acknowledged_bitrate_estimator_;
 
   absl::optional<NetworkControllerConfig> initial_config_;
diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc b/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc
index 646e73f..a8dd865 100644
--- a/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc
+++ b/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc
@@ -446,11 +446,6 @@
   UpdatesTargetRateBasedOnLinkCapacity("_loss_based");
 }
 
-TEST_F(GoogCcNetworkControllerTest, DelayBasedRateControlRegressionTest) {
-  ScopedFieldTrials trial("WebRTC-Bwe-DelayBasedRateController/Enabled/");
-  UpdatesTargetRateBasedOnLinkCapacity("_delay_based");
-}
-
 TEST_F(GoogCcNetworkControllerTest,
        LossBasedControlDoesModestBackoffToHighLoss) {
   ScopedFieldTrials trial("WebRTC-Bwe-LossBasedControl/Enabled/");
diff --git a/modules/congestion_controller/goog_cc/packet_grouping.cc b/modules/congestion_controller/goog_cc/packet_grouping.cc
deleted file mode 100644
index 0ed6f79..0000000
--- a/modules/congestion_controller/goog_cc/packet_grouping.cc
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-#include "modules/congestion_controller/goog_cc/packet_grouping.h"
-
-#include <algorithm>
-
-#include "rtc_base/checks.h"
-#include "rtc_base/logging.h"
-
-namespace webrtc {
-namespace {
-constexpr TimeDelta kMaxSendTimeGroupDuration = TimeDelta::Millis<5>();
-constexpr TimeDelta kMaxReceiveTimeBurstDelta = TimeDelta::Millis<5>();
-constexpr TimeDelta kMaxReceiveTimeBurstDuration = TimeDelta::Millis<100>();
-constexpr TimeDelta kReceiveTimeOffsetThreshold = TimeDelta::Millis<3000>();
-constexpr int kReorderedResetThreshold = 3;
-}  // namespace
-
-PacketDelayGroup::PacketDelayGroup(PacketResult packet, Timestamp feedback_time)
-    : first_send_time(packet.sent_packet.send_time),
-      last_send_time(packet.sent_packet.send_time),
-      first_receive_time(packet.receive_time),
-      last_receive_time(packet.receive_time),
-      last_feedback_time(feedback_time) {}
-
-PacketDelayGroup::~PacketDelayGroup() = default;
-PacketDelayGroup::PacketDelayGroup(const PacketDelayGroup&) = default;
-
-void PacketDelayGroup::AddPacketInfo(PacketResult packet,
-                                     Timestamp feedback_time) {
-  last_send_time = std::max(last_send_time, packet.sent_packet.send_time);
-  first_receive_time = std::min(first_receive_time, packet.receive_time);
-  last_receive_time = std::max(last_receive_time, packet.receive_time);
-  last_feedback_time = std::max(last_feedback_time, feedback_time);
-}
-
-bool PacketDelayGroup::BelongsToGroup(PacketResult packet) const {
-  TimeDelta send_time_duration = packet.sent_packet.send_time - first_send_time;
-  return send_time_duration <= kMaxSendTimeGroupDuration;
-}
-
-bool PacketDelayGroup::BelongsToBurst(PacketResult packet) const {
-  TimeDelta send_time_delta = packet.sent_packet.send_time - first_send_time;
-  TimeDelta receive_time_delta = packet.receive_time - last_receive_time;
-  TimeDelta receive_time_duration = packet.receive_time - first_receive_time;
-  bool receiving_faster_than_sent = receive_time_delta < send_time_delta;
-  return receiving_faster_than_sent &&
-         receive_time_delta <= kMaxReceiveTimeBurstDelta &&
-         receive_time_duration <= kMaxReceiveTimeBurstDuration;
-}
-
-PacketDelayGrouper::PacketDelayGrouper() = default;
-
-PacketDelayGrouper::~PacketDelayGrouper() = default;
-
-void PacketDelayGrouper::AddPacketInfo(PacketResult packet,
-                                       Timestamp feedback_time) {
-  if (packet_groups_.empty()) {
-    packet_groups_.emplace_back(packet, feedback_time);
-  } else if (packet.sent_packet.send_time >=
-             packet_groups_.back().first_send_time) {
-    if (packet_groups_.back().BelongsToGroup(packet) ||
-        packet_groups_.back().BelongsToBurst(packet)) {
-      packet_groups_.back().AddPacketInfo(packet, feedback_time);
-    } else {
-      packet_groups_.emplace_back(packet, feedback_time);
-    }
-  }
-}
-
-std::vector<PacketDelayDelta> PacketDelayGrouper::PopDeltas() {
-  std::vector<PacketDelayDelta> deltas;
-  while (packet_groups_.size() >= 3) {
-    PacketDelayDelta delta;
-    delta.receive_time = packet_groups_[1].last_receive_time;
-    delta.send =
-        packet_groups_[1].last_send_time - packet_groups_[0].last_send_time;
-    delta.receive = packet_groups_[1].last_receive_time -
-                    packet_groups_[0].last_receive_time;
-    delta.feedback = packet_groups_[1].last_feedback_time -
-                     packet_groups_[0].last_feedback_time;
-    packet_groups_.pop_front();
-
-    if (delta.receive - delta.feedback >= kReceiveTimeOffsetThreshold) {
-      RTC_LOG(LS_WARNING) << "The receive clock offset has changed (diff = "
-                          << ToString(delta.receive - delta.feedback)
-                          << "), resetting.";
-      packet_groups_.pop_front();
-    } else if (delta.receive < TimeDelta::Zero()) {
-      ++num_consecutive_reordered_packets_;
-      if (num_consecutive_reordered_packets_ >= kReorderedResetThreshold) {
-        RTC_LOG(LS_WARNING) << "Decreasing receive time in multiple "
-                               "consecutive packet groups, resetting";
-        packet_groups_.pop_front();
-      }
-    } else {
-      num_consecutive_reordered_packets_ = 0;
-      deltas.push_back(delta);
-    }
-  }
-  return deltas;
-}
-
-}  // namespace webrtc
diff --git a/modules/congestion_controller/goog_cc/packet_grouping.h b/modules/congestion_controller/goog_cc/packet_grouping.h
deleted file mode 100644
index b34ae84..0000000
--- a/modules/congestion_controller/goog_cc/packet_grouping.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-#ifndef MODULES_CONGESTION_CONTROLLER_GOOG_CC_PACKET_GROUPING_H_
-#define MODULES_CONGESTION_CONTROLLER_GOOG_CC_PACKET_GROUPING_H_
-
-#include <deque>
-#include <vector>
-
-#include "api/transport/network_control.h"
-
-namespace webrtc {
-struct PacketDelayGroup {
-  explicit PacketDelayGroup(PacketResult packet, Timestamp feedback_time);
-
-  PacketDelayGroup(const PacketDelayGroup&);
-  ~PacketDelayGroup();
-  void AddPacketInfo(PacketResult packet, Timestamp feedback_time);
-  bool BelongsToGroup(PacketResult packet) const;
-  bool BelongsToBurst(PacketResult packet) const;
-
-  Timestamp first_send_time;
-  Timestamp last_send_time;
-
-  Timestamp first_receive_time;
-  Timestamp last_receive_time;
-  Timestamp last_feedback_time;
-};
-
-struct PacketDelayDelta {
-  Timestamp receive_time = Timestamp::PlusInfinity();
-  TimeDelta send = TimeDelta::Zero();
-  TimeDelta receive = TimeDelta::Zero();
-  TimeDelta feedback = TimeDelta::Zero();
-};
-
-class PacketDelayGrouper {
- public:
-  PacketDelayGrouper();
-  ~PacketDelayGrouper();
-  void AddPacketInfo(PacketResult packet, Timestamp feedback_time);
-  std::vector<PacketDelayDelta> PopDeltas();
-  void Reset() { packet_groups_.clear(); }
-
- private:
-  std::deque<PacketDelayGroup> packet_groups_;
-  int num_consecutive_reordered_packets_ = 0;
-};
-
-}  // namespace webrtc
-
-#endif  // MODULES_CONGESTION_CONTROLLER_GOOG_CC_PACKET_GROUPING_H_