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

Unified Diff: webrtc/modules/pacing/alr_detector.cc

Issue 2965233002: Let alr dectector use a budged to detect underuse. (Closed)
Patch Set: Created 3 years, 5 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
Index: webrtc/modules/pacing/alr_detector.cc
diff --git a/webrtc/modules/pacing/alr_detector.cc b/webrtc/modules/pacing/alr_detector.cc
index 5066e6ff798b7166860ed1e54e1a1ba01228b353..8abc721412c1fa079383b3c793f7bf8a562dbeb8 100644
--- a/webrtc/modules/pacing/alr_detector.cc
+++ b/webrtc/modules/pacing/alr_detector.cc
@@ -15,53 +15,50 @@
#include "webrtc/base/checks.h"
#include "webrtc/base/format_macros.h"
#include "webrtc/base/logging.h"
+#include "webrtc/base/timeutils.h"
#include "webrtc/system_wrappers/include/field_trial.h"
-namespace {
-// Time period over which outgoing traffic is measured.
-constexpr int kMeasurementPeriodMs = 500;
-
-} // namespace
-
namespace webrtc {
const char* AlrDetector::kScreenshareProbingBweExperimentName =
"WebRTC-ProbingScreenshareBwe";
AlrDetector::AlrDetector()
- : alr_start_usage_percent_(kDefaultAlrStartUsagePercent),
- alr_end_usage_percent_(kDefaultAlrEndUsagePercent),
- rate_(kMeasurementPeriodMs, RateStatistics::kBpsScale),
- estimated_bitrate_bps_(0) {
+ : bandwidth_usage_percent_(kDefaultAlrBandwidthUsagePercent),
+ alr_start_budget_level_percent_(kDefaultAlrStartBudgetLevePercent),
+ alr_stop_budget_level_percent_(kDefaultAlrStopBudgetLevePercent),
+ alr_budget_(0, true) {
rtc::Optional<AlrExperimentSettings> experiment_settings =
ParseAlrSettingsFromFieldTrial();
if (experiment_settings) {
- alr_start_usage_percent_ = experiment_settings->alr_start_usage_percent;
- alr_end_usage_percent_ = experiment_settings->alr_end_usage_percent;
+ alr_stop_budget_level_percent_ =
+ experiment_settings->alr_stop_budget_level_percent;
+ alr_start_budget_level_percent_ =
+ experiment_settings->alr_start_budget_level_percent;
+ bandwidth_usage_percent_ = experiment_settings->alr_bandwidth_usage_percent;
}
}
AlrDetector::~AlrDetector() {}
-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;
+void AlrDetector::OnBytesSent(size_t bytes_sent, int64_t delta_time_ms) {
+ alr_budget_.UseBudget(bytes_sent);
+ alr_budget_.IncreaseBudget(delta_time_ms);
- int percentage = static_cast<int>(*rate) * 100 / estimated_bitrate_bps_;
- if (percentage < alr_start_usage_percent_ && !alr_started_time_ms_) {
- alr_started_time_ms_ = rtc::Optional<int64_t>(now_ms);
- } else if (percentage > alr_end_usage_percent_ && alr_started_time_ms_) {
+ if (alr_budget_.budget_level_percent() > alr_start_budget_level_percent_ &&
+ !alr_started_time_ms_) {
+ alr_started_time_ms_ = rtc::Optional<int64_t>(rtc::TimeMillis());
+ } else if (alr_budget_.budget_level_percent() <
+ alr_stop_budget_level_percent_ &&
+ alr_started_time_ms_) {
alr_started_time_ms_ = rtc::Optional<int64_t>();
}
}
void AlrDetector::SetEstimatedBitrate(int bitrate_bps) {
RTC_DCHECK(bitrate_bps);
- estimated_bitrate_bps_ = bitrate_bps;
+ alr_budget_.set_target_rate_kbps(bitrate_bps * bandwidth_usage_percent_ /
+ (1000 * 100));
}
rtc::Optional<int64_t> AlrDetector::GetApplicationLimitedRegionStartTime()
@@ -85,19 +82,22 @@ AlrDetector::ParseAlrSettingsFromFieldTrial() {
return ret;
AlrExperimentSettings settings;
- if (sscanf(group_name.c_str(), "%f-%" PRId64 "-%d-%d",
+ if (sscanf(group_name.c_str(), "%f,%" PRId64 ",%d,%d,%d",
stefan-webrtc 2017/07/06 14:55:37 If we change this we may break an existing experim
tschumi 2017/07/07 08:47:30 I already have, and he told me the experiment is n
holmer 2017/07/07 09:21:22 Good!
&settings.pacing_factor, &settings.max_paced_queue_time,
- &settings.alr_start_usage_percent,
- &settings.alr_end_usage_percent) == 4) {
+ &settings.alr_bandwidth_usage_percent,
+ &settings.alr_start_budget_level_percent,
+ &settings.alr_stop_budget_level_percent) == 5) {
ret.emplace(settings);
LOG(LS_INFO) << "Using screenshare ALR experiment settings: "
"pacing factor: "
<< settings.pacing_factor << ", max pacer queue length: "
<< settings.max_paced_queue_time
- << ", ALR start usage percent: "
- << settings.alr_start_usage_percent
- << ", ALR end usage percent: "
- << settings.alr_end_usage_percent;
+ << ", ALR start bandwidth usage percent: "
+ << settings.alr_bandwidth_usage_percent
+ << ", ALR end budget level percent: "
+ << settings.alr_start_budget_level_percent
+ << ", ALR end budget level percent: "
+ << settings.alr_stop_budget_level_percent;
}
return ret;

Powered by Google App Engine
This is Rietveld 408576698