OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "net/quic/quic_sustained_bandwidth_recorder.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "net/quic/quic_bandwidth.h" | |
9 #include "net/quic/quic_time.h" | |
10 | |
11 namespace net { | |
12 | |
13 QuicSustainedBandwidthRecorder::QuicSustainedBandwidthRecorder() | |
14 : has_estimate_(false), | |
15 is_recording_(false), | |
16 bandwidth_estimate_recorded_during_slow_start_(false), | |
17 bandwidth_estimate_(QuicBandwidth::Zero()), | |
18 max_bandwidth_estimate_(QuicBandwidth::Zero()), | |
19 max_bandwidth_timestamp_(0), | |
20 start_time_(QuicTime::Zero()) {} | |
21 | |
22 void QuicSustainedBandwidthRecorder::RecordEstimate(bool in_recovery, | |
23 bool in_slow_start, | |
24 QuicBandwidth bandwidth, | |
25 QuicTime estimate_time, | |
26 QuicWallTime wall_time, | |
27 QuicTime::Delta srtt) { | |
28 if (in_recovery) { | |
29 is_recording_ = false; | |
30 DVLOG(1) << "Stopped recording at: " << estimate_time.ToDebuggingValue(); | |
31 return; | |
32 } | |
33 | |
34 if (!is_recording_) { | |
35 // This is the first estimate of a new recording period. | |
36 start_time_ = estimate_time; | |
37 is_recording_ = true; | |
38 DVLOG(1) << "Started recording at: " << start_time_.ToDebuggingValue(); | |
39 return; | |
40 } | |
41 | |
42 // If we have been recording for at least 3 * srtt, then record the latest | |
43 // bandwidth estimate as a valid sustained bandwidth estimate. | |
44 if (estimate_time - start_time_ >= 3 * srtt) { | |
45 has_estimate_ = true; | |
46 bandwidth_estimate_recorded_during_slow_start_ = in_slow_start; | |
47 bandwidth_estimate_ = bandwidth; | |
48 DVLOG(1) << "New sustained bandwidth estimate (KBytes/s): " | |
49 << bandwidth_estimate_.ToKBytesPerSecond(); | |
50 } | |
51 | |
52 // Check for an increase in max bandwidth. | |
53 if (bandwidth > max_bandwidth_estimate_) { | |
54 max_bandwidth_estimate_ = bandwidth; | |
55 max_bandwidth_timestamp_ = wall_time.ToUNIXSeconds(); | |
56 DVLOG(1) << "New max bandwidth estimate (KBytes/s): " | |
57 << max_bandwidth_estimate_.ToKBytesPerSecond(); | |
58 } | |
59 } | |
60 | |
61 } // namespace net | |
OLD | NEW |