Project import generated by Copybara. PiperOrigin-RevId: 237361882 Change-Id: I109a68f44db867b20f8c6a7732b0ce657133e52a
diff --git a/quic/core/quic_sustained_bandwidth_recorder.cc b/quic/core/quic_sustained_bandwidth_recorder.cc new file mode 100644 index 0000000..dd94a34 --- /dev/null +++ b/quic/core/quic_sustained_bandwidth_recorder.cc
@@ -0,0 +1,62 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/third_party/quiche/src/quic/core/quic_sustained_bandwidth_recorder.h" + +#include "net/third_party/quiche/src/quic/core/quic_bandwidth.h" +#include "net/third_party/quiche/src/quic/core/quic_time.h" +#include "net/third_party/quiche/src/quic/platform/api/quic_logging.h" + +namespace quic { + +QuicSustainedBandwidthRecorder::QuicSustainedBandwidthRecorder() + : has_estimate_(false), + is_recording_(false), + bandwidth_estimate_recorded_during_slow_start_(false), + bandwidth_estimate_(QuicBandwidth::Zero()), + max_bandwidth_estimate_(QuicBandwidth::Zero()), + max_bandwidth_timestamp_(0), + start_time_(QuicTime::Zero()) {} + +void QuicSustainedBandwidthRecorder::RecordEstimate(bool in_recovery, + bool in_slow_start, + QuicBandwidth bandwidth, + QuicTime estimate_time, + QuicWallTime wall_time, + QuicTime::Delta srtt) { + if (in_recovery) { + is_recording_ = false; + QUIC_DVLOG(1) << "Stopped recording at: " + << estimate_time.ToDebuggingValue(); + return; + } + + if (!is_recording_) { + // This is the first estimate of a new recording period. + start_time_ = estimate_time; + is_recording_ = true; + QUIC_DVLOG(1) << "Started recording at: " << start_time_.ToDebuggingValue(); + return; + } + + // If we have been recording for at least 3 * srtt, then record the latest + // bandwidth estimate as a valid sustained bandwidth estimate. + if (estimate_time - start_time_ >= 3 * srtt) { + has_estimate_ = true; + bandwidth_estimate_recorded_during_slow_start_ = in_slow_start; + bandwidth_estimate_ = bandwidth; + QUIC_DVLOG(1) << "New sustained bandwidth estimate (KBytes/s): " + << bandwidth_estimate_.ToKBytesPerSecond(); + } + + // Check for an increase in max bandwidth. + if (bandwidth > max_bandwidth_estimate_) { + max_bandwidth_estimate_ = bandwidth; + max_bandwidth_timestamp_ = wall_time.ToUNIXSeconds(); + QUIC_DVLOG(1) << "New max bandwidth estimate (KBytes/s): " + << max_bandwidth_estimate_.ToKBytesPerSecond(); + } +} + +} // namespace quic