Delete LossBasedBweV1 since LossBasedBweV2 is per default enabled

Bug: webrtc:42222865
Change-Id: If0ca88d91473c15b2a704aca6eb96dd5c92cf3d5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/395960
Reviewed-by: Diep Bui <diepbp@webrtc.org>
Auto-Submit: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Diep Bui <diepbp@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44869}
diff --git a/experiments/field_trials.py b/experiments/field_trials.py
index ec83ca5..3f2fdbe 100755
--- a/experiments/field_trials.py
+++ b/experiments/field_trials.py
@@ -562,9 +562,6 @@
     FieldTrial('WebRTC-Bwe-LossBasedBweV2',
                42222865,
                date(2024, 4, 1)),
-    FieldTrial('WebRTC-Bwe-LossBasedControl',
-               NO_BUG,
-               date(2024, 4, 1)),
     FieldTrial('WebRTC-Bwe-MaxRttLimit',
                42234928,
                INDEFINITE),
@@ -911,7 +908,7 @@
 ])  # yapf: disable
 
 POLICY_EXEMPT_FIELD_TRIALS_DIGEST: str = \
-    '8e2640561e5ff33824da8ecf4f37b34eeaad92f3'
+    '6c73fd457a392cb370b8b8f5ec6f6215779fba01'
 
 REGISTERED_FIELD_TRIALS: FrozenSet[FieldTrial] = ACTIVE_FIELD_TRIALS.union(
     POLICY_EXEMPT_FIELD_TRIALS)
diff --git a/modules/congestion_controller/goog_cc/BUILD.gn b/modules/congestion_controller/goog_cc/BUILD.gn
index 77976b7..e1cd1c4 100644
--- a/modules/congestion_controller/goog_cc/BUILD.gn
+++ b/modules/congestion_controller/goog_cc/BUILD.gn
@@ -143,31 +143,12 @@
   ]
 }
 
-rtc_library("loss_based_bwe_v1") {
-  sources = [
-    "loss_based_bandwidth_estimation.cc",
-    "loss_based_bandwidth_estimation.h",
-  ]
-  deps = [
-    "../../../api:field_trials_view",
-    "../../../api/transport:network_control",
-    "../../../api/units:data_rate",
-    "../../../api/units:time_delta",
-    "../../../api/units:timestamp",
-    "../../../rtc_base:checks",
-    "../../../rtc_base/experiments:field_trial_parser",
-    "//third_party/abseil-cpp/absl/strings",
-    "//third_party/abseil-cpp/absl/strings:string_view",
-  ]
-}
-
 rtc_library("send_side_bwe") {
   sources = [
     "send_side_bandwidth_estimation.cc",
     "send_side_bandwidth_estimation.h",
   ]
   deps = [
-    ":loss_based_bwe_v1",
     ":loss_based_bwe_v2",
     "../../../api:field_trials_view",
     "../../../api/rtc_event_log",
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 53a171c..ea44c34 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
@@ -652,17 +652,9 @@
   EXPECT_GE(min_stable_target / max_stable_target, min_target / max_target);
 }
 
-TEST(GoogCcScenario, LossBasedControlUpdatesTargetRateBasedOnLinkCapacity) {
-  // TODO(srte): Should the behavior be unaffected at low loss rates?
-  UpdatesTargetRateBasedOnLinkCapacity(
-      /*test_name=*/"_loss_based",
-      /*field_trials=*/"WebRTC-Bwe-LossBasedControl/Enabled/");
-}
-
 TEST(GoogCcScenario, LossBasedControlDoesModestBackoffToHighLoss) {
   Scenario s("googcc_unit/high_loss_channel", false);
   CallClientConfig config;
-  config.field_trials.Set("WebRTC-Bwe-LossBasedControl", "Enabled");
   config.transport.rates.min_rate = DataRate::KilobitsPerSec(10);
   config.transport.rates.max_rate = DataRate::KilobitsPerSec(1500);
   config.transport.rates.start_rate = DataRate::KilobitsPerSec(300);
@@ -677,7 +669,6 @@
   auto* client = CreateVideoSendingClient(&s, config, {send_net}, {ret_net});
 
   s.RunFor(TimeDelta::Seconds(120));
-  // Without LossBasedControl trial, bandwidth drops to ~10 kbps.
   EXPECT_GT(client->target_rate().kbps(), 100);
 }
 
diff --git a/modules/congestion_controller/goog_cc/loss_based_bandwidth_estimation.cc b/modules/congestion_controller/goog_cc/loss_based_bandwidth_estimation.cc
deleted file mode 100644
index 08bd4b3..0000000
--- a/modules/congestion_controller/goog_cc/loss_based_bandwidth_estimation.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- *  Copyright (c) 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/loss_based_bandwidth_estimation.h"
-
-#include <algorithm>
-#include <cmath>
-#include <vector>
-
-#include "absl/strings/match.h"
-#include "absl/strings/string_view.h"
-#include "api/field_trials_view.h"
-#include "api/transport/network_types.h"
-#include "api/units/data_rate.h"
-#include "api/units/time_delta.h"
-#include "api/units/timestamp.h"
-#include "rtc_base/checks.h"
-#include "rtc_base/experiments/field_trial_parser.h"
-
-namespace webrtc {
-namespace {
-const char kBweLossBasedControl[] = "WebRTC-Bwe-LossBasedControl";
-
-// Expecting RTCP feedback to be sent with roughly 1s intervals, a 5s gap
-// indicates a channel outage.
-constexpr TimeDelta kMaxRtcpFeedbackInterval = TimeDelta::Millis(5000);
-
-// Increase slower when RTT is high.
-double GetIncreaseFactor(const LossBasedControlConfig& config, TimeDelta rtt) {
-  // Clamp the RTT
-  if (rtt < config.increase_low_rtt) {
-    rtt = config.increase_low_rtt;
-  } else if (rtt > config.increase_high_rtt) {
-    rtt = config.increase_high_rtt;
-  }
-  auto rtt_range = config.increase_high_rtt.Get() - config.increase_low_rtt;
-  if (rtt_range <= TimeDelta::Zero()) {
-    RTC_DCHECK_NOTREACHED();  // Only on misconfiguration.
-    return config.min_increase_factor;
-  }
-  auto rtt_offset = rtt - config.increase_low_rtt;
-  auto relative_offset = std::max(0.0, std::min(rtt_offset / rtt_range, 1.0));
-  auto factor_range = config.max_increase_factor - config.min_increase_factor;
-  return config.min_increase_factor + (1 - relative_offset) * factor_range;
-}
-
-double LossFromBitrate(DataRate bitrate,
-                       DataRate loss_bandwidth_balance,
-                       double exponent) {
-  if (loss_bandwidth_balance >= bitrate)
-    return 1.0;
-  return pow(loss_bandwidth_balance / bitrate, exponent);
-}
-
-DataRate BitrateFromLoss(double loss,
-                         DataRate loss_bandwidth_balance,
-                         double exponent) {
-  if (exponent <= 0) {
-    RTC_DCHECK_NOTREACHED();
-    return DataRate::Infinity();
-  }
-  if (loss < 1e-5)
-    return DataRate::Infinity();
-  return loss_bandwidth_balance * pow(loss, -1.0 / exponent);
-}
-
-double ExponentialUpdate(TimeDelta window, TimeDelta interval) {
-  // Use the convention that exponential window length (which is really
-  // infinite) is the time it takes to dampen to 1/e.
-  if (window <= TimeDelta::Zero()) {
-    RTC_DCHECK_NOTREACHED();
-    return 1.0f;
-  }
-  return 1.0f - exp(interval / window * -1.0);
-}
-
-bool IsEnabled(const FieldTrialsView& key_value_config,
-               absl::string_view name) {
-  return absl::StartsWith(key_value_config.Lookup(name), "Enabled");
-}
-
-}  // namespace
-
-LossBasedControlConfig::LossBasedControlConfig(
-    const FieldTrialsView* key_value_config)
-    : enabled(IsEnabled(*key_value_config, kBweLossBasedControl)),
-      min_increase_factor("min_incr", 1.02),
-      max_increase_factor("max_incr", 1.08),
-      increase_low_rtt("incr_low_rtt", TimeDelta::Millis(200)),
-      increase_high_rtt("incr_high_rtt", TimeDelta::Millis(800)),
-      decrease_factor("decr", 0.99),
-      loss_window("loss_win", TimeDelta::Millis(800)),
-      loss_max_window("loss_max_win", TimeDelta::Millis(800)),
-      acknowledged_rate_max_window("ackrate_max_win", TimeDelta::Millis(800)),
-      increase_offset("incr_offset", DataRate::BitsPerSec(1000)),
-      loss_bandwidth_balance_increase("balance_incr",
-                                      DataRate::KilobitsPerSec(0.5)),
-      loss_bandwidth_balance_decrease("balance_decr",
-                                      DataRate::KilobitsPerSec(4)),
-      loss_bandwidth_balance_reset("balance_reset",
-                                   DataRate::KilobitsPerSec(0.1)),
-      loss_bandwidth_balance_exponent("exponent", 0.5),
-      allow_resets("resets", false),
-      decrease_interval("decr_intvl", TimeDelta::Millis(300)),
-      loss_report_timeout("timeout", TimeDelta::Millis(6000)) {
-  ParseFieldTrial(
-      {&min_increase_factor, &max_increase_factor, &increase_low_rtt,
-       &increase_high_rtt, &decrease_factor, &loss_window, &loss_max_window,
-       &acknowledged_rate_max_window, &increase_offset,
-       &loss_bandwidth_balance_increase, &loss_bandwidth_balance_decrease,
-       &loss_bandwidth_balance_reset, &loss_bandwidth_balance_exponent,
-       &allow_resets, &decrease_interval, &loss_report_timeout},
-      key_value_config->Lookup(kBweLossBasedControl));
-}
-LossBasedControlConfig::LossBasedControlConfig(const LossBasedControlConfig&) =
-    default;
-LossBasedControlConfig::~LossBasedControlConfig() = default;
-
-LossBasedBandwidthEstimation::LossBasedBandwidthEstimation(
-    const FieldTrialsView* key_value_config)
-    : config_(key_value_config),
-      average_loss_(0),
-      average_loss_max_(0),
-      loss_based_bitrate_(DataRate::Zero()),
-      acknowledged_bitrate_max_(DataRate::Zero()),
-      acknowledged_bitrate_last_update_(Timestamp::MinusInfinity()),
-      time_last_decrease_(Timestamp::MinusInfinity()),
-      has_decreased_since_last_loss_report_(false),
-      last_loss_packet_report_(Timestamp::MinusInfinity()),
-      last_loss_ratio_(0) {}
-
-void LossBasedBandwidthEstimation::UpdateLossStatistics(
-    const std::vector<PacketResult>& packet_results,
-    Timestamp at_time) {
-  if (packet_results.empty()) {
-    RTC_DCHECK_NOTREACHED();
-    return;
-  }
-  int loss_count = 0;
-  for (const auto& pkt : packet_results) {
-    loss_count += !pkt.IsReceived() ? 1 : 0;
-  }
-  last_loss_ratio_ = static_cast<double>(loss_count) / packet_results.size();
-  const TimeDelta time_passed = last_loss_packet_report_.IsFinite()
-                                    ? at_time - last_loss_packet_report_
-                                    : TimeDelta::Seconds(1);
-  last_loss_packet_report_ = at_time;
-  has_decreased_since_last_loss_report_ = false;
-
-  average_loss_ += ExponentialUpdate(config_.loss_window, time_passed) *
-                   (last_loss_ratio_ - average_loss_);
-  if (average_loss_ > average_loss_max_) {
-    average_loss_max_ = average_loss_;
-  } else {
-    average_loss_max_ +=
-        ExponentialUpdate(config_.loss_max_window, time_passed) *
-        (average_loss_ - average_loss_max_);
-  }
-}
-
-void LossBasedBandwidthEstimation::UpdateAcknowledgedBitrate(
-    DataRate acknowledged_bitrate,
-    Timestamp at_time) {
-  const TimeDelta time_passed =
-      acknowledged_bitrate_last_update_.IsFinite()
-          ? at_time - acknowledged_bitrate_last_update_
-          : TimeDelta::Seconds(1);
-  acknowledged_bitrate_last_update_ = at_time;
-  if (acknowledged_bitrate > acknowledged_bitrate_max_) {
-    acknowledged_bitrate_max_ = acknowledged_bitrate;
-  } else {
-    acknowledged_bitrate_max_ -=
-        ExponentialUpdate(config_.acknowledged_rate_max_window, time_passed) *
-        (acknowledged_bitrate_max_ - acknowledged_bitrate);
-  }
-}
-
-DataRate LossBasedBandwidthEstimation::Update(Timestamp at_time,
-                                              DataRate min_bitrate,
-                                              DataRate wanted_bitrate,
-                                              TimeDelta last_round_trip_time) {
-  if (loss_based_bitrate_.IsZero()) {
-    loss_based_bitrate_ = wanted_bitrate;
-  }
-
-  // Only increase if loss has been low for some time.
-  const double loss_estimate_for_increase = average_loss_max_;
-  // Avoid multiple decreases from averaging over one loss spike.
-  const double loss_estimate_for_decrease =
-      std::min(average_loss_, last_loss_ratio_);
-  const bool allow_decrease =
-      !has_decreased_since_last_loss_report_ &&
-      (at_time - time_last_decrease_ >=
-       last_round_trip_time + config_.decrease_interval);
-  // If packet lost reports are too old, dont increase bitrate.
-  const bool loss_report_valid =
-      at_time - last_loss_packet_report_ < 1.2 * kMaxRtcpFeedbackInterval;
-
-  if (loss_report_valid && config_.allow_resets &&
-      loss_estimate_for_increase < loss_reset_threshold()) {
-    loss_based_bitrate_ = wanted_bitrate;
-  } else if (loss_report_valid &&
-             loss_estimate_for_increase < loss_increase_threshold()) {
-    // Increase bitrate by RTT-adaptive ratio.
-    DataRate new_increased_bitrate =
-        min_bitrate * GetIncreaseFactor(config_, last_round_trip_time) +
-        config_.increase_offset;
-    // The bitrate that would make the loss "just high enough".
-    const DataRate new_increased_bitrate_cap = BitrateFromLoss(
-        loss_estimate_for_increase, config_.loss_bandwidth_balance_increase,
-        config_.loss_bandwidth_balance_exponent);
-    new_increased_bitrate =
-        std::min(new_increased_bitrate, new_increased_bitrate_cap);
-    loss_based_bitrate_ = std::max(new_increased_bitrate, loss_based_bitrate_);
-  } else if (loss_estimate_for_decrease > loss_decrease_threshold() &&
-             allow_decrease) {
-    // The bitrate that would make the loss "just acceptable".
-    const DataRate new_decreased_bitrate_floor = BitrateFromLoss(
-        loss_estimate_for_decrease, config_.loss_bandwidth_balance_decrease,
-        config_.loss_bandwidth_balance_exponent);
-    DataRate new_decreased_bitrate =
-        std::max(decreased_bitrate(), new_decreased_bitrate_floor);
-    if (new_decreased_bitrate < loss_based_bitrate_) {
-      time_last_decrease_ = at_time;
-      has_decreased_since_last_loss_report_ = true;
-      loss_based_bitrate_ = new_decreased_bitrate;
-    }
-  }
-  return loss_based_bitrate_;
-}
-
-void LossBasedBandwidthEstimation::Initialize(DataRate bitrate) {
-  loss_based_bitrate_ = bitrate;
-  average_loss_ = 0;
-  average_loss_max_ = 0;
-}
-
-double LossBasedBandwidthEstimation::loss_reset_threshold() const {
-  return LossFromBitrate(loss_based_bitrate_,
-                         config_.loss_bandwidth_balance_reset,
-                         config_.loss_bandwidth_balance_exponent);
-}
-
-double LossBasedBandwidthEstimation::loss_increase_threshold() const {
-  return LossFromBitrate(loss_based_bitrate_,
-                         config_.loss_bandwidth_balance_increase,
-                         config_.loss_bandwidth_balance_exponent);
-}
-
-double LossBasedBandwidthEstimation::loss_decrease_threshold() const {
-  return LossFromBitrate(loss_based_bitrate_,
-                         config_.loss_bandwidth_balance_decrease,
-                         config_.loss_bandwidth_balance_exponent);
-}
-
-DataRate LossBasedBandwidthEstimation::decreased_bitrate() const {
-  return config_.decrease_factor * acknowledged_bitrate_max_;
-}
-}  // namespace webrtc
diff --git a/modules/congestion_controller/goog_cc/loss_based_bandwidth_estimation.h b/modules/congestion_controller/goog_cc/loss_based_bandwidth_estimation.h
deleted file mode 100644
index 9f69cab..0000000
--- a/modules/congestion_controller/goog_cc/loss_based_bandwidth_estimation.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *  Copyright (c) 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_LOSS_BASED_BANDWIDTH_ESTIMATION_H_
-#define MODULES_CONGESTION_CONTROLLER_GOOG_CC_LOSS_BASED_BANDWIDTH_ESTIMATION_H_
-
-#include <vector>
-
-#include "api/field_trials_view.h"
-#include "api/transport/network_types.h"
-#include "api/units/data_rate.h"
-#include "api/units/time_delta.h"
-#include "api/units/timestamp.h"
-#include "rtc_base/experiments/field_trial_parser.h"
-
-namespace webrtc {
-
-struct LossBasedControlConfig {
-  explicit LossBasedControlConfig(const FieldTrialsView* key_value_config);
-  LossBasedControlConfig(const LossBasedControlConfig&);
-  LossBasedControlConfig& operator=(const LossBasedControlConfig&) = default;
-  ~LossBasedControlConfig();
-  bool enabled;
-  FieldTrialParameter<double> min_increase_factor;
-  FieldTrialParameter<double> max_increase_factor;
-  FieldTrialParameter<TimeDelta> increase_low_rtt;
-  FieldTrialParameter<TimeDelta> increase_high_rtt;
-  FieldTrialParameter<double> decrease_factor;
-  FieldTrialParameter<TimeDelta> loss_window;
-  FieldTrialParameter<TimeDelta> loss_max_window;
-  FieldTrialParameter<TimeDelta> acknowledged_rate_max_window;
-  FieldTrialParameter<DataRate> increase_offset;
-  FieldTrialParameter<DataRate> loss_bandwidth_balance_increase;
-  FieldTrialParameter<DataRate> loss_bandwidth_balance_decrease;
-  FieldTrialParameter<DataRate> loss_bandwidth_balance_reset;
-  FieldTrialParameter<double> loss_bandwidth_balance_exponent;
-  FieldTrialParameter<bool> allow_resets;
-  FieldTrialParameter<TimeDelta> decrease_interval;
-  FieldTrialParameter<TimeDelta> loss_report_timeout;
-};
-
-// Estimates an upper BWE limit based on loss.
-// It requires knowledge about lost packets and acknowledged bitrate.
-// Ie, this class require transport feedback.
-class LossBasedBandwidthEstimation {
- public:
-  explicit LossBasedBandwidthEstimation(
-      const FieldTrialsView* key_value_config);
-  // Returns the new estimate.
-  DataRate Update(Timestamp at_time,
-                  DataRate min_bitrate,
-                  DataRate wanted_bitrate,
-                  TimeDelta last_round_trip_time);
-  void UpdateAcknowledgedBitrate(DataRate acknowledged_bitrate,
-                                 Timestamp at_time);
-  void Initialize(DataRate bitrate);
-  bool Enabled() const { return config_.enabled; }
-  // Returns true if LossBasedBandwidthEstimation is enabled and have
-  // received loss statistics. Ie, this class require transport feedback.
-  bool InUse() const {
-    return Enabled() && last_loss_packet_report_.IsFinite();
-  }
-  void UpdateLossStatistics(const std::vector<PacketResult>& packet_results,
-                            Timestamp at_time);
-  DataRate GetEstimate() const { return loss_based_bitrate_; }
-
- private:
-  friend class GoogCcStatePrinter;
-  void Reset(DataRate bitrate);
-  double loss_increase_threshold() const;
-  double loss_decrease_threshold() const;
-  double loss_reset_threshold() const;
-
-  DataRate decreased_bitrate() const;
-
-  const LossBasedControlConfig config_;
-  double average_loss_;
-  double average_loss_max_;
-  DataRate loss_based_bitrate_;
-  DataRate acknowledged_bitrate_max_;
-  Timestamp acknowledged_bitrate_last_update_;
-  Timestamp time_last_decrease_;
-  bool has_decreased_since_last_loss_report_;
-  Timestamp last_loss_packet_report_;
-  double last_loss_ratio_;
-};
-
-}  // namespace webrtc
-
-#endif  // MODULES_CONGESTION_CONTROLLER_GOOG_CC_LOSS_BASED_BANDWIDTH_ESTIMATION_H_
diff --git a/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.cc b/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.cc
index eccad2b..d599958 100644
--- a/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.cc
+++ b/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.cc
@@ -223,7 +223,6 @@
       low_loss_threshold_(kDefaultLowLossThreshold),
       high_loss_threshold_(kDefaultHighLossThreshold),
       bitrate_threshold_(kDefaultBitrateThreshold),
-      loss_based_bandwidth_estimator_v1_(key_value_config),
       loss_based_bandwidth_estimator_v2_(new LossBasedBweV2(key_value_config)),
       loss_based_state_(LossBasedState::kDelayBasedEstimate),
       disable_receiver_limit_caps_only_("Disabled") {
@@ -361,10 +360,6 @@
   if (!acknowledged_rate.has_value()) {
     return;
   }
-  if (LossBasedBandwidthEstimatorV1Enabled()) {
-    loss_based_bandwidth_estimator_v1_.UpdateAcknowledgedBitrate(
-        *acknowledged_rate, at_time);
-  }
   if (LossBasedBandwidthEstimatorV2Enabled()) {
     loss_based_bandwidth_estimator_v2_->SetAcknowledgedBitrate(
         *acknowledged_rate);
@@ -376,10 +371,6 @@
     BandwidthUsage /* delay_detector_state */,
     std::optional<DataRate> /* probe_bitrate */,
     bool in_alr) {
-  if (LossBasedBandwidthEstimatorV1Enabled()) {
-    loss_based_bandwidth_estimator_v1_.UpdateLossStatistics(
-        report.packet_feedbacks, report.feedback_time);
-  }
   if (LossBasedBandwidthEstimatorV2Enabled()) {
     loss_based_bandwidth_estimator_v2_->UpdateBandwidthEstimate(
         report.packet_feedbacks, delay_based_limit_, in_alr);
@@ -493,20 +484,12 @@
     // receiver limit here.
     if (receiver_limit_.IsFinite())
       new_bitrate = std::max(receiver_limit_, new_bitrate);
-    if (delay_based_limit_.IsFinite())
+    if (delay_based_limit_.IsFinite()) {
       new_bitrate = std::max(delay_based_limit_, new_bitrate);
-    if (LossBasedBandwidthEstimatorV1Enabled()) {
-      loss_based_bandwidth_estimator_v1_.Initialize(new_bitrate);
     }
-
     if (new_bitrate != current_target_) {
       min_bitrate_history_.clear();
-      if (LossBasedBandwidthEstimatorV1Enabled()) {
-        min_bitrate_history_.push_back(std::make_pair(at_time, new_bitrate));
-      } else {
-        min_bitrate_history_.push_back(
-            std::make_pair(at_time, current_target_));
-      }
+      min_bitrate_history_.push_back(std::make_pair(at_time, current_target_));
       UpdateTargetBitrate(new_bitrate, at_time);
       return;
     }
@@ -519,14 +502,6 @@
     return;
   }
 
-  if (LossBasedBandwidthEstimatorV1ReadyForUse()) {
-    DataRate new_bitrate = loss_based_bandwidth_estimator_v1_.Update(
-        at_time, min_bitrate_history_.front().second, delay_based_limit_,
-        last_round_trip_time_);
-    UpdateTargetBitrate(new_bitrate, at_time);
-    return;
-  }
-
   if (LossBasedBandwidthEstimatorV2ReadyForUse()) {
     LossBasedBweV2::Result result =
         loss_based_bandwidth_estimator_v2_->GetLossBasedResult();
@@ -673,17 +648,6 @@
   UpdateTargetBitrate(current_target_, at_time);
 }
 
-bool SendSideBandwidthEstimation::LossBasedBandwidthEstimatorV1Enabled() const {
-  return loss_based_bandwidth_estimator_v1_.Enabled() &&
-         !LossBasedBandwidthEstimatorV2Enabled();
-}
-
-bool SendSideBandwidthEstimation::LossBasedBandwidthEstimatorV1ReadyForUse()
-    const {
-  return LossBasedBandwidthEstimatorV1Enabled() &&
-         loss_based_bandwidth_estimator_v1_.InUse();
-}
-
 bool SendSideBandwidthEstimation::LossBasedBandwidthEstimatorV2Enabled() const {
   return loss_based_bandwidth_estimator_v2_->IsEnabled();
 }
diff --git a/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.h b/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.h
index 5fa8ae9..6c701e0 100644
--- a/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.h
+++ b/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.h
@@ -27,7 +27,6 @@
 #include "api/units/data_rate.h"
 #include "api/units/time_delta.h"
 #include "api/units/timestamp.h"
-#include "modules/congestion_controller/goog_cc/loss_based_bandwidth_estimation.h"
 #include "modules/congestion_controller/goog_cc/loss_based_bwe_v2.h"
 #include "rtc_base/experiments/field_trial_parser.h"
 
@@ -161,10 +160,7 @@
   // should be cleaned up.
   void ApplyTargetLimits(Timestamp at_time);
 
-  bool LossBasedBandwidthEstimatorV1Enabled() const;
   bool LossBasedBandwidthEstimatorV2Enabled() const;
-
-  bool LossBasedBandwidthEstimatorV1ReadyForUse() const;
   bool LossBasedBandwidthEstimatorV2ReadyForUse() const;
 
   const FieldTrialsView* key_value_config_;
@@ -208,7 +204,6 @@
   float low_loss_threshold_;
   float high_loss_threshold_;
   DataRate bitrate_threshold_;
-  LossBasedBandwidthEstimation loss_based_bandwidth_estimator_v1_;
   std::unique_ptr<LossBasedBweV2> loss_based_bandwidth_estimator_v2_;
   LossBasedState loss_based_state_;
   FieldTrialFlag disable_receiver_limit_caps_only_;
diff --git a/modules/congestion_controller/goog_cc/test/goog_cc_printer.cc b/modules/congestion_controller/goog_cc/test/goog_cc_printer.cc
index cef4bf4..6e5bbb3 100644
--- a/modules/congestion_controller/goog_cc/test/goog_cc_printer.cc
+++ b/modules/congestion_controller/goog_cc/test/goog_cc_printer.cc
@@ -99,10 +99,6 @@
   auto acknowledged_rate = [this] {
     return controller_->acknowledged_bitrate_estimator_->bitrate();
   };
-  auto loss_cont = [&] {
-    return &controller_->bandwidth_estimation_
-                ->loss_based_bandwidth_estimator_v1_;
-  };
   std::deque<FieldLogger*> loggers({
       Log("time", [this] { return target_.at_time; }),
       Log("rtt", [this] { return target_.network_estimate.round_trip_time; }),
@@ -127,17 +123,6 @@
       Log("est_pre_buffer", [this] { return est_.pre_link_buffer_delay; }),
       Log("est_post_buffer", [this] { return est_.post_link_buffer_delay; }),
       Log("est_propagation", [this] { return est_.propagation_delay; }),
-      Log("loss_ratio", [=] { return loss_cont()->last_loss_ratio_; }),
-      Log("loss_average", [=] { return loss_cont()->average_loss_; }),
-      Log("loss_average_max", [=] { return loss_cont()->average_loss_max_; }),
-      Log("loss_thres_inc",
-          [=] { return loss_cont()->loss_increase_threshold(); }),
-      Log("loss_thres_dec",
-          [=] { return loss_cont()->loss_decrease_threshold(); }),
-      Log("loss_dec_rate", [=] { return loss_cont()->decreased_bitrate(); }),
-      Log("loss_based_rate", [=] { return loss_cont()->loss_based_bitrate_; }),
-      Log("loss_ack_rate",
-          [=] { return loss_cont()->acknowledged_bitrate_max_; }),
       Log("data_window", [this] { return controller_->current_data_window_; }),
       Log("pushback_target",
           [this] { return controller_->last_pushback_target_rate_; }),