Removes redundant starting rate.

Sine a starting rate field was added to the constraints struct. Having
it in the initial config separately is reduntant. To simplify the code,
the extra field is removed. This is a follow up on:
https://webrtc-review.googlesource.com/c/src/+/92624

Bug: webrtc:9586
Change-Id: I9b01b16b2fc4b8479e83b7e998308be2295e0325
Reviewed-on: https://webrtc-review.googlesource.com/96801
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24514}
This commit is contained in:
Sebastian Jansson
2018-08-30 15:56:48 +02:00
committed by Commit Bot
parent 836a7a2e4d
commit ed1f75ab6d
9 changed files with 17 additions and 21 deletions

View File

@ -29,15 +29,13 @@ class TargetTransferRateObserver {
// optional to use for a network controller implementation. // optional to use for a network controller implementation.
struct NetworkControllerConfig { struct NetworkControllerConfig {
// The initial constraints to start with, these can be changed at any later // 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; TargetRateConstraints constraints;
// Initial stream specific configuration, these are changed at any later time // Initial stream specific configuration, these are changed at any later time
// by calls to OnStreamsConfig. // by calls to OnStreamsConfig.
StreamsConfig stream_based_config; 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 // NetworkControllerInterface is implemented by network controllers. A network

View File

@ -45,6 +45,8 @@ struct TargetRateConstraints {
Timestamp at_time = Timestamp::Infinity(); Timestamp at_time = Timestamp::Infinity();
absl::optional<DataRate> min_data_rate; absl::optional<DataRate> min_data_rate;
absl::optional<DataRate> max_data_rate; absl::optional<DataRate> 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<DataRate> starting_rate; absl::optional<DataRate> starting_rate;
}; };

View File

@ -217,8 +217,8 @@ BbrNetworkController::BbrNetworkController(NetworkControllerConfig config)
app_limited_since_last_probe_rtt_(false), app_limited_since_last_probe_rtt_(false),
min_rtt_since_last_probe_rtt_(TimeDelta::PlusInfinity()) { min_rtt_since_last_probe_rtt_(TimeDelta::PlusInfinity()) {
RTC_LOG(LS_INFO) << "Creating BBR controller"; RTC_LOG(LS_INFO) << "Creating BBR controller";
if (config.starting_bandwidth.IsFinite()) if (config.constraints.starting_rate)
default_bandwidth_ = config.starting_bandwidth; default_bandwidth_ = *config.constraints.starting_rate;
constraints_ = config.constraints; constraints_ = config.constraints;
Reset(); Reset();
} }

View File

@ -53,7 +53,7 @@ NetworkControllerConfig InitialConfig(
config.constraints.at_time = kDefaultStartTime; config.constraints.at_time = kDefaultStartTime;
config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps); config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps);
config.constraints.max_data_rate = DataRate::kbps(max_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; return config;
} }

View File

@ -128,7 +128,7 @@ GoogCcNetworkController::GoogCcNetworkController(RtcEventLog* event_log,
acknowledged_bitrate_estimator_( acknowledged_bitrate_estimator_(
absl::make_unique<AcknowledgedBitrateEstimator>()), absl::make_unique<AcknowledgedBitrateEstimator>()),
initial_config_(config), initial_config_(config),
last_bandwidth_(config.starting_bandwidth), last_bandwidth_(*config.constraints.starting_rate),
pacing_factor_(config.stream_based_config.pacing_factor.value_or( pacing_factor_(config.stream_based_config.pacing_factor.value_or(
kDefaultPaceMultiplier)), kDefaultPaceMultiplier)),
min_pacing_rate_(config.stream_based_config.min_pacing_rate.value_or( min_pacing_rate_(config.stream_based_config.min_pacing_rate.value_or(
@ -186,8 +186,9 @@ NetworkControlUpdate GoogCcNetworkController::OnProcessInterval(
ProcessInterval msg) { ProcessInterval msg) {
NetworkControlUpdate update; NetworkControlUpdate update;
if (initial_config_) { if (initial_config_) {
update.probe_cluster_configs = UpdateBitrateConstraints( update.probe_cluster_configs =
initial_config_->constraints, initial_config_->starting_bandwidth); UpdateBitrateConstraints(initial_config_->constraints,
initial_config_->constraints.starting_rate);
update.pacer_config = GetPacingRates(msg.at_time); update.pacer_config = GetPacingRates(msg.at_time);
probe_controller_->EnablePeriodicAlrProbing( probe_controller_->EnablePeriodicAlrProbing(

View File

@ -64,7 +64,7 @@ class GoogCcNetworkControllerTest : public ::testing::Test {
config.constraints.at_time = current_time_; config.constraints.at_time = current_time_;
config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps); config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps);
config.constraints.max_data_rate = DataRate::kbps(max_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; return config;
} }
ProcessInterval DefaultInterval() { ProcessInterval DefaultInterval() {

View File

@ -74,8 +74,8 @@ PccNetworkController::PccNetworkController(NetworkControllerConfig config)
monitor_intervals_duration_(TimeDelta::Zero()), monitor_intervals_duration_(TimeDelta::Zero()),
complete_feedback_monitor_interval_number_(0), complete_feedback_monitor_interval_number_(0),
random_generator_(kRandomSeed) { random_generator_(kRandomSeed) {
if (config.starting_bandwidth.IsFinite()) { if (config.constraints.starting_rate) {
default_bandwidth_ = config.starting_bandwidth; default_bandwidth_ = *config.constraints.starting_rate;
bandwidth_estimate_ = default_bandwidth_; bandwidth_estimate_ = default_bandwidth_;
} }
} }

View File

@ -50,7 +50,7 @@ NetworkControllerConfig InitialConfig(
config.constraints.at_time = kDefaultStartTime; config.constraints.at_time = kDefaultStartTime;
config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps); config.constraints.min_data_rate = DataRate::kbps(min_data_rate_kbps);
config.constraints.max_data_rate = DataRate::kbps(max_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; return config;
} }

View File

@ -372,7 +372,6 @@ SendSideCongestionController::SendSideCongestionController(
initial_config_.constraints = ConvertConstraints( initial_config_.constraints = ConvertConstraints(
min_bitrate_bps, max_bitrate_bps, start_bitrate_bps, clock_); min_bitrate_bps, max_bitrate_bps, start_bitrate_bps, clock_);
RTC_DCHECK(start_bitrate_bps > 0); 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 // 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) { int max_bitrate_bps) {
TargetRateConstraints constraints = ConvertConstraints( TargetRateConstraints constraints = ConvertConstraints(
min_bitrate_bps, max_bitrate_bps, start_bitrate_bps, clock_); 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_); RTC_DCHECK_RUN_ON(task_queue_);
if (controller_) { if (controller_) {
control_handler_->PostUpdates( control_handler_->PostUpdates(
controller_->OnTargetRateConstraints(constraints)); controller_->OnTargetRateConstraints(constraints));
} else { } else {
initial_config_.constraints = constraints; 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_) { if (controller_) {
control_handler_->PostUpdates(controller_->OnNetworkRouteChange(msg)); control_handler_->PostUpdates(controller_->OnNetworkRouteChange(msg));
} else { } else {
if (msg.constraints.starting_rate)
initial_config_.starting_bandwidth = *msg.constraints.starting_rate;
initial_config_.constraints = msg.constraints; initial_config_.constraints = msg.constraints;
} }
pacer_controller_->OnNetworkRouteChange(msg); pacer_controller_->OnNetworkRouteChange(msg);