| // Copyright 2012 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. |
| |
| #include "cc/debug/paint_time_counter.h" |
| |
| namespace cc { |
| |
| // static |
| scoped_ptr<PaintTimeCounter> PaintTimeCounter::Create() { |
| return make_scoped_ptr(new PaintTimeCounter()); |
| } |
| |
| PaintTimeCounter::PaintTimeCounter() |
| : can_save_paint_time_delta_(false) { |
| } |
| |
| void PaintTimeCounter::SavePaintTime(const base::TimeDelta& total_paint_time) { |
| if (can_save_paint_time_delta_) { |
| base::TimeDelta paint_time = total_paint_time - last_total_paint_time_; |
| ring_buffer_.SaveToBuffer(paint_time); |
| } |
| |
| last_total_paint_time_ = total_paint_time; |
| can_save_paint_time_delta_ = true; |
| } |
| |
| void PaintTimeCounter::GetMinAndMaxPaintTime(base::TimeDelta* min, |
| base::TimeDelta* max) const { |
| *min = base::TimeDelta::FromDays(1); |
| *max = base::TimeDelta(); |
| |
| for (RingBufferType::Iterator it = ring_buffer_.Begin(); it; ++it) { |
| const base::TimeDelta paint_time = **it; |
| |
| if (paint_time < *min) |
| *min = paint_time; |
| if (paint_time > *max) |
| *max = paint_time; |
| } |
| |
| if (*min > *max) |
| *min = *max; |
| } |
| |
| void PaintTimeCounter::ClearHistory() { |
| ring_buffer_.Clear(); |
| can_save_paint_time_delta_ = false; |
| } |
| |
| } // namespace cc |