text: // Copyright 2013 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_SCHEDULER_ROLLING_TIME_DELTA_HISTORY_H_
  #define CC_SCHEDULER_ROLLING_TIME_DELTA_HISTORY_H_
  
  #include <deque>
  #include <set>
  
  #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<base::TimeDelta> TimeDeltaMultiset;
  
    TimeDeltaMultiset sample_set_;
    std::deque<TimeDeltaMultiset::iterator> chronological_sample_deque_;
    size_t max_size_;
  
    DISALLOW_COPY_AND_ASSIGN(RollingTimeDeltaHistory);
  };
  
  }  // namespace cc
  
  #endif  // CC_SCHEDULER_ROLLING_TIME_DELTA_HISTORY_H_
  