[project @ 2006-01-05 09:42:54 by simonmar]
[ghc-hetmet.git] / ghc / rts / posix / GetTime.c
index 825ede6..3a0764c 100644 (file)
@@ -6,7 +6,9 @@
  *
  * ---------------------------------------------------------------------------*/
 
-#include "PosixSource.h"
+// Not POSIX, due to use of ru_majflt in getPageFaults()
+// #include "PosixSource.h"
+
 #include "Rts.h"
 #include "GetTime.h"
 
@@ -34,7 +36,7 @@
 #error No implementation for getProcessCPUTime() available.
 #endif
 
-#if (defined(HAVE_GETTIMEOFDAY) && defined(HAVE_GETRUSAGE) && !irix_HOST_OS)
+#if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_GETRUSAGE) && !irix_HOST_OS
 // we'll implement getProcessCPUTime() and getProcessElapsedTime()
 // separately, using getrusage() and gettimeofday() respectively
 
@@ -113,13 +115,13 @@ void getProcessTimes(Ticks *user, Ticks *elapsed)
 
 Ticks getThreadCPUTime(void)
 {
-#ifdef HAVE_CLOCK_GETTIME
+#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_THREAD_CPUTIME_ID)
     // clock_gettime() gives us per-thread CPU time.  It isn't
     // reliable on Linux, but it's the best we have.
     struct timespec ts;
     clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
     return (ts.tv_sec * TICKS_PER_SECOND + 
-           ts.tv_nsec / (1000000000/TICKS_PER_SECOND));
+           ((Ticks)ts.tv_nsec * TICKS_PER_SECOND) / 1000000000);
 #else
     return getProcessCPUTime();
 #endif