Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: webrtc/modules/congestion_controller/probe_controller.cc

Issue 2432633002: Handle BW drop in ALR region and initiate probing (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/congestion_controller/probe_controller.h ('k') | webrtc/modules/pacing/paced_sender.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/congestion_controller/probe_controller.cc
diff --git a/webrtc/modules/congestion_controller/probe_controller.cc b/webrtc/modules/congestion_controller/probe_controller.cc
index 2e253f1a1396d481d2f1db0dd45df9941ababc01..e7bf1fc9b3501d79c3c0c866556d3f366699b7d2 100644
--- a/webrtc/modules/congestion_controller/probe_controller.cc
+++ b/webrtc/modules/congestion_controller/probe_controller.cc
@@ -14,6 +14,7 @@
#include <initializer_list>
#include "webrtc/base/logging.h"
+#include "webrtc/system_wrappers/include/metrics.h"
namespace webrtc {
@@ -35,6 +36,10 @@ constexpr int kExponentialProbingDisabled = 0;
// A limit to prevent probing at excessive bitrates.
constexpr int kMaxProbingBitrateBps = 10000000;
+// This is a limit on how often probing can be done when there is a BW
+// drop detected in ALR region.
+constexpr int kAlrProbingIntervalLimitMs = 5000;
+
} // namespace
ProbeController::ProbeController(PacedSender* pacer, Clock* clock)
@@ -44,7 +49,8 @@ ProbeController::ProbeController(PacedSender* pacer, Clock* clock)
min_bitrate_to_probe_further_bps_(kExponentialProbingDisabled),
time_last_probing_initiated_ms_(0),
estimated_bitrate_bps_(0),
- max_bitrate_bps_(0) {}
+ max_bitrate_bps_(0),
+ last_alr_probing_time_(clock_->TimeInMilliseconds()) {}
void ProbeController::SetBitrates(int min_bitrate_bps,
int start_bitrate_bps,
@@ -92,6 +98,30 @@ void ProbeController::SetEstimatedBitrate(int bitrate_bps) {
InitiateProbing({2 * bitrate_bps}, 1.25 * bitrate_bps);
}
}
+ } else {
+ // A drop in estimated BW when operating in ALR and not already probing.
+ // The current response is to initiate a single probe session at the
+ // previous bitrate and immediately use the reported bitrate as the new
+ // bitrate.
+ //
+ // If the probe session fails, the assumption is that this drop was a
+ // real one from a competing flow or something else on the network and
+ // it ramps up from bitrate_bps.
+ if (pacer_->InApplicationLimitedRegion() &&
+ bitrate_bps < 0.5 * estimated_bitrate_bps_) {
+ int64_t now_ms = clock_->TimeInMilliseconds();
+ if ((now_ms - last_alr_probing_time_) > kAlrProbingIntervalLimitMs) {
+ LOG(LS_INFO) << "Detected big BW drop in ALR, start probe.";
+ // Track how often we probe in response to BW drop in ALR.
+ RTC_HISTOGRAM_COUNTS_10000("WebRTC.BWE.AlrProbingIntervalInS",
+ (now_ms - last_alr_probing_time_) / 1000);
+ InitiateProbing({estimated_bitrate_bps_}, kExponentialProbingDisabled);
+ last_alr_probing_time_ = now_ms;
+ }
+ }
+ // TODO(isheriff): May want to track when we did ALR probing in order
+ // to reset |last_alr_probing_time_| if we validate that it was a
+ // drop due to exogenous event.
}
estimated_bitrate_bps_ = bitrate_bps;
}
« no previous file with comments | « webrtc/modules/congestion_controller/probe_controller.h ('k') | webrtc/modules/pacing/paced_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698