Adds start bitrate handling to task queue congestion controller.

This adds a start bitrate field to TargetRateConstraints since this is
required in VideoSendStreamTests. This also reduces the differences
between the old SendSideCongestionController and the new TaskQueue
based version.

Bug: webrtc:9586
Change-Id: I5d3d1414e9d30b51723c911a0bf2e96b876c04e5
Reviewed-on: https://webrtc-review.googlesource.com/92624
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24384}
This commit is contained in:
Sebastian Jansson
2018-08-06 19:15:04 +02:00
committed by Commit Bot
parent f2a8287cc5
commit 206b77f7ad
5 changed files with 19 additions and 16 deletions

View File

@ -45,6 +45,7 @@ struct TargetRateConstraints {
Timestamp at_time = Timestamp::Infinity();
absl::optional<DataRate> min_data_rate;
absl::optional<DataRate> max_data_rate;
absl::optional<DataRate> starting_rate;
};
// Send side information
@ -62,7 +63,6 @@ struct NetworkRouteChange {
// The TargetRateConstraints are set here so they can be changed synchronously
// when network route changes.
TargetRateConstraints constraints;
absl::optional<DataRate> starting_rate;
};
struct PacedPacketInfo {

View File

@ -311,8 +311,8 @@ NetworkControlUpdate BbrNetworkController::OnNetworkRouteChange(
NetworkRouteChange msg) {
constraints_ = msg.constraints;
Reset();
if (msg.starting_rate)
default_bandwidth_ = *msg.starting_rate;
if (msg.constraints.starting_rate)
default_bandwidth_ = *msg.constraints.starting_rate;
rtt_stats_.OnConnectionMigration();
return CreateRateUpdate(msg.at_time);

View File

@ -72,7 +72,7 @@ NetworkRouteChange CreateRouteChange(Timestamp at_time,
route_change.constraints.at_time = at_time;
route_change.constraints.min_data_rate = min_rate;
route_change.constraints.max_data_rate = max_rate;
route_change.starting_rate = start_rate;
route_change.constraints.starting_rate = start_rate;
return route_change;
}
} // namespace

View File

@ -160,7 +160,8 @@ NetworkControlUpdate GoogCcNetworkController::OnNetworkRouteChange(
NetworkRouteChange msg) {
int64_t min_bitrate_bps = GetBpsOrDefault(msg.constraints.min_data_rate, -1);
int64_t max_bitrate_bps = GetBpsOrDefault(msg.constraints.max_data_rate, -1);
int64_t start_bitrate_bps = GetBpsOrDefault(msg.starting_rate, -1);
int64_t start_bitrate_bps =
GetBpsOrDefault(msg.constraints.starting_rate, -1);
ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps);
@ -283,7 +284,7 @@ NetworkControlUpdate GoogCcNetworkController::OnTargetRateConstraints(
TargetRateConstraints constraints) {
NetworkControlUpdate update;
update.probe_cluster_configs =
UpdateBitrateConstraints(constraints, absl::nullopt);
UpdateBitrateConstraints(constraints, constraints.starting_rate);
MaybeTriggerOnNetworkChanged(&update, constraints.at_time);
return update;
}

View File

@ -107,6 +107,7 @@ std::vector<PacketResult> PacketResultsFromRtpFeedbackVector(
TargetRateConstraints ConvertConstraints(int min_bitrate_bps,
int max_bitrate_bps,
int start_bitrate_bps,
const Clock* clock) {
TargetRateConstraints msg;
msg.at_time = Timestamp::ms(clock->TimeInMilliseconds());
@ -114,6 +115,8 @@ TargetRateConstraints ConvertConstraints(int min_bitrate_bps,
min_bitrate_bps >= 0 ? DataRate::bps(min_bitrate_bps) : DataRate::Zero();
msg.max_data_rate = max_bitrate_bps > 0 ? DataRate::bps(max_bitrate_bps)
: DataRate::Infinity();
if (start_bitrate_bps > 0)
msg.starting_rate = DataRate::bps(start_bitrate_bps);
return msg;
}
@ -366,8 +369,8 @@ SendSideCongestionController::SendSideCongestionController(
pacer_queue_update_task_(nullptr),
controller_task_(nullptr),
task_queue_(task_queue) {
initial_config_.constraints =
ConvertConstraints(min_bitrate_bps, max_bitrate_bps, clock_);
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);
}
@ -442,8 +445,8 @@ void SendSideCongestionController::RegisterNetworkObserver(
void SendSideCongestionController::SetBweBitrates(int min_bitrate_bps,
int start_bitrate_bps,
int max_bitrate_bps) {
TargetRateConstraints constraints =
ConvertConstraints(min_bitrate_bps, max_bitrate_bps, clock_);
TargetRateConstraints constraints = ConvertConstraints(
min_bitrate_bps, max_bitrate_bps, start_bitrate_bps, clock_);
task_queue_->PostTask([this, constraints, start_bitrate_bps]() {
RTC_DCHECK_RUN_ON(task_queue_);
if (controller_) {
@ -482,17 +485,16 @@ void SendSideCongestionController::OnNetworkRouteChanged(
NetworkRouteChange msg;
msg.at_time = Timestamp::ms(clock_->TimeInMilliseconds());
msg.constraints =
ConvertConstraints(min_bitrate_bps, max_bitrate_bps, clock_);
if (start_bitrate_bps > 0)
msg.starting_rate = DataRate::bps(start_bitrate_bps);
msg.constraints = ConvertConstraints(min_bitrate_bps, max_bitrate_bps,
start_bitrate_bps, clock_);
task_queue_->PostTask([this, msg]() {
RTC_DCHECK_RUN_ON(task_queue_);
if (controller_) {
control_handler_->PostUpdates(controller_->OnNetworkRouteChange(msg));
} else {
if (msg.starting_rate)
initial_config_.starting_bandwidth = *msg.starting_rate;
if (msg.constraints.starting_rate)
initial_config_.starting_bandwidth = *msg.constraints.starting_rate;
initial_config_.constraints = msg.constraints;
}
pacer_controller_->OnNetworkRouteChange(msg);