Add explicit |forceOnlineSignin| to user pod status
[chromium-blink-merge.git] / net / quic / congestion_control / channel_estimator.h
blob9be8031145bb9edc449adc5d6e1724f825921bac
1 // Copyright (c) 2013 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.
5 // Based on the inter arrival time of the received packets relative to the time
6 // those packets where sent we can estimate the max capacity of the channel.
7 // We can only use packet pair that are sent out faster than the acctual
8 // channel capacity.
9 #ifndef NET_QUIC_CONGESTION_CONTROL_CHANNEL_ESTIMATOR_H_
10 #define NET_QUIC_CONGESTION_CONTROL_CHANNEL_ESTIMATOR_H_
12 #include <list>
13 #include <map>
15 #include "base/basictypes.h"
16 #include "net/base/net_export.h"
17 #include "net/quic/congestion_control/quic_max_sized_map.h"
18 #include "net/quic/quic_bandwidth.h"
19 #include "net/quic/quic_protocol.h"
20 #include "net/quic/quic_time.h"
22 namespace net {
24 enum ChannelEstimateState {
25 kChannelEstimateUnknown = 0,
26 kChannelEstimateUncertain = 1,
27 kChannelEstimateGood = 2
30 class NET_EXPORT_PRIVATE ChannelEstimator {
31 public:
32 ChannelEstimator();
33 ~ChannelEstimator();
35 // This method should be called each time we acquire a receive time for a
36 // packet we previously sent. It calculates deltas between consecutive
37 // receive times, and may use that to update the channel bandwidth estimate.
38 void OnAcknowledgedPacket(QuicPacketSequenceNumber sequence_number,
39 QuicByteCount packet_size,
40 QuicTime send_time,
41 QuicTime receive_time);
43 // Get the current estimated state and channel capacity.
44 // Note: estimate will not be valid when kChannelEstimateUnknown is returned.
45 ChannelEstimateState GetChannelEstimate(QuicBandwidth* estimate) const;
47 private:
48 void UpdateFilter(QuicTime::Delta received_delta, QuicByteCount size_delta,
49 QuicPacketSequenceNumber sequence_number);
51 QuicPacketSequenceNumber last_sequence_number_;
52 QuicTime last_send_time_;
53 QuicTime last_receive_time_;
54 QuicMaxSizedMap<QuicBandwidth, QuicPacketSequenceNumber>
55 sorted_bitrate_estimates_;
57 DISALLOW_COPY_AND_ASSIGN(ChannelEstimator);
60 } // namespace net
61 #endif // NET_QUIC_CONGESTION_CONTROL_CHANNEL_ESTIMATOR_H_