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 CC_BASE_ROLLING_TIME_DELTA_HISTORY_H_
6#define CC_BASE_ROLLING_TIME_DELTA_HISTORY_H_
7
8#include <deque>
9#include <set>
10
11#include "base/time/time.h"
12#include "cc/base/cc_export.h"
13
14namespace cc {
15
16// Stores a limited number of samples. When the maximum size is reached, each
17// insertion results in the deletion of the oldest remaining sample.
18class CC_EXPORT RollingTimeDeltaHistory {
19 public:
20  explicit RollingTimeDeltaHistory(size_t max_size);
21
22  ~RollingTimeDeltaHistory();
23
24  void InsertSample(base::TimeDelta time);
25
26  void Clear();
27
28  // Returns the smallest sample that is greater than or equal to the specified
29  // percent of samples. If there aren't any samples, returns base::TimeDelta().
30  base::TimeDelta Percentile(double percent) const;
31
32 private:
33  typedef std::multiset<base::TimeDelta> TimeDeltaMultiset;
34
35  TimeDeltaMultiset sample_set_;
36  std::deque<TimeDeltaMultiset::iterator> chronological_sample_deque_;
37  size_t max_size_;
38
39  DISALLOW_COPY_AND_ASSIGN(RollingTimeDeltaHistory);
40};
41
42}  // namespace cc
43
44#endif  // CC_BASE_ROLLING_TIME_DELTA_HISTORY_H_
45