// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_BASE_ROLLING_TIME_DELTA_HISTORY_H_ #define CC_BASE_ROLLING_TIME_DELTA_HISTORY_H_ #include #include #include "base/time/time.h" #include "cc/base/cc_export.h" namespace cc { // Stores a limited number of samples. When the maximum size is reached, each // insertion results in the deletion of the oldest remaining sample. class CC_EXPORT RollingTimeDeltaHistory { public: explicit RollingTimeDeltaHistory(size_t max_size); ~RollingTimeDeltaHistory(); void InsertSample(base::TimeDelta time); void Clear(); // Returns the smallest sample that is greater than or equal to the specified // percent of samples. If there aren't any samples, returns base::TimeDelta(). base::TimeDelta Percentile(double percent) const; private: typedef std::multiset TimeDeltaMultiset; TimeDeltaMultiset sample_set_; std::deque chronological_sample_deque_; size_t max_size_; DISALLOW_COPY_AND_ASSIGN(RollingTimeDeltaHistory); }; } // namespace cc #endif // CC_BASE_ROLLING_TIME_DELTA_HISTORY_H_