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

Chris Lattner lattner at cs.uiuc.edu
Sun Nov 3 18:33:00 PST 2002


Changes in directory llvm/lib/Support:

Timer.cpp updated: 1.3 -> 1.4

---
Log message:

Implement MaxRSS in terms of mallinfo instead of the system RSS.  This gives 
us much more accurate numbers and actually WORKS.


---
Diffs of the changes:

Index: llvm/lib/Support/Timer.cpp
diff -u llvm/lib/Support/Timer.cpp:1.3 llvm/lib/Support/Timer.cpp:1.4
--- llvm/lib/Support/Timer.cpp:1.3	Sun Oct 27 13:08:03 2002
+++ llvm/lib/Support/Timer.cpp	Sun Nov  3 18:32:44 2002
@@ -9,6 +9,7 @@
 #include <sys/time.h>
 #include <sys/unistd.h>
 #include <unistd.h>
+#include <malloc.h>
 #include <stdio.h>
 #include <iostream>
 #include <algorithm>
@@ -63,20 +64,6 @@
 };
 
 static TimeRecord getTimeRecord() {
-  static unsigned long PageSize = 0;
-
-  if (PageSize == 0) {
-#ifdef _SC_PAGE_SIZE
-    PageSize = sysconf(_SC_PAGE_SIZE);
-#else
-#ifdef _SC_PAGESIZE
-    PageSize = sysconf(_SC_PAGESIZE);
-#else
-    PageSize = getpagesize();
-#endif
-#endif
-  }
-
   struct rusage RU;
   struct timeval T;
   gettimeofday(&T, 0);
@@ -84,15 +71,16 @@
     perror("getrusage call failed: -time-passes info incorrect!");
   }
 
+  struct mallinfo MI = mallinfo();
+
   TimeRecord Result;
   Result.Elapsed    =           T.tv_sec +           T.tv_usec/1000000.0;
   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.MaxRSS = RU.ru_maxrss*PageSize;
+  Result.MaxRSS     = MI.uordblks+MI.usmblks;
   return Result;
 }
 
-
 void Timer::startTimer() {
   Started = true;
   TimeRecord TR = getTimeRecord();
@@ -108,6 +96,8 @@
   UserTime   += TR.UserTime;
   SystemTime += TR.SystemTime;
   MaxRSS     += TR.MaxRSS;
+  if ((signed long)MaxRSS < 0)
+    MaxRSS = 0;
 }
 
 void Timer::sum(const Timer &T) {
@@ -140,7 +130,7 @@
   fprintf(stderr, "  ");
 
   if (Total.MaxRSS)
-    std::cerr << MaxRSS << "\t";
+    fprintf(stderr, " %8ld  ", MaxRSS);
   std::cerr << Name << "\n";
 
   Started = false;  // Once printed, don't print again
@@ -182,7 +172,7 @@
       std::cerr << "   ---Wall Time---";
       
       if (Total.getMaxRSS())
-        std::cerr << " ---Mem---";
+        std::cerr << "  ---Mem---";
       std::cerr << "  --- Name ---\n";
       
       // Loop through all of the timing data, printing it out...





More information about the llvm-commits mailing list