blob: 3e9e304f39c8084854ca2a25c2f77b5a15c738f9 (
plain)
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
69
70
71
72
|
/* -----------------------------------------------------------------------------
*
* (c) The GHC Team 2005
*
* Machine-dependent time measurement functions
*
* ---------------------------------------------------------------------------*/
// Not POSIX, due to use of ru_majflt in getPageFaults()
// #include "rts/PosixSource.h"
#include "Rts.h"
#include "GetTime.h"
#include <time.h>
#include <sys/time.h>
void initializeTimer()
{
}
static Time getClockTime(clockid_t clock)
{
struct timespec ts;
int res = clock_gettime(clock, &ts);
if (res == 0) {
return SecondsToTime(ts.tv_sec) + NSToTime(ts.tv_nsec);
} else {
sysErrorBelch("clock_gettime");
stg_exit(EXIT_FAILURE);
}
}
Time getCurrentThreadCPUTime(void)
{
return getClockTime(CLOCK_MONOTONIC);
}
Time getProcessCPUTime(void)
{
return getClockTime(CLOCK_MONOTONIC);
}
StgWord64 getMonotonicNSec(void)
{
return getClockTime(CLOCK_MONOTONIC);
}
Time getProcessElapsedTime(void)
{
return NSToTime(getMonotonicNSec());
}
void getProcessTimes(Time *user, Time *elapsed)
{
*user = getProcessCPUTime();
*elapsed = getProcessElapsedTime();
}
void getUnixEpochTime(StgWord64 *sec, StgWord32 *nsec)
{
struct timeval tv;
gettimeofday(&tv, (struct timezone *) NULL);
*sec = tv.tv_sec;
*nsec = tv.tv_usec * 1000;
}
W_
getPageFaults(void)
{
return 0;
}
|