| Index: webrtc/modules/pacing/alr_detector.cc
|
| diff --git a/webrtc/modules/pacing/alr_detector.cc b/webrtc/modules/pacing/alr_detector.cc
|
| index 677c7e018e59823faddcaafabe2c6ca804f383b4..90afe18fef76a3368d1db725e758c5d31ffee8e9 100644
|
| --- a/webrtc/modules/pacing/alr_detector.cc
|
| +++ b/webrtc/modules/pacing/alr_detector.cc
|
| @@ -15,56 +15,39 @@
|
|
|
| namespace {
|
|
|
| -// Time period over which outgoing traffic is measured and considered a single
|
| -// data point.
|
| -constexpr int kMeasurementPeriodMs = 100;
|
| +// Time period over which outgoing traffic is measured.
|
| +constexpr int kMeasurementPeriodMs = 500;
|
|
|
| -// Minimum number of consecutive measurements over |kMeasurementPeriodMs| time
|
| -// that indicate sending rate is below |kUsagePercent| to consider being
|
| -// application limited.
|
| -constexpr int kApplicationLimitedThreshold = 5;
|
| -
|
| -// Sent traffic percentage as a function of network capaicty to consider traffic
|
| -// as application limited.
|
| +// Sent traffic percentage as a function of network capacity used to determine
|
| +// application-limited region. ALR region start when bandwidth usage drops below
|
| +// kAlrStartUsagePercent and ends when it raises above kAlrEndUsagePercent.
|
| // NOTE: This is intentionally conservative at the moment until BW adjustments
|
| // of application limited region is fine tuned.
|
| -constexpr int kUsagePercent = 30;
|
| +constexpr int kAlrStartUsagePercent = 30;
|
| +constexpr int kAlrEndUsagePercent = 50;
|
|
|
| } // namespace
|
|
|
| namespace webrtc {
|
|
|
| AlrDetector::AlrDetector()
|
| - : measurement_interval_bytes_sent_(0),
|
| - measurement_interval_elapsed_time_ms_(0),
|
| - estimated_bitrate_bps_(0),
|
| - application_limited_count_(0) {}
|
| + : rate_(kMeasurementPeriodMs, RateStatistics::kBpsScale) {}
|
|
|
| AlrDetector::~AlrDetector() {}
|
|
|
| -void AlrDetector::OnBytesSent(size_t bytes_sent, int64_t elapsed_time_ms) {
|
| - if (measurement_interval_elapsed_time_ms_ > kMeasurementPeriodMs) {
|
| - RTC_DCHECK(estimated_bitrate_bps_);
|
| - int max_bytes =
|
| - (measurement_interval_elapsed_time_ms_ * estimated_bitrate_bps_) /
|
| - (8 * 1000);
|
| - RTC_DCHECK_GT(max_bytes, 0);
|
| - int utilization =
|
| - static_cast<int>((measurement_interval_bytes_sent_ * 100) / max_bytes);
|
| - if (utilization < kUsagePercent) {
|
| - application_limited_count_++;
|
| - if (application_limited_count_ == kApplicationLimitedThreshold)
|
| - LOG(LS_INFO) << "ALR start";
|
| - } else {
|
| - if (application_limited_count_ >= kApplicationLimitedThreshold)
|
| - LOG(LS_INFO) << "ALR stop";
|
| - application_limited_count_ = 0;
|
| - }
|
| - measurement_interval_elapsed_time_ms_ = elapsed_time_ms;
|
| - measurement_interval_bytes_sent_ = bytes_sent;
|
| - } else {
|
| - measurement_interval_elapsed_time_ms_ += elapsed_time_ms;
|
| - measurement_interval_bytes_sent_ += bytes_sent;
|
| +void AlrDetector::OnBytesSent(size_t bytes_sent, int64_t now_ms) {
|
| + RTC_DCHECK(estimated_bitrate_bps_);
|
| +
|
| + rate_.Update(bytes_sent, now_ms);
|
| + rtc::Optional<uint32_t> rate = rate_.Rate(now_ms);
|
| + if (!rate)
|
| + return;
|
| +
|
| + int percentage = static_cast<int>(*rate) * 100 / estimated_bitrate_bps_;
|
| + if (percentage < kAlrStartUsagePercent && !application_limited_) {
|
| + application_limited_ = true;
|
| + } else if (percentage > kAlrEndUsagePercent && application_limited_) {
|
| + application_limited_ = false;
|
| }
|
| }
|
|
|
| @@ -73,8 +56,8 @@ void AlrDetector::SetEstimatedBitrate(int bitrate_bps) {
|
| estimated_bitrate_bps_ = bitrate_bps;
|
| }
|
|
|
| -bool AlrDetector::InApplicationLimitedRegion() {
|
| - return application_limited_count_ >= kApplicationLimitedThreshold;
|
| +bool AlrDetector::InApplicationLimitedRegion() const {
|
| + return application_limited_;
|
| }
|
|
|
| } // namespace webrtc
|
|
|