1// Copyright 2013 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_DEBUG_PAINT_TIME_COUNTER_H_ 6#define CC_DEBUG_PAINT_TIME_COUNTER_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/scoped_ptr.h" 10#include "base/time/time.h" 11#include "cc/debug/ring_buffer.h" 12 13namespace cc { 14 15// Maintains a history of paint times for each frame 16class PaintTimeCounter { 17 public: 18 static scoped_ptr<PaintTimeCounter> Create(); 19 20 size_t HistorySize() const { return ring_buffer_.BufferSize(); } 21 22 // n = 0 returns the oldest and 23 // n = PaintTimeHistorySize() - 1 the most recent paint time. 24 base::TimeDelta GetPaintTimeOfRecentFrame(const size_t& n) const; 25 26 void SavePaintTime(const base::TimeDelta& total_paint_time); 27 void GetMinAndMaxPaintTime(base::TimeDelta* min, base::TimeDelta* max) const; 28 29 void ClearHistory(); 30 31 typedef RingBuffer<base::TimeDelta, 200> RingBufferType; 32 RingBufferType::Iterator Begin() const { return ring_buffer_.Begin(); } 33 RingBufferType::Iterator End() const { return ring_buffer_.End(); } 34 35 private: 36 PaintTimeCounter(); 37 38 RingBufferType ring_buffer_; 39 base::TimeDelta last_total_paint_time_; 40 bool can_save_paint_time_delta_; 41 42 DISALLOW_COPY_AND_ASSIGN(PaintTimeCounter); 43}; 44 45} // namespace cc 46 47#endif // CC_DEBUG_PAINT_TIME_COUNTER_H_ 48