X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/1509d42fcb8fb8a78d46f0c26b863cafd347bee5..69ce078b8cf61eb5087b91538d79a1143ce77c46:/lib/timevar.c?ds=sidebyside diff --git a/lib/timevar.c b/lib/timevar.c index 3cc38389..d647687f 100644 --- a/lib/timevar.c +++ b/lib/timevar.c @@ -1,27 +1,26 @@ /* Timing variables for measuring compiler performance. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc. Contributed by Alex Samuel -This file is part of GCC. +This file is part of Bison, the GNU Compiler Compiler. -GCC is free software; you can redistribute it and/or modify it under +Bison is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. -GCC is distributed in the hope that it will be useful, but WITHOUT ANY +Bison is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ +along with Bison; see the file COPYING. If not, write to the Free +Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. */ #if IN_GCC -/* These are the original includes --akim. */ #include "config.h" #include "system.h" #include "intl.h" @@ -29,10 +28,15 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #else -/* These are my replacements by hand --akim. - There is another change below, flag with IN_GCC. */ +/* This source file is taken from the GCC source code, with slight + modifications that are under control of the IN_GCC preprocessor + variable. The !IN_GCC part of this file is specific to Bison. */ + # include "../src/system.h" -int time_report = 0; +# if HAVE_SYS_TIME_H +# include +# endif +int timevar_report = 0; #endif @@ -59,13 +63,13 @@ struct tms #endif #if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE -extern int getrusage PARAMS ((int, struct rusage *)); +extern int getrusage (int, struct rusage *); #endif #if defined HAVE_DECL_TIMES && !HAVE_DECL_TIMES -extern clock_t times PARAMS ((struct tms *)); +extern clock_t times (struct tms *); #endif #if defined HAVE_DECL_CLOCK && !HAVE_DECL_CLOCK -extern clock_t clock PARAMS ((void)); +extern clock_t clock (void); #endif #ifndef RUSAGE_SELF @@ -114,12 +118,12 @@ extern clock_t clock PARAMS ((void)); _constants_ variable at run time, anyway? */ #ifdef USE_TIMES static float ticks_to_msec; -#define TICKS_TO_MSEC (1 / (float)TICKS_PER_SECOND) +#define TICKS_TO_MSEC (1.0 / TICKS_PER_SECOND) #endif #ifdef USE_CLOCK static float clocks_to_msec; -#define CLOCKS_TO_MSEC (1 / (float)CLOCKS_PER_SEC) +#define CLOCKS_TO_MSEC (1.0 / CLOCKS_PER_SEC) #endif #if IN_GCC @@ -129,8 +133,8 @@ static float clocks_to_msec; /* See timevar.h for an explanation of timing variables. */ -/* This macro evaluates to non-zero if timing variables are enabled. */ -#define TIMEVAR_ENABLE (time_report) +/* This macro evaluates to nonzero if timing variables are enabled. */ +#define TIMEVAR_ENABLE (timevar_report) /* A timing variable. */ @@ -183,15 +187,14 @@ static struct timevar_stack_def *unused_stack_instances; element. */ static struct timevar_time_def start_time; -static void get_time - PARAMS ((struct timevar_time_def *)); -static void timevar_accumulate - PARAMS ((struct timevar_time_def *, struct timevar_time_def *, - struct timevar_time_def *)); +static void get_time (struct timevar_time_def *); +static void timevar_accumulate (struct timevar_time_def *, + struct timevar_time_def *, + struct timevar_time_def *); /* 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) @@ -208,12 +211,21 @@ get_time (now) #ifdef USE_TIMES struct tms tms; now->wall = times (&tms) * ticks_to_msec; +#if IN_GCC now->user = tms.tms_utime * ticks_to_msec; now->sys = tms.tms_stime * ticks_to_msec; +#else + now->user = (tms.tms_utime + tms.tms_cutime) * ticks_to_msec; + now->sys = (tms.tms_stime + tms.tms_cstime) * ticks_to_msec; +#endif #endif #ifdef USE_GETRUSAGE struct rusage rusage; +#if IN_GCC getrusage (RUSAGE_SELF, &rusage); +#else + getrusage (RUSAGE_CHILDREN, &rusage); +#endif now->user = rusage.ru_utime.tv_sec + rusage.ru_utime.tv_usec * 1e-6; now->sys = rusage.ru_stime.tv_sec + rusage.ru_stime.tv_usec * 1e-6; #endif @@ -223,17 +235,17 @@ get_time (now) } } -/* Add the difference between STOP_TIME and START_TIME to TIMER. */ +/* Add the difference between STOP and START to TIMER. */ static void -timevar_accumulate (timer, start_time, stop_time) - struct timevar_time_def *timer; - struct timevar_time_def *start_time; - struct timevar_time_def *stop_time; +timevar_accumulate (timer, start, stop) + struct timevar_time_def *timer; + struct timevar_time_def *start; + struct timevar_time_def *stop; { - timer->user += stop_time->user - start_time->user; - timer->sys += stop_time->sys - start_time->sys; - timer->wall += stop_time->wall - start_time->wall; + timer->user += stop->user - start->user; + timer->sys += stop->sys - start->sys; + timer->wall += stop->wall - start->wall; } /* Initialize timing variables. */ @@ -548,6 +560,6 @@ print_time (str, total) fprintf (stderr, _("time in %s: %ld.%06ld (%ld%%)\n"), str, total / 1000000, total % 1000000, - all_time == 0 ? 0 - : (long) (((100.0 * (double) total) / (double) all_time) + .5)); + all_time == 0 ? 0 + : (long) (((100.0 * (double) total) / (double) all_time) + .5)); }