1 // Copyright 2018 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 UTIL_TICKS_H_
6 #define UTIL_TICKS_H_
7 
8 #include <stdint.h>
9 
10 using Ticks = uint64_t;
11 
12 class TickDelta {
13  public:
TickDelta(uint64_t delta)14   explicit TickDelta(uint64_t delta) : delta_(delta) {}
15 
InSecondsF()16   double InSecondsF() const { return delta_ / 1000000000.0; }
InMillisecondsF()17   double InMillisecondsF() const { return delta_ / 1000000.0; }
InMicrosecondsF()18   double InMicrosecondsF() const { return delta_ / 1000.0; }
InNanosecondsF()19   double InNanosecondsF() const { return delta_; }
20 
InSeconds()21   uint64_t InSeconds() const { return delta_ / 1000000000; }
InMilliseconds()22   uint64_t InMilliseconds() const { return delta_ / 1000000; }
InMicroseconds()23   uint64_t InMicroseconds() const { return delta_ / 1000; }
InNanoseconds()24   uint64_t InNanoseconds() const { return delta_; }
25 
raw()26   uint64_t raw() const { return delta_; }
27 
28  private:
29   uint64_t delta_;
30 };
31 
32 Ticks TicksNow();
33 
34 TickDelta TicksDelta(Ticks new_ticks, Ticks old_ticks);
35 
36 class ElapsedTimer {
37  public:
ElapsedTimer()38   ElapsedTimer() : start_(TicksNow()) {}
Elapsed()39   TickDelta Elapsed() { return TicksDelta(TicksNow(), start_); }
40 
41  private:
42   Ticks start_;
43 };
44 
45 #endif  // UTIL_TICKS_H_
46