30 #include <sys/resource.h>
37 typedef struct rusage RUsage;
39 const RUsage m_rusage;
47 return Now(RUSAGE_SELF);
52 return Now(RUSAGE_THREAD);
62 long UserMilliseconds()
64 return m_rusage.ru_utime.tv_sec * 1000 + m_rusage.ru_utime.tv_usec / 1000;
67 long SystemMilliseconds()
69 return m_rusage.ru_stime.tv_sec * 1000 + m_rusage.ru_stime.tv_usec / 1000;
72 long TotalMilliseconds()
74 return UserMilliseconds() + SystemMilliseconds();
78 long UserMicroseconds()
80 return m_rusage.ru_utime.tv_sec * 1000000 + m_rusage.ru_utime.tv_usec;
83 long SystemMicroseconds()
85 return m_rusage.ru_stime.tv_sec * 1000000 + m_rusage.ru_stime.tv_usec;
88 long TotalMicroseconds()
90 return UserMicroseconds() + SystemMicroseconds();
96 long uus = (lhs.m_rusage.ru_utime.tv_sec * 1000000 + lhs.m_rusage.ru_utime.tv_usec) -
97 (rhs.m_rusage.ru_utime.tv_sec * 1000000 + rhs.m_rusage.ru_utime.tv_usec);
99 long sus = (lhs.m_rusage.ru_stime.tv_sec * 1000000 + lhs.m_rusage.ru_stime.tv_usec) -
100 (rhs.m_rusage.ru_stime.tv_sec * 1000000 + rhs.m_rusage.ru_stime.tv_usec);
102 t.ru_utime.tv_sec = uus / 1000000;
103 t.ru_utime.tv_usec = uus % 1000000;
105 t.ru_stime.tv_sec = sus / 1000000;
106 t.ru_stime.tv_usec = sus % 1000000;
108 t.ru_nvcsw = lhs.m_rusage.ru_nvcsw - rhs.m_rusage.ru_nvcsw;
109 t.ru_nivcsw = lhs.m_rusage.ru_nivcsw - rhs.m_rusage.ru_nivcsw;
110 t.ru_nsignals = lhs.m_rusage.ru_nsignals - rhs.m_rusage.ru_nsignals;
111 t.ru_msgrcv = lhs.m_rusage.ru_msgrcv - rhs.m_rusage.ru_msgrcv;
112 t.ru_msgsnd = lhs.m_rusage.ru_msgsnd - rhs.m_rusage.ru_msgsnd;
113 t.ru_oublock = lhs.m_rusage.ru_oublock - rhs.m_rusage.ru_oublock;
114 t.ru_inblock = lhs.m_rusage.ru_inblock - rhs.m_rusage.ru_inblock;
115 t.ru_nswap = lhs.m_rusage.ru_nswap - rhs.m_rusage.ru_nswap;
116 t.ru_minflt = lhs.m_rusage.ru_minflt - rhs.m_rusage.ru_minflt;
117 t.ru_majflt = lhs.m_rusage.ru_majflt - rhs.m_rusage.ru_majflt;
Definition: UsageTimer.h:34