Mercurial > octave-nkf
annotate libinterp/corefcn/getrusage.cc @ 20616:fd0efcdb3718
use new string_value method to handle value extraction errors
* dirfns.cc, file-io.cc, gammainc.cc, help.cc, load-path.cc,
octave-link.cc, qz.cc, regexp.cc, strfns.cc, syscalls.cc, time.cc,
variables.cc: Use new string_value method.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 08 Oct 2015 19:00:51 -0400 |
parents | 4f45eaf83908 |
children |
rev | line source |
---|---|
2928 | 1 /* |
2 | |
19731
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
3 Copyright (C) 1996-2015 John W. Eaton |
2928 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
2928 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
2928 | 20 |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
24 #include <config.h> | |
25 #endif | |
26 | |
10240
fa7b5751730c
use gnulib time, sys_time, and sys_times modules
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
27 #include <sys/time.h> |
fa7b5751730c
use gnulib time, sys_time, and sys_times modules
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
28 #include <sys/times.h> |
3176 | 29 #include <sys/types.h> |
30 | |
2928 | 31 #ifdef HAVE_SYS_RESOURCE_H |
32 #include <sys/resource.h> | |
33 #endif | |
34 | |
35 #if defined (HAVE_SYS_PARAM_H) | |
36 #include <sys/param.h> | |
37 #endif | |
10240
fa7b5751730c
use gnulib time, sys_time, and sys_times modules
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
38 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14138
diff
changeset
|
39 #include "defun.h" |
10240
fa7b5751730c
use gnulib time, sys_time, and sys_times modules
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
40 #include "oct-map.h" |
fa7b5751730c
use gnulib time, sys_time, and sys_times modules
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
41 #include "sysdep.h" |
fa7b5751730c
use gnulib time, sys_time, and sys_times modules
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
42 #include "ov.h" |
fa7b5751730c
use gnulib time, sys_time, and sys_times modules
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
43 #include "oct-obj.h" |
fa7b5751730c
use gnulib time, sys_time, and sys_times modules
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
44 #include "utils.h" |
2928 | 45 |
46 #if !defined (HZ) | |
47 #if defined (CLK_TCK) | |
48 #define HZ CLK_TCK | |
49 #elif defined (USG) | |
50 #define HZ 100 | |
51 #else | |
52 #define HZ 60 | |
53 #endif | |
54 #endif | |
55 | |
56 #ifndef RUSAGE_SELF | |
57 #define RUSAGE_SELF 0 | |
58 #endif | |
59 | |
60 // System resource functions. | |
61 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14138
diff
changeset
|
62 DEFUN (getrusage, , , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
63 "-*- texinfo -*-\n\ |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14138
diff
changeset
|
64 @deftypefn {Built-in Function} {} getrusage ()\n\ |
3301 | 65 Return a structure containing a number of statistics about the current\n\ |
20207
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19731
diff
changeset
|
66 Octave process.\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19731
diff
changeset
|
67 \n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19731
diff
changeset
|
68 Not all fields are available on all systems. If it is not possible to get\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19731
diff
changeset
|
69 CPU time statistics, the CPU time slots are set to zero. Other missing data\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19731
diff
changeset
|
70 are replaced by NaN@. The list of possible fields is:\n\ |
3301 | 71 \n\ |
72 @table @code\n\ | |
73 @item idrss\n\ | |
74 Unshared data size.\n\ | |
75 \n\ | |
76 @item inblock\n\ | |
77 Number of block input operations.\n\ | |
78 \n\ | |
79 @item isrss\n\ | |
80 Unshared stack size.\n\ | |
81 \n\ | |
82 @item ixrss\n\ | |
83 Shared memory size.\n\ | |
84 \n\ | |
85 @item majflt\n\ | |
86 Number of major page faults.\n\ | |
87 \n\ | |
88 @item maxrss\n\ | |
89 Maximum data size.\n\ | |
90 \n\ | |
91 @item minflt\n\ | |
92 Number of minor page faults.\n\ | |
2928 | 93 \n\ |
3301 | 94 @item msgrcv\n\ |
95 Number of messages received.\n\ | |
96 \n\ | |
97 @item msgsnd\n\ | |
98 Number of messages sent.\n\ | |
99 \n\ | |
100 @item nivcsw\n\ | |
101 Number of involuntary context switches.\n\ | |
102 \n\ | |
103 @item nsignals\n\ | |
104 Number of signals received.\n\ | |
105 \n\ | |
106 @item nswap\n\ | |
107 Number of swaps.\n\ | |
108 \n\ | |
109 @item nvcsw\n\ | |
110 Number of voluntary context switches.\n\ | |
111 \n\ | |
112 @item oublock\n\ | |
113 Number of block output operations.\n\ | |
114 \n\ | |
115 @item stime\n\ | |
116 A structure containing the system CPU time used. The structure has the\n\ | |
117 elements @code{sec} (seconds) @code{usec} (microseconds).\n\ | |
118 \n\ | |
119 @item utime\n\ | |
120 A structure containing the user CPU time used. The structure has the\n\ | |
121 elements @code{sec} (seconds) @code{usec} (microseconds).\n\ | |
122 @end table\n\ | |
123 @end deftypefn") | |
2928 | 124 { |
11043
e9966851619b
getpwent.cc, getgrent.cc, getrusage.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
10840
diff
changeset
|
125 octave_scalar_map m; |
e9966851619b
getpwent.cc, getgrent.cc, getrusage.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
10840
diff
changeset
|
126 octave_scalar_map tv_tmp; |
2928 | 127 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
128 // FIXME: maybe encapsulate all of this in a liboctave class |
2928 | 129 #if defined (HAVE_GETRUSAGE) |
130 | |
131 struct rusage ru; | |
132 | |
133 getrusage (RUSAGE_SELF, &ru); | |
134 | |
4675 | 135 tv_tmp.assign ("sec", static_cast<double> (ru.ru_utime.tv_sec)); |
136 tv_tmp.assign ("usec", static_cast<double> (ru.ru_utime.tv_usec)); | |
137 m.assign ("utime", octave_value (tv_tmp)); | |
2928 | 138 |
4675 | 139 tv_tmp.assign ("sec", static_cast<double> (ru.ru_stime.tv_sec)); |
140 tv_tmp.assign ("usec", static_cast<double> (ru.ru_stime.tv_usec)); | |
141 m.assign ("stime", octave_value (tv_tmp)); | |
2928 | 142 |
143 #if ! defined (RUSAGE_TIMES_ONLY) | |
4675 | 144 m.assign ("maxrss", static_cast<double> (ru.ru_maxrss)); |
145 m.assign ("ixrss", static_cast<double> (ru.ru_ixrss)); | |
146 m.assign ("idrss", static_cast<double> (ru.ru_idrss)); | |
147 m.assign ("isrss", static_cast<double> (ru.ru_isrss)); | |
148 m.assign ("minflt", static_cast<double> (ru.ru_minflt)); | |
149 m.assign ("majflt", static_cast<double> (ru.ru_majflt)); | |
150 m.assign ("nswap", static_cast<double> (ru.ru_nswap)); | |
151 m.assign ("inblock", static_cast<double> (ru.ru_inblock)); | |
152 m.assign ("oublock", static_cast<double> (ru.ru_oublock)); | |
153 m.assign ("msgsnd", static_cast<double> (ru.ru_msgsnd)); | |
154 m.assign ("msgrcv", static_cast<double> (ru.ru_msgrcv)); | |
155 m.assign ("nsignals", static_cast<double> (ru.ru_nsignals)); | |
156 m.assign ("nvcsw", static_cast<double> (ru.ru_nvcsw)); | |
157 m.assign ("nivcsw", static_cast<double> (ru.ru_nivcsw)); | |
2928 | 158 #endif |
159 | |
160 #else | |
161 | |
162 struct tms t; | |
163 | |
164 times (&t); | |
165 | |
166 unsigned long ticks; | |
167 unsigned long seconds; | |
168 unsigned long fraction; | |
169 | |
170 ticks = t.tms_utime + t.tms_cutime; | |
171 fraction = ticks % HZ; | |
172 seconds = ticks / HZ; | |
173 | |
4675 | 174 tv_tmp.assign ("sec", static_cast<double> (seconds)); |
175 tv_tmp.assign ("usec", static_cast<double> (fraction * 1e6 / HZ)); | |
176 m.assign ("utime", octave_value (tv_tmp)); | |
2928 | 177 |
178 ticks = t.tms_stime + t.tms_cstime; | |
179 fraction = ticks % HZ; | |
180 seconds = ticks / HZ; | |
181 | |
4675 | 182 tv_tmp.assign ("sec", static_cast<double> (seconds)); |
183 tv_tmp.assign ("usec", static_cast<double> (fraction * 1e6 / HZ)); | |
184 m.assign ("stime", octave_value (tv_tmp)); | |
2928 | 185 |
4102 | 186 double tmp = lo_ieee_nan_value (); |
187 | |
4675 | 188 m.assign ("maxrss", tmp); |
189 m.assign ("ixrss", tmp); | |
190 m.assign ("idrss", tmp); | |
191 m.assign ("isrss", tmp); | |
192 m.assign ("minflt", tmp); | |
193 m.assign ("majflt", tmp); | |
194 m.assign ("nswap", tmp); | |
195 m.assign ("inblock", tmp); | |
196 m.assign ("oublock", tmp); | |
197 m.assign ("msgsnd", tmp); | |
198 m.assign ("msgrcv", tmp); | |
199 m.assign ("nsignals", tmp); | |
200 m.assign ("nvcsw", tmp); | |
201 m.assign ("nivcsw", tmp); | |
2928 | 202 |
203 #endif | |
204 | |
205 return octave_value (m); | |
206 } |