1// Copyright 2014 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_LAP_TIMER_H_
6#define CC_DEBUG_LAP_TIMER_H_
7
8#include "base/time/time.h"
9#include "cc/base/cc_export.h"
10
11namespace cc {
12
13// LapTimer is used to calculate average times per "Lap" in perf tests.
14// Current() reports the time since the last call to Start().
15// Store() adds the time since the last call to Start() to the accumulator, and
16// resets the start time to now. Stored() returns the accumulated time.
17// NextLap increments the lap counter, used in counting the per lap averages.
18// If you initialize the LapTimer with a non zero warmup_laps, it will ignore
19// the times for that many laps at the start.
20// If you set the time_limit then you can use HasTimeLimitExpired() to see if
21// the current accumulated time has crossed that threshold, with an optimization
22// that it only tests this every check_interval laps.
23class CC_EXPORT LapTimer {
24 public:
25  LapTimer(int warmup_laps, base::TimeDelta time_limit, int check_interval);
26  // Resets the timer back to it's starting state.
27  void Reset();
28  // Sets the start point to now.
29  void Start();
30  // Returns true if there are no more warmup laps to do.
31  bool IsWarmedUp();
32  // Advance the lap counter and update the accumulated time.
33  // The accumulated time is only updated every check_interval laps.
34  // If accumulating then the start point will also be updated.
35  void NextLap();
36  // Returns true if the stored time has exceeded the time limit specified.
37  // May cause a call to Store().
38  bool HasTimeLimitExpired();
39  // Returns true if all lap times have been timed. Only true every n'th
40  // lap, where n = check_interval.
41  bool HasTimedAllLaps();
42  // The average milliseconds per lap.
43  float MsPerLap();
44  // The number of laps per second.
45  float LapsPerSecond();
46  // The number of laps recorded.
47  int NumLaps();
48
49 private:
50  base::TimeTicks start_time_;
51  base::TimeDelta accumulator_;
52  int num_laps_;
53  int warmup_laps_;
54  int remaining_warmups_;
55  int remaining_no_check_laps_;
56  base::TimeDelta time_limit_;
57  int check_interval_;
58
59  DISALLOW_COPY_AND_ASSIGN(LapTimer);
60};
61
62}  // namespace cc
63
64#endif  // CC_DEBUG_LAP_TIMER_H_
65