// 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/quic/quic_sustained_bandwidth_recorder.h" #include "base/logging.h" #include "net/quic/quic_bandwidth.h" #include "net/quic/quic_time.h" namespace net { 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; 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; 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.Subtract(start_time_) >= srtt.Multiply(3)) { has_estimate_ = true; bandwidth_estimate_recorded_during_slow_start_ = in_slow_start; bandwidth_estimate_ = bandwidth; 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(); DVLOG(1) << "New max bandwidth estimate (KBytes/s): " << max_bandwidth_estimate_.ToKBytesPerSecond(); } } } // namespace net