PR 53456 CPU timing fallback using clock_gettime.
authorJanne Blomqvist <jb@gcc.gnu.org>
Thu, 24 May 2012 20:19:37 +0000 (23:19 +0300)
committerJanne Blomqvist <jb@gcc.gnu.org>
Thu, 24 May 2012 20:19:37 +0000 (23:19 +0300)
2012-05-24  Janne Blomqvist  <jb@gcc.gnu.org>

PR fortran/53456
* intrinsics/time_1.h (gf_cputime): Fallback for clock_gettime.

From-SVN: r187846

libgfortran/ChangeLog
libgfortran/intrinsics/time_1.h

index 3dfde053eadcaececcc030e3b43f7c5d8f3d3b14..e30622f7440ae45186fde36a3351e29f07f2050e 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-24  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       PR fortran/53456
+       * intrinsics/time_1.h (gf_cputime): Fallback for clock_gettime.
+
 2012-05-23  Janne Blomqvist  <jb@gcc.gnu.org>
 
        PR fortran/53456
index ca5b26b4fbb88c39d3c8ab59e7131f8912baa8a9..94f2f3d105007a1aec2fc372156de532c7c8f46b 100644 (file)
@@ -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;