0
|
1 /* ANSI-compatible clock function.
|
|
2 Copyright (C) 1994, 1995, 1999 Free Software Foundation, Inc.
|
|
3
|
|
4 This file is part of the libiberty library. This library is free
|
|
5 software; you can redistribute it and/or modify it under the
|
|
6 terms of the GNU General Public License as published by the
|
|
7 Free Software Foundation; either version 2, or (at your option)
|
|
8 any later version.
|
|
9
|
|
10 This library is distributed in the hope that it will be useful,
|
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13 GNU General Public License for more details.
|
|
14
|
|
15 You should have received a copy of the GNU General Public License
|
|
16 along with GNU CC; see the file COPYING. If not, write to
|
|
17 the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
|
|
18
|
|
19 As a special exception, if you link this library with files
|
|
20 compiled with a GNU compiler to produce an executable, this does not cause
|
|
21 the resulting executable to be covered by the GNU General Public License.
|
|
22 This exception does not however invalidate any other reasons why
|
|
23 the executable file might be covered by the GNU General Public License. */
|
|
24
|
|
25 /*
|
|
26
|
|
27 @deftypefn Supplemental long clock (void)
|
|
28
|
|
29 Returns an approximation of the CPU time used by the process as a
|
|
30 @code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the
|
|
31 number of seconds used.
|
|
32
|
|
33 @end deftypefn
|
|
34
|
|
35 */
|
|
36
|
|
37 #include "config.h"
|
|
38
|
|
39 #ifdef HAVE_GETRUSAGE
|
|
40 #include <sys/time.h>
|
|
41 #include <sys/resource.h>
|
|
42 #endif
|
|
43
|
|
44 #ifdef HAVE_TIMES
|
|
45 #ifdef HAVE_SYS_PARAM_H
|
|
46 #include <sys/param.h>
|
|
47 #endif
|
|
48 #include <sys/times.h>
|
|
49 #endif
|
|
50
|
|
51 #ifdef HAVE_UNISTD_H
|
|
52 #include <unistd.h>
|
|
53 #endif
|
|
54
|
|
55 #ifdef _SC_CLK_TCK
|
|
56 #define GNU_HZ sysconf(_SC_CLK_TCK)
|
|
57 #else
|
|
58 #ifdef HZ
|
|
59 #define GNU_HZ HZ
|
|
60 #else
|
|
61 #ifdef CLOCKS_PER_SEC
|
|
62 #define GNU_HZ CLOCKS_PER_SEC
|
|
63 #endif
|
|
64 #endif
|
|
65 #endif
|
|
66
|
|
67 /* FIXME: should be able to declare as clock_t. */
|
|
68
|
|
69 long
|
|
70 clock (void)
|
|
71 {
|
|
72 #ifdef HAVE_GETRUSAGE
|
|
73 struct rusage rusage;
|
|
74
|
|
75 getrusage (0, &rusage);
|
|
76 return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
|
|
77 + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
|
|
78 #else
|
|
79 #ifdef HAVE_TIMES
|
|
80 struct tms tms;
|
|
81
|
|
82 times (&tms);
|
|
83 return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ);
|
|
84 #else
|
|
85 #ifdef VMS
|
|
86 struct
|
|
87 {
|
|
88 int proc_user_time;
|
|
89 int proc_system_time;
|
|
90 int child_user_time;
|
|
91 int child_system_time;
|
|
92 } vms_times;
|
|
93
|
|
94 times (&vms_times);
|
|
95 return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000;
|
|
96 #else
|
|
97 /* A fallback, if nothing else available. */
|
|
98 return 0;
|
|
99 #endif /* VMS */
|
|
100 #endif /* HAVE_TIMES */
|
|
101 #endif /* HAVE_GETRUSAGE */
|
|
102 }
|
|
103
|