Mechanically generated by running this command: tools_webrtc/do-renames.sh update all-renames.txt && git cl format Then manually updating: tools_webrtc/sanitizers/tsan_suppressions_webrtc.cc Bug: webrtc:10159 No-Presubmit: true No-Tree-Checks: true No-Try: true Change-Id: I54824cd91dada8fc3ee3d098f971bc319d477833 Reviewed-on: https://webrtc-review.googlesource.com/c/115653 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26226}
88 lines
3.0 KiB
C++
88 lines
3.0 KiB
C++
/*
|
|
* Copyright (c) 2018 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.
|
|
*/
|
|
// A convenience class to store RTT samples and calculate smoothed RTT.
|
|
// From the Quic BBR implementation in Chromium.
|
|
|
|
#ifndef MODULES_CONGESTION_CONTROLLER_BBR_RTT_STATS_H_
|
|
#define MODULES_CONGESTION_CONTROLLER_BBR_RTT_STATS_H_
|
|
|
|
#include "api/units/time_delta.h"
|
|
#include "api/units/timestamp.h"
|
|
#include "rtc_base/checks.h"
|
|
#include "rtc_base/constructor_magic.h"
|
|
#include "rtc_base/logging.h"
|
|
|
|
namespace webrtc {
|
|
namespace bbr {
|
|
|
|
class RttStats {
|
|
public:
|
|
RttStats();
|
|
|
|
// Updates the RTT from an incoming ack which is received |send_delta| after
|
|
// the packet is sent and the peer reports the ack being delayed |ack_delay|.
|
|
void UpdateRtt(TimeDelta send_delta, TimeDelta ack_delay, Timestamp now);
|
|
|
|
// Causes the smoothed_rtt to be increased to the latest_rtt if the latest_rtt
|
|
// is larger. The mean deviation is increased to the most recent deviation if
|
|
// it's larger.
|
|
void ExpireSmoothedMetrics();
|
|
|
|
// Called when connection migrates and RTT measurement needs to be reset.
|
|
void OnConnectionMigration();
|
|
|
|
// Returns the EWMA smoothed RTT for the connection.
|
|
// May return Zero if no valid updates have occurred.
|
|
TimeDelta smoothed_rtt() const { return smoothed_rtt_; }
|
|
|
|
// Returns the EWMA smoothed RTT prior to the most recent RTT sample.
|
|
TimeDelta previous_srtt() const { return previous_srtt_; }
|
|
|
|
int64_t initial_rtt_us() const { return initial_rtt_us_; }
|
|
|
|
// Sets an initial RTT to be used for SmoothedRtt before any RTT updates.
|
|
void set_initial_rtt_us(int64_t initial_rtt_us) {
|
|
RTC_DCHECK_GE(initial_rtt_us, 0);
|
|
if (initial_rtt_us <= 0) {
|
|
RTC_LOG(LS_ERROR) << "Attempt to set initial rtt to <= 0.";
|
|
return;
|
|
}
|
|
initial_rtt_us_ = initial_rtt_us;
|
|
}
|
|
|
|
// The most recent RTT measurement.
|
|
// May return Zero if no valid updates have occurred.
|
|
TimeDelta latest_rtt() const { return latest_rtt_; }
|
|
|
|
// Returns the min_rtt for the entire connection.
|
|
// May return Zero if no valid updates have occurred.
|
|
TimeDelta min_rtt() const { return min_rtt_; }
|
|
|
|
TimeDelta mean_deviation() const { return mean_deviation_; }
|
|
|
|
private:
|
|
TimeDelta latest_rtt_;
|
|
TimeDelta min_rtt_;
|
|
TimeDelta smoothed_rtt_;
|
|
TimeDelta previous_srtt_;
|
|
// Mean RTT deviation during this session.
|
|
// Approximation of standard deviation, the error is roughly 1.25 times
|
|
// larger than the standard deviation, for a normally distributed signal.
|
|
TimeDelta mean_deviation_;
|
|
int64_t initial_rtt_us_;
|
|
|
|
RTC_DISALLOW_COPY_AND_ASSIGN(RttStats);
|
|
};
|
|
|
|
} // namespace bbr
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_CONGESTION_CONTROLLER_BBR_RTT_STATS_H_
|