Home | History | Annotate | Download | only in debug
      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