/* Timing variables for measuring compiler performance.
- Copyright (C) 2000, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
Contributed by Alex Samuel <samuel@codesourcery.com>
This file is part of GCC.
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. */
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA. */
#include "config.h"
#include "system.h"
bool timevar_enable;
+/* Total amount of memory allocated by garbage collector. */
+
+size_t timevar_ggc_mem_total;
+
+/* The amount of memory that will cause us to report the timevar even
+ if the time spent is not significant. */
+
+#define GGC_MEM_BOUND (1 << 20)
+
/* See timevar.h for an explanation of timing variables. */
/* A timing variable. */
now->user = 0;
now->sys = 0;
now->wall = 0;
+ now->ggc_mem = timevar_ggc_mem_total;
if (!timevar_enable)
return;
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->ggc_mem += stop_time->ggc_mem - start_time->ggc_mem;
}
/* Initialize timing variables. */
unused_stack_instances = unused_stack_instances->next;
}
else
- context = xmalloc (sizeof (struct timevar_stack_def));
+ context = XNEW (struct timevar_stack_def);
/* Fill it in and put it on the stack. */
context->timevar = tv;
zeroes. */
if (tv->elapsed.user < tiny
&& tv->elapsed.sys < tiny
- && tv->elapsed.wall < tiny)
+ && tv->elapsed.wall < tiny
+ && tv->elapsed.ggc_mem < GGC_MEM_BOUND)
continue;
/* The timing variable name. */
(total->wall == 0 ? 0 : tv->elapsed.wall / total->wall) * 100);
#endif /* HAVE_WALL_TIME */
+ /* Print the amount of ggc memory allocated. */
+ fprintf (fp, "%8u kB (%2.0f%%) ggc",
+ (unsigned) (tv->elapsed.ggc_mem >> 10),
+ (total->ggc_mem == 0
+ ? 0
+ : (float) tv->elapsed.ggc_mem / total->ggc_mem) * 100);
+
putc ('\n', fp);
}
fprintf (fp, "%7.2f ", total->sys);
#endif
#ifdef HAVE_WALL_TIME
- fprintf (fp, "%7.2f\n", total->wall);
+ fprintf (fp, "%7.2f ", total->wall);
#endif
+ fprintf (fp, "%8u kB\n", (unsigned) (total->ggc_mem >> 10));
#ifdef ENABLE_CHECKING
fprintf (fp, "Extra diagnostic checks enabled; compiler may run slowly.\n");