diff --git a/api/transport/network_control.h b/api/transport/network_control.h index abd945d897..9086260427 100644 --- a/api/transport/network_control.h +++ b/api/transport/network_control.h @@ -29,15 +29,13 @@ class TargetTransferRateObserver { // optional to use for a network controller implementation. struct NetworkControllerConfig { // The initial constraints to start with, these can be changed at any later - // time by calls to OnTargetRateConstraints. + // time by calls to OnTargetRateConstraints. Note that the starting rate + // has to be set initially to provide a starting state for the network + // controller, even though the field is marked as optional. TargetRateConstraints constraints; // Initial stream specific configuration, these are changed at any later time // by calls to OnStreamsConfig. StreamsConfig stream_based_config; - // The initial bandwidth estimate to base target rate on. This should be used - // as the basis for initial OnTargetTransferRate and OnPacerConfig callbacks. - // Note that starting rate is only provided on construction. - DataRate starting_bandwidth = DataRate::Infinity(); }; // NetworkControllerInterface is implemented by network controllers. A network diff --git a/api/transport/network_types.h b/api/transport/network_types.h index 8e9526beb2..e34bf0e7f1 100644 --- a/api/transport/network_types.h +++ b/api/transport/network_types.h @@ -45,6 +45,8 @@ struct TargetRateConstraints { Timestamp at_time = Timestamp::Infinity(); absl::optional min_data_rate; absl::optional max_data_rate; + // The initial bandwidth estimate to base target rate on. This should be used + // as the basis for initial OnTargetTransferRate and OnPacerConfig callbacks. absl::optional starting_rate; }; diff --git a/modules/congestion_controller/bbr/bbr_network_controller.cc b/modules/congestion_controller/bbr/bbr_network_controller.cc index b6bc98347a..e096a87d5a 100644 --- a/modules/congestion_controller/bbr/bbr_network_controller.cc +++ b/modules/congestion_controller/bbr/bbr_network_controller.cc @@ -217,8 +217,8 @@ BbrNetworkController::BbrNetworkController(NetworkControllerConfig config) app_limited_since_last_probe_rtt_(false), min_rtt_since_last_probe_rtt_(TimeDelta::PlusInfinity()) { RTC_LOG(LS_INFO) << "Creating BBR controller"; - if (config.starting_bandwidth.IsFinite()) - default_bandwidth_ = config.starting_bandwidth; + if (config.constraints.starting_rate) + default_bandwidth_ = *config.constraints.starting_rate; constraints_ = config.constraints; Reset(); } diff --git a/modules/congestion_controller/bbr/bbr_network_controller_unittest.cc b/modules/congestion_controller/bbr/bbr_network_controller_unittest.cc index b4fcf95a94..0254bfdab3 100644 --- a/modules/congestion_controller/bbr/bbr_network_controller_unittest.cc +++ b/modules/congestion_controller/bbr/bbr_network_controller_unittest.cc @@ -53,7 +53,7 @@ NetworkControllerConfig InitialConfig( config.constraints.at_time = kDefaultStartTime; config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps); config.constraints.max_data_rate = DataRate::kbps(max_data_rate_kbps); - config.starting_bandwidth = DataRate::kbps(starting_bandwidth_kbps); + config.constraints.starting_rate = DataRate::kbps(starting_bandwidth_kbps); return config; } 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 72bae52820..7096440bfb 100644 --- a/modules/congestion_controller/goog_cc/goog_cc_network_control.cc +++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.cc @@ -128,7 +128,7 @@ GoogCcNetworkController::GoogCcNetworkController(RtcEventLog* event_log, acknowledged_bitrate_estimator_( absl::make_unique()), initial_config_(config), - last_bandwidth_(config.starting_bandwidth), + last_bandwidth_(*config.constraints.starting_rate), pacing_factor_(config.stream_based_config.pacing_factor.value_or( kDefaultPaceMultiplier)), min_pacing_rate_(config.stream_based_config.min_pacing_rate.value_or( @@ -186,8 +186,9 @@ NetworkControlUpdate GoogCcNetworkController::OnProcessInterval( ProcessInterval msg) { NetworkControlUpdate update; if (initial_config_) { - update.probe_cluster_configs = UpdateBitrateConstraints( - initial_config_->constraints, initial_config_->starting_bandwidth); + update.probe_cluster_configs = + UpdateBitrateConstraints(initial_config_->constraints, + initial_config_->constraints.starting_rate); update.pacer_config = GetPacingRates(msg.at_time); probe_controller_->EnablePeriodicAlrProbing( 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 918fb7618b..484b0e694c 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 @@ -64,7 +64,7 @@ class GoogCcNetworkControllerTest : public ::testing::Test { config.constraints.at_time = current_time_; config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps); config.constraints.max_data_rate = DataRate::kbps(max_data_rate_kbps); - config.starting_bandwidth = DataRate::kbps(starting_bandwidth_kbps); + config.constraints.starting_rate = DataRate::kbps(starting_bandwidth_kbps); return config; } ProcessInterval DefaultInterval() { diff --git a/modules/congestion_controller/pcc/pcc_network_controller.cc b/modules/congestion_controller/pcc/pcc_network_controller.cc index 5c7fb3b45c..c0e561cc39 100644 --- a/modules/congestion_controller/pcc/pcc_network_controller.cc +++ b/modules/congestion_controller/pcc/pcc_network_controller.cc @@ -74,8 +74,8 @@ PccNetworkController::PccNetworkController(NetworkControllerConfig config) monitor_intervals_duration_(TimeDelta::Zero()), complete_feedback_monitor_interval_number_(0), random_generator_(kRandomSeed) { - if (config.starting_bandwidth.IsFinite()) { - default_bandwidth_ = config.starting_bandwidth; + if (config.constraints.starting_rate) { + default_bandwidth_ = *config.constraints.starting_rate; bandwidth_estimate_ = default_bandwidth_; } } diff --git a/modules/congestion_controller/pcc/pcc_network_controller_unittest.cc b/modules/congestion_controller/pcc/pcc_network_controller_unittest.cc index 6c50b0be13..e20ee07fc4 100644 --- a/modules/congestion_controller/pcc/pcc_network_controller_unittest.cc +++ b/modules/congestion_controller/pcc/pcc_network_controller_unittest.cc @@ -50,7 +50,7 @@ NetworkControllerConfig InitialConfig( config.constraints.at_time = kDefaultStartTime; config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps); config.constraints.max_data_rate = DataRate::kbps(max_data_rate_kbps); - config.starting_bandwidth = DataRate::kbps(starting_bandwidth_kbps); + config.constraints.starting_rate = DataRate::kbps(starting_bandwidth_kbps); return config; } diff --git a/modules/congestion_controller/rtp/send_side_congestion_controller.cc b/modules/congestion_controller/rtp/send_side_congestion_controller.cc index 19de1aeae3..53feee6eaf 100644 --- a/modules/congestion_controller/rtp/send_side_congestion_controller.cc +++ b/modules/congestion_controller/rtp/send_side_congestion_controller.cc @@ -372,7 +372,6 @@ SendSideCongestionController::SendSideCongestionController( initial_config_.constraints = ConvertConstraints( min_bitrate_bps, max_bitrate_bps, start_bitrate_bps, clock_); RTC_DCHECK(start_bitrate_bps > 0); - initial_config_.starting_bandwidth = DataRate::bps(start_bitrate_bps); } // There is no point in having a network controller for a network that is not @@ -447,15 +446,13 @@ void SendSideCongestionController::SetBweBitrates(int min_bitrate_bps, int max_bitrate_bps) { TargetRateConstraints constraints = ConvertConstraints( min_bitrate_bps, max_bitrate_bps, start_bitrate_bps, clock_); - task_queue_->PostTask([this, constraints, start_bitrate_bps]() { + task_queue_->PostTask([this, constraints]() { RTC_DCHECK_RUN_ON(task_queue_); if (controller_) { control_handler_->PostUpdates( controller_->OnTargetRateConstraints(constraints)); } else { initial_config_.constraints = constraints; - if (start_bitrate_bps > 0) - initial_config_.starting_bandwidth = DataRate::bps(start_bitrate_bps); } }); } @@ -493,8 +490,6 @@ void SendSideCongestionController::OnNetworkRouteChanged( if (controller_) { control_handler_->PostUpdates(controller_->OnNetworkRouteChange(msg)); } else { - if (msg.constraints.starting_rate) - initial_config_.starting_bandwidth = *msg.constraints.starting_rate; initial_config_.constraints = msg.constraints; } pacer_controller_->OnNetworkRouteChange(msg);