diff options
Diffstat (limited to 'otherlibs/unix/times.c')
-rw-r--r-- | otherlibs/unix/times.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/otherlibs/unix/times.c b/otherlibs/unix/times.c index 9952cb7ac..aa32f10db 100644 --- a/otherlibs/unix/times.c +++ b/otherlibs/unix/times.c @@ -20,6 +20,10 @@ #include <time.h> #include <sys/types.h> #include <sys/times.h> +#ifdef HAS_GETRUSAGE +#include <sys/time.h> +#include <sys/resource.h> +#endif #ifndef CLK_TCK #ifdef HZ @@ -31,6 +35,23 @@ CAMLprim value unix_times(value unit) { +#ifdef HAS_GETRUSAGE + + value res; + struct rusage ru; + + res = alloc_small(4 * Double_wosize, Double_array_tag); + + getrusage (RUSAGE_SELF, &ru); + Store_double_field (res, 0, ru.ru_utime.tv_sec + ru.ru_utime.tv_usec / 1e6); + Store_double_field (res, 1, ru.ru_stime.tv_sec + ru.ru_stime.tv_usec / 1e6); + getrusage (RUSAGE_CHILDREN, &ru); + Store_double_field (res, 2, ru.ru_utime.tv_sec + ru.ru_utime.tv_usec / 1e6); + Store_double_field (res, 3, ru.ru_stime.tv_sec + ru.ru_stime.tv_usec / 1e6); + return res; + +#else + value res; struct tms buffer; @@ -41,4 +62,6 @@ CAMLprim value unix_times(value unit) Store_double_field(res, 2, (double) buffer.tms_cutime / CLK_TCK); Store_double_field(res, 3, (double) buffer.tms_cstime / CLK_TCK); return res; + +#endif } |