| // 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 |