+ if (getrusage(RUSAGE_SELF, &RU)) {
+ perror("getrusage call failed: -time-passes info incorrect!");
+ }
+
+ 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;
+
+ return Result;
+}
+
+void TimeRecord::passStart(const TimeRecord &T) {
+ Elapsed -= T.Elapsed;
+ UserTime -= T.UserTime;
+ SystemTime -= T.SystemTime;
+ RSSTemp = T.MaxRSS;
+}
+
+void TimeRecord::passEnd(const TimeRecord &T) {
+ Elapsed += T.Elapsed;
+ UserTime += T.UserTime;
+ SystemTime += T.SystemTime;
+ RSSTemp = T.MaxRSS - RSSTemp;
+ MaxRSS = std::max(MaxRSS, RSSTemp);