// Copyright 2014 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.

#ifndef BASE_TIMER_LAP_TIMER_H_
#define BASE_TIMER_LAP_TIMER_H_

#include "base/base_export.h"
#include "base/macros.h"
#include "base/sequence_checker.h"
#include "base/time/time.h"

namespace base {

// LapTimer is used to calculate average times per "Lap" in perf tests.
// NextLap increments the lap counter, used in counting the per lap averages.
// If you initialize the LapTimer with a non zero |warmup_laps|, it will ignore
// the times for that many laps at the start.
// If you set the |time_limit| then you can use HasTimeLimitExpired() to see if
// the current accumulated time has crossed that threshold, with an optimization
// that it only tests this every |check_interval| laps.
//
// See base/timer/lap_timer_unittest.cc for a usage example.
//
class BASE_EXPORT LapTimer {
 public:
  enum class TimerMethod {
    // Measures CPU time consumed by the thread running the LapTimer.
    kUseThreadTicks,
    // Measures elapsed wall time (default).
    kUseTimeTicks
  };

  LapTimer(int warmup_laps,
           TimeDelta time_limit,
           int check_interval,
           TimerMethod timing_method = TimerMethod::kUseTimeTicks);
  // Create LapTimer with sensible default values.
  LapTimer(TimerMethod timing_method = TimerMethod::kUseTimeTicks);
  // Sets the timer back to its starting state.
  void Reset();
  // Sets the start point to now.
  void Start();
  // Returns true if there are no more warmup laps to do.
  bool IsWarmedUp() const;
  // Advance the lap counter and update the accumulated time.
  // The accumulated time is only updated every check_interval laps.
  // If accumulating then the start point will also be updated.
  void NextLap();
  // Returns true if the stored time has exceeded the time limit specified.
  // May cause a call to Store().
  bool HasTimeLimitExpired() const;
  // The average time taken per lap.
  TimeDelta TimePerLap() const;
  // The number of laps per second.
  float LapsPerSecond() const;
  // The number of laps recorded.
  int NumLaps() const;

 private:
  // Returns true if all lap times have been timed. Only true every n'th
  // lap, where n = check_interval.
  bool HasTimedAllLaps() const;
  // Returns the current accumulated time.
  TimeDelta GetAccumulatedTime() const;

  const int warmup_laps_;
  const TimeDelta time_limit_;
  const int check_interval_;
  const TimerMethod method_;

  ThreadTicks start_thread_ticks_;
  TimeTicks start_time_ticks_;

  ThreadTicks last_timed_lap_end_thread_ticks_;
  TimeTicks last_timed_lap_end_ticks_;

  int num_laps_;
  int remaining_warmups_ = 0;
  int remaining_no_check_laps_ = 0;

  SEQUENCE_CHECKER(sequence_checker_);
  DISALLOW_COPY_AND_ASSIGN(LapTimer);
};
}  // namespace base

#endif  // BASE_TIMER_LAP_TIMER_H_
