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 25cdee61b5..04bbd2656b 100644 --- a/modules/congestion_controller/goog_cc/goog_cc_network_control.cc +++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.cc @@ -67,9 +67,6 @@ GoogCcNetworkController::GoogCcNetworkController(NetworkControllerConfig config, packet_feedback_only_(goog_cc_config.feedback_only), safe_reset_on_route_change_("Enabled"), safe_reset_acknowledged_rate_("ack"), - use_downlink_delay_for_congestion_window_( - IsEnabled(key_value_config_, - "WebRTC-Bwe-CongestionWindowDownlinkDelay")), use_min_allocatable_as_lower_bound_( IsNotDisabled(key_value_config_, "WebRTC-Bwe-MinAllocAsLowerBound")), ignore_probes_lower_than_network_estimate_( @@ -199,9 +196,8 @@ NetworkControlUpdate GoogCcNetworkController::OnProcessInterval( probes.begin(), probes.end()); if (rate_control_settings_.UseCongestionWindow() && - use_downlink_delay_for_congestion_window_ && last_packet_received_time_.IsFinite() && !feedback_max_rtts_.empty()) { - UpdateCongestionWindowSize(msg.at_time - last_packet_received_time_); + UpdateCongestionWindowSize(); } if (congestion_window_pushback_controller_ && current_data_window_) { congestion_window_pushback_controller_->SetDataWindow( @@ -371,8 +367,7 @@ NetworkControlUpdate GoogCcNetworkController::OnTransportLossReport( return NetworkControlUpdate(); } -void GoogCcNetworkController::UpdateCongestionWindowSize( - TimeDelta time_since_last_packet) { +void GoogCcNetworkController::UpdateCongestionWindowSize() { TimeDelta min_feedback_max_rtt = TimeDelta::ms( *std::min_element(feedback_max_rtts_.begin(), feedback_max_rtts_.end())); @@ -382,10 +377,6 @@ void GoogCcNetworkController::UpdateCongestionWindowSize( TimeDelta::ms( rate_control_settings_.GetCongestionWindowAdditionalTimeMs()); - if (use_downlink_delay_for_congestion_window_) { - time_window += time_since_last_packet; - } - DataSize data_window = last_loss_based_target_rate_ * time_window; if (current_data_window_) { data_window = @@ -552,7 +543,7 @@ NetworkControlUpdate GoogCcNetworkController::OnTransportPacketsFeedback( // we don't try to limit the outstanding packets. if (rate_control_settings_.UseCongestionWindow() && max_feedback_rtt.IsFinite()) { - UpdateCongestionWindowSize(/*time_since_last_packet*/ TimeDelta::Zero()); + UpdateCongestionWindowSize(); } if (congestion_window_pushback_controller_ && current_data_window_) { congestion_window_pushback_controller_->SetDataWindow( 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 5b3ae94d99..f8970c808f 100644 --- a/modules/congestion_controller/goog_cc/goog_cc_network_control.h +++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.h @@ -76,7 +76,7 @@ class GoogCcNetworkController : public NetworkControllerInterface { void ClampConstraints(); void MaybeTriggerOnNetworkChanged(NetworkControlUpdate* update, Timestamp at_time); - void UpdateCongestionWindowSize(TimeDelta time_since_last_packet); + void UpdateCongestionWindowSize(); PacerConfig GetPacingRates(Timestamp at_time) const; const FieldTrialBasedConfig trial_based_config_; @@ -85,7 +85,6 @@ class GoogCcNetworkController : public NetworkControllerInterface { const bool packet_feedback_only_; FieldTrialFlag safe_reset_on_route_change_; FieldTrialFlag safe_reset_acknowledged_rate_; - const bool use_downlink_delay_for_congestion_window_; const bool use_min_allocatable_as_lower_bound_; const bool ignore_probes_lower_than_network_estimate_; const RateControlSettings rate_control_settings_; 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 885bdabc1a..c6537aa5f8 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 @@ -378,42 +378,6 @@ TEST_F(GoogCcNetworkControllerTest, EXPECT_NEAR(client->padding_rate().kbps(), client->target_rate().kbps(), 1); } -TEST_F(GoogCcNetworkControllerTest, CongestionWindowPushBackOnSendDelaySpike) { - ScopedFieldTrials trial( - "WebRTC-CongestionWindow/QueueSize:800,MinBitrate:30000/" - "WebRTC-Bwe-CongestionWindowDownlinkDelay/Enabled/"); - Scenario s("googcc_unit/cwnd_actives_no_feedback", false); - NetworkSimulationConfig net_conf; - net_conf.bandwidth = DataRate::kbps(1000); - net_conf.delay = TimeDelta::ms(100); - auto send_net = s.CreateMutableSimulationNode(net_conf); - auto ret_net = s.CreateSimulationNode(net_conf); - - auto* client = s.CreateClient("sender", CallClientConfig()); - auto* route = - s.CreateRoutes(client, {send_net->node()}, - s.CreateClient("return", CallClientConfig()), {ret_net}); - - s.CreateVideoStream(route->forward(), VideoStreamConfig()); - // A return video stream ensures we get steady traffic stream, - // so we can better differentiate between send being down and return - // being down. - s.CreateVideoStream(route->reverse(), VideoStreamConfig()); - - // Wait to stabilize the bandwidth estimate. - s.RunFor(TimeDelta::seconds(10)); - // Send being down triggers congestion window pushback. - send_net->PauseTransmissionUntil(s.Now() + TimeDelta::seconds(10)); - s.RunFor(TimeDelta::seconds(3)); - - // Expect the target rate to be reduced rapidly due to congestion. - // We would expect things to be at 30kbps, the min bitrate. Note - // that the congestion window still gets activated since we are - // receiving packets upstream. - EXPECT_LT(client->target_rate().kbps(), 100); - EXPECT_GE(client->target_rate().kbps(), 30); -} - TEST_F(GoogCcNetworkControllerTest, LimitsToFloorIfRttIsHighInTrial) { // The field trial limits maximum RTT to 2 seconds, higher RTT means that the // controller backs off until it reaches the minimum configured bitrate. This