17#include <sys/resource.h>
34static int getrusage_thread(
struct rusage &rusage)
37 thread_basic_info_data_t info{};
38 mach_msg_type_number_t info_count = THREAD_BASIC_INFO_COUNT;
39 kern_return_t kern_err;
41 kern_err = thread_info(mach_thread_self(),
45 if (kern_err == KERN_SUCCESS)
47 rusage.ru_utime.tv_sec = info.user_time.seconds;
48 rusage.ru_utime.tv_usec = info.user_time.microseconds;
49 rusage.ru_stime.tv_sec = info.system_time.seconds;
50 rusage.ru_stime.tv_usec = info.system_time.microseconds;
76inline double cpu_time(
const bool thread =
false)
87 ret = getrusage_thread(usage);
89 ret = getrusage(RUSAGE_SELF, &usage);
91 ret = getrusage((thread ? RUSAGE_THREAD : RUSAGE_SELF), &usage);
95 throw Exception(
"getrusage() call failed: " + std::string(strerror(errno)));
97 double utime =
static_cast<double>(usage.ru_utime.tv_sec) + (
static_cast<double>(usage.ru_utime.tv_usec / 1000000));
98 double stime =
static_cast<double>(usage.ru_stime.tv_sec) + (
static_cast<double>(usage.ru_stime.tv_usec / 1000000));
100 return utime + stime;
102 catch (
const std::exception &e)
Support deferred server-side state creation when client connects.
double cpu_time(const bool thread=false)