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_protocol.h" 17#include "net/quic/quic_time.h" 18 19namespace net { 20 21class NET_EXPORT_PRIVATE LeakyBucket { 22 public: 23 explicit LeakyBucket(QuicBandwidth draining_rate); 24 25 // Set the rate at which the bytes leave the buffer. 26 void SetDrainingRate(QuicTime now, QuicBandwidth draining_rate); 27 28 // Add data to the buffer. 29 void Add(QuicTime now, QuicByteCount bytes); 30 31 // Time until the buffer is empty. 32 QuicTime::Delta TimeRemaining(QuicTime now) const; 33 34 // Number of bytes in the buffer. 35 QuicByteCount BytesPending(QuicTime now); 36 37 private: 38 void Update(QuicTime now); 39 40 QuicByteCount bytes_; 41 QuicTime time_last_updated_; 42 QuicBandwidth draining_rate_; 43 44 DISALLOW_COPY_AND_ASSIGN(LeakyBucket); 45}; 46 47} // namespace net 48 49#endif // NET_QUIC_CONGESTION_CONTROL_LEAKY_BUCKET_H_ 50