Moves trendline estimation configuration to trendline_estimator.cc
Bug: webrtc:9883 Change-Id: I5b2139de0c085e1c5ec7c55b5c5ff9a95067e170 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/134205 Commit-Queue: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27767}
This commit is contained in:
parent
042559fb92
commit
5e3d0f88c8
@ -40,30 +40,6 @@ constexpr double kTimestampToMs =
|
||||
// after the API has been changed.
|
||||
constexpr uint32_t kFixedSsrc = 0;
|
||||
|
||||
// Parameters for linear least squares fit of regression line to noisy data.
|
||||
constexpr size_t kDefaultTrendlineWindowSize = 20;
|
||||
constexpr double kDefaultTrendlineSmoothingCoeff = 0.9;
|
||||
constexpr double kDefaultTrendlineThresholdGain = 4.0;
|
||||
|
||||
const char kBweWindowSizeInPacketsExperiment[] =
|
||||
"WebRTC-BweWindowSizeInPackets";
|
||||
|
||||
size_t ReadTrendlineFilterWindowSize(
|
||||
const WebRtcKeyValueConfig* key_value_config) {
|
||||
std::string experiment_string =
|
||||
key_value_config->Lookup(kBweWindowSizeInPacketsExperiment);
|
||||
size_t window_size;
|
||||
int parsed_values =
|
||||
sscanf(experiment_string.c_str(), "Enabled-%zu", &window_size);
|
||||
if (parsed_values == 1) {
|
||||
if (window_size > 1)
|
||||
return window_size;
|
||||
RTC_LOG(WARNING) << "Window size must be greater than 1.";
|
||||
}
|
||||
RTC_LOG(LS_WARNING) << "Failed to parse parameters for BweWindowSizeInPackets"
|
||||
" experiment from field trial string. Using default.";
|
||||
return kDefaultTrendlineWindowSize;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
DelayBasedBwe::Result::Result()
|
||||
@ -86,31 +62,19 @@ DelayBasedBwe::DelayBasedBwe(const WebRtcKeyValueConfig* key_value_config,
|
||||
RtcEventLog* event_log,
|
||||
NetworkStatePredictor* network_state_predictor)
|
||||
: event_log_(event_log),
|
||||
key_value_config_(key_value_config),
|
||||
network_state_predictor_(network_state_predictor),
|
||||
inter_arrival_(),
|
||||
delay_detector_(),
|
||||
delay_detector_(
|
||||
new TrendlineEstimator(key_value_config_, network_state_predictor_)),
|
||||
last_seen_packet_(Timestamp::MinusInfinity()),
|
||||
uma_recorded_(false),
|
||||
rate_control_(key_value_config, /*send_side=*/true),
|
||||
trendline_window_size_(
|
||||
key_value_config->Lookup(kBweWindowSizeInPacketsExperiment)
|
||||
.find("Enabled") == 0
|
||||
? ReadTrendlineFilterWindowSize(key_value_config)
|
||||
: kDefaultTrendlineWindowSize),
|
||||
trendline_smoothing_coeff_(kDefaultTrendlineSmoothingCoeff),
|
||||
trendline_threshold_gain_(kDefaultTrendlineThresholdGain),
|
||||
prev_bitrate_(DataRate::Zero()),
|
||||
prev_state_(BandwidthUsage::kBwNormal),
|
||||
alr_limited_backoff_enabled_(
|
||||
key_value_config->Lookup("WebRTC-Bwe-AlrLimitedBackoff")
|
||||
.find("Enabled") == 0),
|
||||
network_state_predictor_(network_state_predictor) {
|
||||
RTC_LOG(LS_INFO)
|
||||
<< "Using Trendline filter for delay change estimation with window size "
|
||||
<< trendline_window_size_;
|
||||
delay_detector_.reset(new TrendlineEstimator(
|
||||
trendline_window_size_, trendline_smoothing_coeff_,
|
||||
trendline_threshold_gain_, network_state_predictor_));
|
||||
}
|
||||
.find("Enabled") == 0) {}
|
||||
|
||||
DelayBasedBwe::~DelayBasedBwe() {}
|
||||
|
||||
@ -176,9 +140,8 @@ void DelayBasedBwe::IncomingPacketFeedback(
|
||||
inter_arrival_.reset(
|
||||
new InterArrival((kTimestampGroupLengthMs << kInterArrivalShift) / 1000,
|
||||
kTimestampToMs, true));
|
||||
delay_detector_.reset(new TrendlineEstimator(
|
||||
trendline_window_size_, trendline_smoothing_coeff_,
|
||||
trendline_threshold_gain_, network_state_predictor_));
|
||||
delay_detector_.reset(
|
||||
new TrendlineEstimator(key_value_config_, network_state_predictor_));
|
||||
}
|
||||
last_seen_packet_ = at_time;
|
||||
|
||||
|
||||
@ -83,18 +83,16 @@ class DelayBasedBwe {
|
||||
|
||||
rtc::RaceChecker network_race_;
|
||||
RtcEventLog* const event_log_;
|
||||
const WebRtcKeyValueConfig* const key_value_config_;
|
||||
NetworkStatePredictor* network_state_predictor_;
|
||||
std::unique_ptr<InterArrival> inter_arrival_;
|
||||
std::unique_ptr<DelayIncreaseDetectorInterface> delay_detector_;
|
||||
Timestamp last_seen_packet_;
|
||||
bool uma_recorded_;
|
||||
AimdRateControl rate_control_;
|
||||
size_t trendline_window_size_;
|
||||
double trendline_smoothing_coeff_;
|
||||
double trendline_threshold_gain_;
|
||||
DataRate prev_bitrate_;
|
||||
BandwidthUsage prev_state_;
|
||||
bool alr_limited_backoff_enabled_;
|
||||
NetworkStatePredictor* network_state_predictor_;
|
||||
|
||||
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(DelayBasedBwe);
|
||||
};
|
||||
|
||||
@ -13,16 +13,43 @@
|
||||
#include <math.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
|
||||
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/numerics/safe_minmax.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
namespace {
|
||||
|
||||
// Parameters for linear least squares fit of regression line to noisy data.
|
||||
constexpr size_t kDefaultTrendlineWindowSize = 20;
|
||||
constexpr double kDefaultTrendlineSmoothingCoeff = 0.9;
|
||||
constexpr double kDefaultTrendlineThresholdGain = 4.0;
|
||||
const char kBweWindowSizeInPacketsExperiment[] =
|
||||
"WebRTC-BweWindowSizeInPackets";
|
||||
|
||||
size_t ReadTrendlineFilterWindowSize(
|
||||
const WebRtcKeyValueConfig* key_value_config) {
|
||||
std::string experiment_string =
|
||||
key_value_config->Lookup(kBweWindowSizeInPacketsExperiment);
|
||||
size_t window_size;
|
||||
int parsed_values =
|
||||
sscanf(experiment_string.c_str(), "Enabled-%zu", &window_size);
|
||||
if (parsed_values == 1) {
|
||||
if (window_size > 1)
|
||||
return window_size;
|
||||
RTC_LOG(WARNING) << "Window size must be greater than 1.";
|
||||
}
|
||||
RTC_LOG(LS_WARNING) << "Failed to parse parameters for BweWindowSizeInPackets"
|
||||
" experiment from field trial string. Using default.";
|
||||
return kDefaultTrendlineWindowSize;
|
||||
}
|
||||
|
||||
absl::optional<double> LinearFitSlope(
|
||||
const std::deque<std::pair<double, double>>& points) {
|
||||
RTC_DCHECK(points.size() >= 2);
|
||||
@ -54,6 +81,18 @@ constexpr int kDeltaCounterMax = 1000;
|
||||
|
||||
} // namespace
|
||||
|
||||
TrendlineEstimator::TrendlineEstimator(
|
||||
const WebRtcKeyValueConfig* key_value_config,
|
||||
NetworkStatePredictor* network_state_predictor)
|
||||
: TrendlineEstimator(
|
||||
key_value_config->Lookup(kBweWindowSizeInPacketsExperiment)
|
||||
.find("Enabled") == 0
|
||||
? ReadTrendlineFilterWindowSize(key_value_config)
|
||||
: kDefaultTrendlineWindowSize,
|
||||
kDefaultTrendlineSmoothingCoeff,
|
||||
kDefaultTrendlineThresholdGain,
|
||||
network_state_predictor) {}
|
||||
|
||||
TrendlineEstimator::TrendlineEstimator(
|
||||
size_t window_size,
|
||||
double smoothing_coef,
|
||||
@ -78,7 +117,11 @@ TrendlineEstimator::TrendlineEstimator(
|
||||
overuse_counter_(0),
|
||||
hypothesis_(BandwidthUsage::kBwNormal),
|
||||
hypothesis_predicted_(BandwidthUsage::kBwNormal),
|
||||
network_state_predictor_(network_state_predictor) {}
|
||||
network_state_predictor_(network_state_predictor) {
|
||||
RTC_LOG(LS_INFO)
|
||||
<< "Using Trendline filter for delay change estimation with window size "
|
||||
<< window_size_;
|
||||
}
|
||||
|
||||
TrendlineEstimator::~TrendlineEstimator() {}
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include <utility>
|
||||
|
||||
#include "api/network_state_predictor.h"
|
||||
#include "api/transport/webrtc_key_value_config.h"
|
||||
#include "modules/congestion_controller/goog_cc/delay_increase_detector_interface.h"
|
||||
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
|
||||
#include "rtc_base/constructor_magic.h"
|
||||
@ -24,6 +25,8 @@ namespace webrtc {
|
||||
|
||||
class TrendlineEstimator : public DelayIncreaseDetectorInterface {
|
||||
public:
|
||||
TrendlineEstimator(const WebRtcKeyValueConfig* key_value_config,
|
||||
NetworkStatePredictor* network_state_predictor);
|
||||
// |window_size| is the number of points required to compute a trend line.
|
||||
// |smoothing_coef| controls how much we smooth out the delay before fitting
|
||||
// the trend line. |threshold_gain| is used to scale the trendline slope for
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user