44#ifndef NIMBLE_LIGHTWEIGHT_STOPWATCH_H
45#define NIMBLE_LIGHTWEIGHT_STOPWATCH_H
53 typedef decltype(std::chrono::high_resolution_clock::now())
time;
54 typedef std::chrono::duration<double, std::ratio<1, 1>>
seconds;
63 return (std::chrono::high_resolution_clock::now() -
_start).count();
78 return seconds(std::chrono::high_resolution_clock::now() -
_start).count();
83 _start = std::chrono::high_resolution_clock::now();
85 template <
class Function,
class... Args>
91 f(std::forward<Args>(inputs)...);
97 auto epoch_duration = std::chrono::high_resolution_clock::now().time_since_epoch();
98 auto duration_in_seconds = std::chrono::duration_cast<std::chrono::seconds>(epoch_duration);
100 (std::chrono::duration_cast<std::chrono::nanoseconds>(epoch_duration - duration_in_seconds).count());
101 std::time_t t = duration_in_seconds.count();
104 if ((end = std::strftime(buffer, 100,
"%Y.%m.%e.%H.%M.%S.", std::localtime(&t)))) {
105 buffer[end] =
'0' + (
nanoseconds / 100000000 % 10);
106 buffer[end + 1] =
'0' + (
nanoseconds / 10000000 % 10);
107 buffer[end + 2] =
'0' + (
nanoseconds / 1000000 % 10);
108 buffer[end + 3] =
'0' + (
nanoseconds / 100000 % 10);
109 buffer[end + 4] =
'0' + (
nanoseconds / 10000 % 10);
114 buffer[end + 9] =
'\0';
121 auto epoch_duration = std::chrono::high_resolution_clock::now().time_since_epoch();
122 auto duration_in_seconds = std::chrono::duration_cast<std::chrono::seconds>(epoch_duration);
124 (std::chrono::duration_cast<std::chrono::microseconds>(epoch_duration - duration_in_seconds).count());
125 std::time_t t = duration_in_seconds.count();
128 if ((end = std::strftime(buffer, 100,
"%Y.%m.%d.%H.%M.%S.", std::localtime(&t)))) {
135 buffer[end + 6] =
'\0';
142 auto epoch_duration = std::chrono::high_resolution_clock::now().time_since_epoch();
143 auto duration_in_seconds = std::chrono::duration_cast<std::chrono::seconds>(epoch_duration);
145 (std::chrono::duration_cast<std::chrono::milliseconds>(epoch_duration - duration_in_seconds).count());
146 std::time_t t = duration_in_seconds.count();
149 if ((end = std::strftime(buffer, 100,
"%Y.%m.%e.%H.%M.%S.", std::localtime(&t)))) {
150 size_t milliseconds = (std::chrono::duration_cast<std::chrono::milliseconds>(
151 std::chrono::high_resolution_clock::now().time_since_epoch())
156 buffer[end + 3] =
'\0';
Definition nimble.quanta.arrayview.h:53
Definition kokkos_contact_manager.h:49
Definition nimble.quanta.stopwatch.h:52
static double timefunction(Function &&f, Args &&... inputs)
Definition nimble.quanta.stopwatch.h:87
decltype((time{} - time{}).count()) nanoseconds
Definition nimble.quanta.stopwatch.h:57
static std::string get_nanosecond_timestamp()
Definition nimble.quanta.stopwatch.h:95
static std::string get_microsecond_timestamp()
Definition nimble.quanta.stopwatch.h:119
std::chrono::duration< double, std::micro > microseconds
Definition nimble.quanta.stopwatch.h:56
std::chrono::duration< double, std::milli > milliseconds
Definition nimble.quanta.stopwatch.h:55
time _start
Definition nimble.quanta.stopwatch.h:59
nanoseconds age_nano()
Definition nimble.quanta.stopwatch.h:61
static std::string get_millisecond_timestamp()
Definition nimble.quanta.stopwatch.h:140
decltype((time{} - time{})) duration
Definition nimble.quanta.stopwatch.h:58
double age()
Definition nimble.quanta.stopwatch.h:76
void reset()
Definition nimble.quanta.stopwatch.h:81
double age_micro()
Definition nimble.quanta.stopwatch.h:66
double age_milli()
Definition nimble.quanta.stopwatch.h:71
std::chrono::duration< double, std::ratio< 1, 1 > > seconds
Definition nimble.quanta.stopwatch.h:54
decltype(std::chrono::high_resolution_clock::now()) time
Definition nimble.quanta.stopwatch.h:53