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_ 51