blob: 3c140a15921131102c7d7d0bb631aec0e6c7f0f3 (
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
/* LINTLIBRARY */
#include "espresso.h"
#include "copyright.h"
#include "port.h"
#include "utility.h"
#ifdef IBM_WATC /* IBM Waterloo-C compiler (same as bsd 4.2) */
#ifndef BSD
#define BSD
#endif
#ifndef void
#define void int
#endif
#endif
#ifdef ultrix
#ifndef BSD
#define BSD
#endif
#endif
#ifdef hpux
#ifndef UNIX50
#define UNIX50
#endif
#endif
#ifdef aiws
#ifndef UNIX10
#define UNIX10
#endif
#endif
#ifdef vms /* VAX/C compiler -- times() with 100 HZ clock */
#ifndef UNIX100
#define UNIX100
#endif
#endif
/* default */
#if !defined(BSD) && !defined(UNIX10) && !defined(UNIX60) && !defined(UNIX100) && !defined(UNIX50) && !defined(_WIN32)
#define UNIX10
#endif
#ifdef BSD
#include <sys/time.h>
#include <sys/rusage.h>
#endif
#ifdef UNIX10
#include <sys/times.h>
#endif
#ifdef UNIX50
#include <sys/times.h>
#endif
#ifdef UNIX60
#include <sys/times.h>
#endif
#ifdef UNIX100
#include <sys/times.h>
#endif
#ifdef _MSC_VER
#include <windows.h>
#include <stdint.h>
#endif
/*
* util_cpu_time -- return a long which represents the elapsed processor
* time in milliseconds since some constant reference
*/
long
util_cpu_time()
{
long t = 0;
#ifdef _MSC_VER
static uint64_t frec = 0;
if (frec == 0)
{
LARGE_INTEGER val;
BOOL ok = QueryPerformanceFrequency(&val);
assert(ok);
frec = val.QuadPart / 1000;
}
LARGE_INTEGER val;
BOOL ok = QueryPerformanceCounter(&val);
assert(ok);
t = val.QuadPart / frec;
#endif
#ifdef BSD
struct rusage rusage;
(void) getrusage(RUSAGE_SELF, &rusage);
t = (long) rusage.ru_utime.tv_sec*1000 + rusage.ru_utime.tv_usec/1000;
#endif
#ifdef IBMPC
long ltime;
(void) time(<ime);
t = ltime * 1000;
#endif
#ifdef UNIX10 /* times() with 10 Hz resolution */
struct tms buffer;
(void) times(&buffer);
t = buffer.tms_utime * 100;
#endif
#ifdef UNIX50 /* times() with 50 Hz resolution */
struct tms buffer;
times(&buffer);
t = buffer.tms_utime * 20;
#endif
#ifdef UNIX60 /* times() with 60 Hz resolution */
struct tms buffer;
times(&buffer);
t = buffer.tms_utime * 16.6667;
#endif
#ifdef UNIX100
struct tms buffer; /* times() with 100 Hz resolution */
times(&buffer);
t = buffer.tms_utime * 10;
#endif
return t;
}
/*
* util_print_time -- massage a long which represents a time interval in
* milliseconds, into a string suitable for output
*
* Hack for IBM/PC -- avoids using floating point
*/
char *
util_print_time(t)
long t;
{
static char s[40];
//(void) sprintf(s, "%ld.%02ld sec", 0/1000, (0%1000)/10);
(void) sprintf(s, "%ld.%03ld sec", t/1000, (t%1000));
return s;
}
/*
* util_strsav -- save a copy of a string
*/
char *
util_strsav(s)
char *s;
{
return strcpy(ALLOC(char, strlen(s)+1), s);
}
|