aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/intrinsics/time_1.h
diff options
context:
space:
mode:
Diffstat (limited to 'libgfortran/intrinsics/time_1.h')
-rw-r--r--libgfortran/intrinsics/time_1.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/libgfortran/intrinsics/time_1.h b/libgfortran/intrinsics/time_1.h
index ca5b26b..94f2f3d 100644
--- a/libgfortran/intrinsics/time_1.h
+++ b/libgfortran/intrinsics/time_1.h
@@ -1,5 +1,5 @@
/* Wrappers for platform timing functions.
- Copyright (C) 2003, 2007, 2009, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2007, 2009, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU Fortran runtime library (libgfortran).
@@ -166,6 +166,21 @@ gf_cputime (long *user_sec, long *user_usec, long *system_sec, long *system_usec
return -1;
return 0;
+#elif defined(HAVE_CLOCK_GETTIME) && (defined(CLOCK_PROCESS_CPUTIME_ID) \
+ || defined(CLOCK_THREAD_CPUTIME_ID))
+ /* Newer versions of VxWorks have CLOCK_THREAD_CPUTIME_ID giving
+ per-thread CPU time. CLOCK_PROCESS_CPUTIME_ID would be better
+ but is not available. */
+#ifndef CLOCK_PROCESS_CPUTIME_ID
+#define CLOCK_PROCESS_CPUTIME_ID CLOCK_THREAD_CPUTIME_ID
+#endif
+ struct timespec ts;
+ int err = clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &ts);
+ *user_sec = ts.tv_sec;
+ *user_usecs = ts.tv_nsec / 1000;
+ *system_sec = *system_usec = 0;
+ return err;
+
#else
clock_t c = clock ();
*user_sec = c / CLOCKS_PER_SEC;