#include "config.h"
#include "system.h"
-#include "intl.h"
-#include "rtl.h"
-
#ifdef HAVE_SYS_TIMES_H
# include <sys/times.h>
#endif
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
+#include "coretypes.h"
+#include "tm.h"
+#include "intl.h"
+#include "rtl.h"
+#include "toplev.h"
#ifndef HAVE_CLOCK_T
typedef int clock_t;
};
#endif
-#if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE
-extern int getrusage PARAMS ((int, struct rusage *));
-#endif
-#if defined HAVE_DECL_TIMES && !HAVE_DECL_TIMES
-extern clock_t times PARAMS ((struct tms *));
-#endif
-#if defined HAVE_DECL_CLOCK && !HAVE_DECL_CLOCK
-extern clock_t clock PARAMS ((void));
-#endif
-
#ifndef RUSAGE_SELF
# define RUSAGE_SELF 0
#endif
/* Prefer times to getrusage to clock (each gives successively less
information). */
#ifdef HAVE_TIMES
+# if defined HAVE_DECL_TIMES && !HAVE_DECL_TIMES
+ extern clock_t times PARAMS ((struct tms *));
+# endif
# define USE_TIMES
# define HAVE_USER_TIME
# define HAVE_SYS_TIME
# define HAVE_WALL_TIME
#else
#ifdef HAVE_GETRUSAGE
+# if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE
+ extern int getrusage PARAMS ((int, struct rusage *));
+# endif
# define USE_GETRUSAGE
# define HAVE_USER_TIME
# define HAVE_SYS_TIME
#else
#ifdef HAVE_CLOCK
+# if defined HAVE_DECL_CLOCK && !HAVE_DECL_CLOCK
+ extern clock_t clock PARAMS ((void));
+# endif
# define USE_CLOCK
# define HAVE_USER_TIME
#endif
precompute them. Whose wonderful idea was it to make all those
_constants_ variable at run time, anyway? */
#ifdef USE_TIMES
-static float ticks_to_msec;
-#define TICKS_TO_MSEC (1 / (float)TICKS_PER_SECOND)
+static double ticks_to_msec;
+#define TICKS_TO_MSEC (1 / (double)TICKS_PER_SECOND)
#endif
#ifdef USE_CLOCK
-static float clocks_to_msec;
-#define CLOCKS_TO_MSEC (1 / (float)CLOCKS_PER_SEC)
+static double clocks_to_msec;
+#define CLOCKS_TO_MSEC (1 / (double)CLOCKS_PER_SEC)
#endif
#include "flags.h"
#include "timevar.h"
-/* See timevar.h for an explanation of timing variables. */
+static bool timevar_enable;
-/* This macro evaluates to non-zero if timing variables are enabled. */
-#define TIMEVAR_ENABLE (time_report)
+/* See timevar.h for an explanation of timing variables. */
/* A timing variable. */
/* The name of this timing variable. */
const char *name;
- /* Non-zero if this timing variable is running as a standalone
+ /* Nonzero if this timing variable is running as a standalone
timer. */
unsigned standalone : 1;
- /* Non-zero if this timing variable was ever started or pushed onto
+ /* Nonzero if this timing variable was ever started or pushed onto
the timing stack. */
unsigned used : 1;
};
/* Fill the current times into TIME. The definition of this function
also defines any or all of the HAVE_USER_TIME, HAVE_SYS_TIME, and
- HAVA_WALL_TIME macros. */
+ HAVE_WALL_TIME macros. */
static void
get_time (now)
now->sys = 0;
now->wall = 0;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
{
/* Initialize timing variables. */
void
-init_timevar ()
+timevar_init ()
{
- if (!TIMEVAR_ENABLE)
- return;
+ timevar_enable = true;
/* Zero all elapsed times. */
memset ((void *) timevars, 0, sizeof (timevars));
struct timevar_stack_def *context;
struct timevar_time_def now;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
/* Mark this timing variable as used. */
struct timevar_time_def now;
struct timevar_stack_def *popped = stack;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
if (&timevars[timevar] != stack->timevar)
- abort ();
+ {
+ sorry ("cannot timevar_pop '%s' when top of timevars stack is '%s'",
+ timevars[timevar].name, stack->timevar->name);
+ abort ();
+ }
/* What time is it? */
get_time (&now);
{
struct timevar_def *tv = &timevars[timevar];
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
/* Mark this timing variable as used. */
struct timevar_def *tv = &timevars[timevar];
struct timevar_time_def now;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
/* TIMEVAR must have been started via timevar_start. */
struct timevar_time_def *total = &timevars[TV_TOTAL].elapsed;
struct timevar_time_def now;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
/* Update timing information in case we're calling this from GDB. */
for (id = 0; id < (unsigned int) TIMEVAR_LAST; ++id)
{
struct timevar_def *tv = &timevars[(timevar_id_t) id];
- const float tiny = 5e-3;
+ const double tiny = 5e-3;
/* Don't print the total execution time here; that goes at the
end. */