-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtimer.cpp
More file actions
68 lines (59 loc) · 1.27 KB
/
timer.cpp
File metadata and controls
68 lines (59 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "timer.h"
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/resource.h>
static inline
double seconds(const struct timeval &time) {
return ((double)time.tv_sec) + (((double)time.tv_usec)/1000000.0);
}
Timer::Timer()
: userTime(0.0)
, systemTime(0.0)
, wallTime(0.0)
{}
void Timer::start()
{
struct rusage usage;
struct timeval todTime;
if (0 != getrusage(RUSAGE_SELF, &usage)) {
perror("getrusage failed");
exit(1);
}
if (0 != gettimeofday(&todTime, 0)) {
perror("gettimeofday failed");
exit(1);
}
userTime = seconds(usage.ru_utime);
systemTime = seconds(usage.ru_stime);
wallTime = seconds(todTime);
}
void Timer::stop()
{
struct rusage usage;
struct timeval todTime;
if (0 != getrusage(RUSAGE_SELF, &usage)) {
perror("getrusage failed");
exit(1);
}
if (0 != gettimeofday(&todTime, 0)) {
perror("gettimeofday failed");
exit(1);
}
userTime = seconds(usage.ru_utime)-userTime;
systemTime = seconds(usage.ru_stime)-systemTime;
wallTime = seconds(todTime)-wallTime;
}
double Timer::user() {
return userTime;
}
double Timer::system() {
return systemTime;
}
double Timer::total() {
return userTime+systemTime;
}
double Timer::wall() {
return wallTime;
}