From 28aced5c3c60a2a052556079225ed12f931a16a1 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Tue, 11 Jun 2019 11:08:20 +0200 Subject: [PATCH] Adds debug logs for loss based controller. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:9883 Change-Id: I525d88b1eba22f6198da04b1e18c26ec4a15c42d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/141406 Reviewed-by: Björn Terelius Commit-Queue: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#28230} --- .../loss_based_bandwidth_estimation.cc | 33 +++++++++++-------- .../loss_based_bandwidth_estimation.h | 4 +++ .../send_side_bandwidth_estimation.h | 2 ++ .../goog_cc/test/goog_cc_printer.cc | 15 +++++++++ 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/modules/bitrate_controller/loss_based_bandwidth_estimation.cc b/modules/bitrate_controller/loss_based_bandwidth_estimation.cc index 3015d3dd0f..64c0482edb 100644 --- a/modules/bitrate_controller/loss_based_bandwidth_estimation.cc +++ b/modules/bitrate_controller/loss_based_bandwidth_estimation.cc @@ -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); diff --git a/modules/bitrate_controller/loss_based_bandwidth_estimation.h b/modules/bitrate_controller/loss_based_bandwidth_estimation.h index b0d5822f4c..6bde6391ff 100644 --- a/modules/bitrate_controller/loss_based_bandwidth_estimation.h +++ b/modules/bitrate_controller/loss_based_bandwidth_estimation.h @@ -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_; diff --git a/modules/bitrate_controller/send_side_bandwidth_estimation.h b/modules/bitrate_controller/send_side_bandwidth_estimation.h index bf740bc971..1b03e4efc9 100644 --- a/modules/bitrate_controller/send_side_bandwidth_estimation.h +++ b/modules/bitrate_controller/send_side_bandwidth_estimation.h @@ -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; diff --git a/modules/congestion_controller/goog_cc/test/goog_cc_printer.cc b/modules/congestion_controller/goog_cc/test/goog_cc_printer.cc index 8184f2a969..4af048295b 100644 --- a/modules/congestion_controller/goog_cc/test/goog_cc_printer.cc +++ b/modules/congestion_controller/goog_cc/test/goog_cc_printer.cc @@ -85,6 +85,10 @@ std::deque 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 loggers({ Log("time", [=] { return target_.at_time; }), Log("bandwidth", [=] { return target_.network_estimate.bandwidth; }), @@ -109,6 +113,17 @@ std::deque 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; }