- add sources.
[platform/framework/web/crosswalk.git] / src / net / quic / congestion_control / leaky_bucket.h
1 // Copyright (c) 2012 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 // Helper class to track the rate data can leave the buffer for pacing.
6 // A leaky bucket drains the data at a constant rate regardless of fullness of
7 // the buffer.
8 // See http://en.wikipedia.org/wiki/Leaky_bucket for more details.
9
10 #ifndef NET_QUIC_CONGESTION_CONTROL_LEAKY_BUCKET_H_
11 #define NET_QUIC_CONGESTION_CONTROL_LEAKY_BUCKET_H_
12
13 #include "base/basictypes.h"
14 #include "net/base/net_export.h"
15 #include "net/quic/quic_bandwidth.h"
16 #include "net/quic/quic_clock.h"
17 #include "net/quic/quic_protocol.h"
18 #include "net/quic/quic_time.h"
19
20 namespace net {
21
22 class NET_EXPORT_PRIVATE LeakyBucket {
23  public:
24   explicit LeakyBucket(QuicBandwidth draining_rate);
25
26   // Set the rate at which the bytes leave the buffer.
27   void SetDrainingRate(QuicTime now, QuicBandwidth draining_rate);
28
29   // Add data to the buffer.
30   void Add(QuicTime now, QuicByteCount bytes);
31
32   // Time until the buffer is empty.
33   QuicTime::Delta TimeRemaining(QuicTime now);
34
35   // Number of bytes in the buffer.
36   QuicByteCount BytesPending(QuicTime now);
37
38  private:
39   void Update(QuicTime now);
40
41   QuicByteCount bytes_;
42   QuicTime time_last_updated_;
43   QuicBandwidth draining_rate_;
44
45   DISALLOW_COPY_AND_ASSIGN(LeakyBucket);
46 };
47
48 }  // namespace net
49
50 #endif  // NET_QUIC_CONGESTION_CONTROL_LEAKY_BUCKET_H_