Feature #11952 ยป 0001-Use-getrusage-for-Process.times-if-available.patch
process.c | ||
---|---|---|
VALUE
|
||
rb_proc_times(VALUE obj)
|
||
{
|
||
VALUE utime, stime, cutime, cstime, ret;
|
||
#if defined(RUSAGE_SELF) && defined(RUSAGE_CHILDREN)
|
||
struct rusage usage_s, usage_c;
|
||
if (getrusage(RUSAGE_SELF, &usage_s) != 0 || getrusage(RUSAGE_CHILDREN, &usage_c) != 0)
|
||
rb_sys_fail("getrusage");
|
||
utime = DBL2NUM((double)usage_s.ru_utime.tv_sec + (double)usage_s.ru_utime.tv_usec/1e6);
|
||
stime = DBL2NUM((double)usage_s.ru_stime.tv_sec + (double)usage_s.ru_stime.tv_usec/1e6);
|
||
cutime = DBL2NUM((double)usage_c.ru_utime.tv_sec + (double)usage_c.ru_utime.tv_usec/1e6);
|
||
cstime = DBL2NUM((double)usage_c.ru_stime.tv_sec + (double)usage_c.ru_stime.tv_usec/1e6);
|
||
#else
|
||
const double hertz = get_clk_tck();
|
||
struct tms buf;
|
||
VALUE utime, stime, cutime, cstime, ret;
|
||
times(&buf);
|
||
utime = DBL2NUM(buf.tms_utime / hertz);
|
||
stime = DBL2NUM(buf.tms_stime / hertz);
|
||
cutime = DBL2NUM(buf.tms_cutime / hertz);
|
||
cstime = DBL2NUM(buf.tms_cstime / hertz);
|
||
#endif
|
||
ret = rb_struct_new(rb_cProcessTms, utime, stime, cutime, cstime);
|
||
RB_GC_GUARD(utime);
|
||
RB_GC_GUARD(stime);
|