Adds debug logs for loss based controller.

Bug: webrtc:9883
Change-Id: I525d88b1eba22f6198da04b1e18c26ec4a15c42d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/141406
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28230}
This commit is contained in:
Sebastian Jansson
2019-06-11 11:08:20 +02:00
committed by Commit Bot
parent 4de3115e8f
commit 28aced5c3c
4 changed files with 41 additions and 13 deletions

View File

@ -170,19 +170,12 @@ void LossBasedBandwidthEstimation::Update(Timestamp at_time,
// Avoid multiple decreases from averaging over one loss spike.
const double loss_estimate_for_decrease =
std::min(average_loss_, last_loss_ratio_);
const double loss_increase_threshold = LossFromBitrate(
loss_based_bitrate_, config_.loss_bandwidth_balance_increase,
config_.loss_bandwidth_balance_exponent);
const double loss_decrease_threshold = LossFromBitrate(
loss_based_bitrate_, config_.loss_bandwidth_balance_decrease,
config_.loss_bandwidth_balance_exponent);
const bool allow_decrease =
!has_decreased_since_last_loss_report_ &&
(at_time - time_last_decrease_ >=
last_round_trip_time + config_.decrease_interval);
if (loss_estimate_for_increase < loss_increase_threshold) {
if (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) +
@ -194,16 +187,14 @@ void LossBasedBandwidthEstimation::Update(Timestamp at_time,
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 &&
} else if (loss_estimate_for_decrease > loss_decrease_threshold() &&
allow_decrease) {
DataRate new_decreased_bitrate =
config_.decrease_factor * acknowledged_bitrate_max_;
// 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);
new_decreased_bitrate =
std::max(new_decreased_bitrate, new_decreased_bitrate_floor);
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;
@ -218,6 +209,22 @@ void LossBasedBandwidthEstimation::Reset(DataRate bitrate) {
average_loss_max_ = 0;
}
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_;
}
void LossBasedBandwidthEstimation::MaybeReset(DataRate bitrate) {
if (config_.allow_resets)
Reset(bitrate);

View File

@ -60,7 +60,11 @@ class LossBasedBandwidthEstimation {
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;
DataRate decreased_bitrate() const;
LossBasedControlConfig config_;
double average_loss_;

View File

@ -114,6 +114,8 @@ class SendSideBandwidthEstimation {
void IncomingPacketFeedbackVector(const TransportPacketsFeedback& report);
private:
friend class GoogCcStatePrinter;
enum UmaState { kNoUpdate, kFirstDone, kDone };
bool IsInStartPhase(Timestamp at_time) const;

View File

@ -85,6 +85,10 @@ std::deque<FieldLogger*> GoogCcStatePrinter::CreateLoggers() {
auto acknowledged_rate = [this] {
return controller_->acknowledged_bitrate_estimator_->bitrate();
};
auto loss_cont = [&] {
return &controller_->bandwidth_estimation_
->loss_based_bandwidth_estimation_;
};
std::deque<FieldLogger*> loggers({
Log("time", [=] { return target_.at_time; }),
Log("bandwidth", [=] { return target_.network_estimate.bandwidth; }),
@ -109,6 +113,17 @@ std::deque<FieldLogger*> GoogCcStatePrinter::CreateLoggers() {
Log("est_pre_buffer", [=] { return est_.pre_link_buffer_delay; }),
Log("est_post_buffer", [=] { return est_.post_link_buffer_delay; }),
Log("est_propagation", [=] { 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_; }),
});
return loggers;
}