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 13 namespace cc { 14 15 // Maintains a history of paint times for each frame 16 class 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