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#ifndef REMOTING_TEST_LEAKY_BUCKET_H_ 6#define REMOTING_TEST_LEAKY_BUCKET_H_ 7 8#include "base/basictypes.h" 9#include "base/time/time.h" 10 11namespace remoting { 12 13class LeakyBucket { 14 public: 15 // |depth| is in bytes. |rate| is specified in bytes/second. 16 LeakyBucket(double depth, double rate); 17 ~LeakyBucket(); 18 19 // Adds a packet of the given |size| to the bucket and returns packet delay. 20 // Returns TimeDelta::Max() if the packet overflows the bucket, in which case 21 // it should be dropped. 22 base::TimeDelta AddPacket(int size); 23 24 private: 25 void UpdateLevel(); 26 27 double depth_; 28 double rate_; 29 30 double level_; 31 base::TimeTicks last_update_; 32 33 DISALLOW_COPY_AND_ASSIGN(LeakyBucket); 34}; 35 36} // namespace remoting 37 38#endif // REMOTING_TEST_LEAKY_BUCKET_H_ 39