diff options
author | Chris Lattner <sabre@nondot.org> | 2002-11-04 00:32:44 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-11-04 00:32:44 +0000 |
commit | 9d4ef12b9c816702c977f265ccf5beb4ed059dde (patch) | |
tree | 1d582c3658dcf15d0d1c27d511db8755f52ba43c /lib/Support | |
parent | 16500158223d4147ae97513bf698d5f321b15889 (diff) |
Implement MaxRSS in terms of mallinfo instead of the system RSS. This gives
us much more accurate numbers and actually WORKS.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4518 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r-- | lib/Support/Timer.cpp | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/lib/Support/Timer.cpp b/lib/Support/Timer.cpp index d0ce71f3c3..120cb2f697 100644 --- a/lib/Support/Timer.cpp +++ b/lib/Support/Timer.cpp @@ -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 @@ struct TimeRecord { }; 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 @@ static TimeRecord getTimeRecord() { 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 @@ void Timer::stopTimer() { 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 @@ void Timer::print(const Timer &Total) { 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 @@ void TimerGroup::removeTimer() { 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... |