Home | History | Annotate | Download | only in test
      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 #include "cc/test/lap_timer.h"
      6 
      7 #include "base/logging.h"
      8 
      9 namespace cc {
     10 
     11 LapTimer::LapTimer(int warmup_laps,
     12                    base::TimeDelta time_limit,
     13                    int check_interval)
     14     : warmup_laps_(warmup_laps),
     15       time_limit_(time_limit),
     16       check_interval_(check_interval) {
     17   DCHECK_GT(check_interval, 0);
     18   Reset();
     19 }
     20 
     21 void LapTimer::Reset() {
     22   accumulator_ = base::TimeDelta();
     23   num_laps_ = 0;
     24   accumulated_ = true;
     25   remaining_warmups_ = warmup_laps_;
     26   Start();
     27 }
     28 
     29 void LapTimer::Start() { start_time_ = base::TimeTicks::HighResNow(); }
     30 
     31 bool LapTimer::IsWarmedUp() { return remaining_warmups_ <= 0; }
     32 
     33 void LapTimer::NextLap() {
     34   if (!IsWarmedUp()) {
     35     --remaining_warmups_;
     36     if (IsWarmedUp()) {
     37       Start();
     38     }
     39     return;
     40   }
     41   ++num_laps_;
     42   accumulated_ = (num_laps_ % check_interval_) == 0;
     43   if (accumulated_) {
     44     base::TimeTicks now = base::TimeTicks::HighResNow();
     45     accumulator_ += now - start_time_;
     46     start_time_ = now;
     47   }
     48 }
     49 
     50 bool LapTimer::HasTimeLimitExpired() { return accumulator_ >= time_limit_; }
     51 
     52 float LapTimer::MsPerLap() {
     53   DCHECK(accumulated_);
     54   return accumulator_.InMillisecondsF() / num_laps_;
     55 }
     56 
     57 float LapTimer::LapsPerSecond() {
     58   DCHECK(accumulated_);
     59   return num_laps_ / accumulator_.InSecondsF();
     60 }
     61 
     62 int LapTimer::NumLaps() { return num_laps_; }
     63 
     64 }  // namespace cc
     65