Home | History | Annotate | Download | only in src
      1 #ifndef BENCHMARK_TIMERS_H
      2 #define BENCHMARK_TIMERS_H
      3 
      4 #include <chrono>
      5 #include <string>
      6 
      7 namespace benchmark {
      8 
      9 // Return the CPU usage of the current process
     10 double ProcessCPUUsage();
     11 
     12 // Return the CPU usage of the children of the current process
     13 double ChildrenCPUUsage();
     14 
     15 // Return the CPU usage of the current thread
     16 double ThreadCPUUsage();
     17 
     18 #if defined(HAVE_STEADY_CLOCK)
     19 template <bool HighResIsSteady = std::chrono::high_resolution_clock::is_steady>
     20 struct ChooseSteadyClock {
     21   typedef std::chrono::high_resolution_clock type;
     22 };
     23 
     24 template <>
     25 struct ChooseSteadyClock<false> {
     26   typedef std::chrono::steady_clock type;
     27 };
     28 #endif
     29 
     30 struct ChooseClockType {
     31 #if defined(HAVE_STEADY_CLOCK)
     32   typedef ChooseSteadyClock<>::type type;
     33 #else
     34   typedef std::chrono::high_resolution_clock type;
     35 #endif
     36 };
     37 
     38 inline double ChronoClockNow() {
     39   typedef ChooseClockType::type ClockType;
     40   using FpSeconds = std::chrono::duration<double, std::chrono::seconds::period>;
     41   return FpSeconds(ClockType::now().time_since_epoch()).count();
     42 }
     43 
     44 std::string LocalDateTimeString();
     45 
     46 }  // end namespace benchmark
     47 
     48 #endif  // BENCHMARK_TIMERS_H
     49