[llvm-commits] CVS: llvm/lib/Support/Timer.cpp

Chris Lattner lattner at cs.uiuc.edu
Mon Jun 7 14:40:01 PDT 2004


Changes in directory llvm/lib/Support:

Timer.cpp updated: 1.29 -> 1.30

---
Log message:

Implement getTimeRecord natively in Win32, properly conditionalize the
getrusage implementation on HAVE_GETRUSAGE


---
Diffs of the changes:  (+28 -7)

Index: llvm/lib/Support/Timer.cpp
diff -u llvm/lib/Support/Timer.cpp:1.29 llvm/lib/Support/Timer.cpp:1.30
--- llvm/lib/Support/Timer.cpp:1.29	Sun Dec 14 15:27:33 2003
+++ llvm/lib/Support/Timer.cpp	Mon Jun  7 14:34:51 2004
@@ -13,18 +13,19 @@
 
 #include "Support/Timer.h"
 #include "Support/CommandLine.h"
-#include "Config/sys/resource.h"
-#include "Config/sys/time.h"
-#include "Config/unistd.h"
-#include "Config/malloc.h"
-#include <iostream>
 #include <algorithm>
+#include <iostream>
 #include <functional>
 #include <fstream>
 #include <map>
+#include "Config/sys/resource.h"
+#include "Config/sys/time.h"
+#include "Config/unistd.h"
+#include "Config/malloc.h"
+#include "Config/windows.h"
 using namespace llvm;
 
-// GetLibSupportInfoOutputFile - Return a file stream to print our output on...
+// GetLibSupportInfoOutputFile - Return a file stream to print our output on.
 namespace llvm { extern std::ostream *GetLibSupportInfoOutputFile(); }
 
 // getLibSupportInfoOutputFilename - This ugly hack is brought to you courtesy
@@ -113,6 +114,23 @@
 };
 
 static TimeRecord getTimeRecord(bool Start) {
+#if defined(HAVE_WINDOWS_H)
+  unsigned __int64 ProcCreate, ProcExit, KernelTime, UserTime, CurTime;
+
+  GetProcessTimes(GetCurrentProcess(), (FILETIME*)&ProcCreate, 
+                  (FILETIME*)&ProcExit, (FILETIME*)&KernelTime, 
+                  (FILETIME*)&UserTime);
+  GetSystemTimeAsFileTime((FILETIME*)&CurTime);
+
+  // FILETIME's are # of 100 nanosecond ticks.
+  double ScaleFactor = 1.0/(10*1000*1000);
+
+  TimeRecord Result;
+  Result.Elapsed    = (CurTime-ProcCreate)*ScaleFactor;  // Wall time
+  Result.UserTime   = UserTime*ScaleFactor;
+  Result.SystemTime = KernelTime*ScaleFactor;
+  return Result;
+#elif defined(HAVE_GETRUSAGE)
   struct rusage RU;
   struct timeval T;
   long MemUsed = 0;
@@ -134,8 +152,11 @@
   Result.UserTime   = RU.ru_utime.tv_sec + RU.ru_utime.tv_usec/1000000.0;
   Result.SystemTime = RU.ru_stime.tv_sec + RU.ru_stime.tv_usec/1000000.0;
   Result.MemUsed = MemUsed;
-
   return Result;
+#else
+  // Can't get resource usage.
+  return TimeRecord();
+#endif
 }
 
 static std::vector<Timer*> ActiveTimers;





More information about the llvm-commits mailing list