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