mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-16 15:20:42 +01:00

This replaces the old AlrDetector used by the pacer with the one in GoogCC. This reduces the risk of accidentally changing only one version. Note that the pacer instance will be removed when moving over to the task queue based send side congestion controller. Bug: webrtc:8415 Change-Id: Id4b2000ee5a04b94565092c29a84572a7750d2f5 Reviewed-on: https://webrtc-review.googlesource.com/85363 Commit-Queue: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23791}
72 lines
2.6 KiB
C++
72 lines
2.6 KiB
C++
/*
|
|
* Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef MODULES_CONGESTION_CONTROLLER_GOOG_CC_ALR_DETECTOR_H_
|
|
#define MODULES_CONGESTION_CONTROLLER_GOOG_CC_ALR_DETECTOR_H_
|
|
|
|
#include "absl/types/optional.h"
|
|
#include "common_types.h" // NOLINT(build/include)
|
|
#include "modules/pacing/interval_budget.h"
|
|
#include "rtc_base/rate_statistics.h"
|
|
#include "typedefs.h" // NOLINT(build/include)
|
|
|
|
namespace webrtc {
|
|
|
|
class RtcEventLog;
|
|
|
|
// Application limited region detector is a class that utilizes signals of
|
|
// elapsed time and bytes sent to estimate whether network traffic is
|
|
// currently limited by the application's ability to generate traffic.
|
|
//
|
|
// AlrDetector provides a signal that can be utilized to adjust
|
|
// estimate bandwidth.
|
|
// Note: This class is not thread-safe.
|
|
class AlrDetector {
|
|
public:
|
|
AlrDetector();
|
|
explicit AlrDetector(RtcEventLog* event_log);
|
|
~AlrDetector();
|
|
|
|
void OnBytesSent(size_t bytes_sent, int64_t send_time_ms);
|
|
|
|
// Set current estimated bandwidth.
|
|
void SetEstimatedBitrate(int bitrate_bps);
|
|
|
|
// Returns time in milliseconds when the current application-limited region
|
|
// started or empty result if the sender is currently not application-limited.
|
|
absl::optional<int64_t> GetApplicationLimitedRegionStartTime() const;
|
|
|
|
// 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.
|
|
static constexpr int kDefaultAlrBandwidthUsagePercent = 65;
|
|
static constexpr int kDefaultAlrStartBudgetLevelPercent = 80;
|
|
static constexpr int kDefaultAlrStopBudgetLevelPercent = 50;
|
|
|
|
void UpdateBudgetWithElapsedTime(int64_t delta_time_ms);
|
|
void UpdateBudgetWithBytesSent(size_t bytes_sent);
|
|
|
|
private:
|
|
int bandwidth_usage_percent_;
|
|
int alr_start_budget_level_percent_;
|
|
int alr_stop_budget_level_percent_;
|
|
|
|
absl::optional<int64_t> last_send_time_ms_;
|
|
|
|
IntervalBudget alr_budget_;
|
|
absl::optional<int64_t> alr_started_time_ms_;
|
|
|
|
RtcEventLog* event_log_;
|
|
};
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_CONGESTION_CONTROLLER_GOOG_CC_ALR_DETECTOR_H_
|