gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gold / timer.cc
index ec51bc9151e133a26caf48cbc44a9dcf441a5e34..d4adf51577558f1bda9430b787681b16234fc64b 100644 (file)
@@ -1,6 +1,6 @@
 // timer.cc -- helper class for time accounting
 
-// Copyright 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009-2020 Free Software Foundation, Inc.
 // Written by Rafael Avila de Espindola <espindola@google.com>.
 
 // This file is part of gold.
 
 #include "gold.h"
 
+#include <unistd.h>
+
+#ifdef HAVE_TIMES
 #include <sys/times.h>
+#endif
 
 #include "libiberty.h"
 
@@ -40,13 +44,22 @@ Timer::Timer()
   this->start_time_.sys = 0;
 }
 
-// Start couting the time.
+// Start counting the time.
 void
-Timer::start ()
+Timer::start()
 {
   this->get_time(&this->start_time_);
 }
 
+// Record the time used by pass N (0 <= N <= 2).
+void
+Timer::stamp(int n)
+{
+  gold_assert(n >= 0 && n <= 2);
+  TimeStats& thispass = this->pass_times_[n];
+  this->get_time(&thispass);
+}
+
 #if HAVE_SYSCONF && defined _SC_CLK_TCK
 # define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */
 #else
@@ -61,8 +74,8 @@ Timer::start ()
 # endif
 #endif
 
-// times returns statistics in clock_t units. This variable will hold the
-// conversion factor to seconds. We use a variable that is initialize once
+// times returns statistics in clock_t units.  This variable will hold the
+// conversion factor to seconds.  We use a variable that is initialized once
 // because sysconf can be slow.
 static long ticks_per_sec;
 class Timer_init
@@ -75,9 +88,9 @@ class Timer_init
 };
 Timer_init timer_init;
 
-// Write the current time infortamion.
+// Write the current time information.
 void
-Timer::get_time (TimeStats *now)
+Timer::get_time(TimeStats *now)
 {
 #ifdef HAVE_TIMES
   tms t;
@@ -93,7 +106,7 @@ Timer::get_time (TimeStats *now)
 
 // Return the stats since start was called.
 Timer::TimeStats
-Timer::get_elapsed_time ()
+Timer::get_elapsed_time()
 {
   TimeStats now;
   this->get_time(&now);
@@ -104,4 +117,17 @@ Timer::get_elapsed_time ()
   return delta;
 }
 
+// Return the stats for pass N (0 <= N <= 2).
+Timer::TimeStats
+Timer::get_pass_time(int n)
+{
+  gold_assert(n >= 0 && n <= 2);
+  TimeStats thispass = this->pass_times_[n];
+  TimeStats& lastpass = n > 0 ? this->pass_times_[n-1] : this->start_time_;
+  thispass.wall -= lastpass.wall;
+  thispass.user -= lastpass.user;
+  thispass.sys -= lastpass.sys;
+  return thispass;
+}
+
 }
This page took 0.023854 seconds and 4 git commands to generate.