X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FProfiling.c;h=a7466c7aa25a496ba5bc0941174d28f1be8e8b53;hb=ce42f19f8c840fbe89844471a0d850d310a94556;hp=c99de348d2a94295b96f62e7a122d2d7110c8110;hpb=55c8be525c07ee7b4a3d34c23d580580fd825fce;p=ghc-hetmet.git diff --git a/ghc/rts/Profiling.c b/ghc/rts/Profiling.c index c99de34..a7466c7 100644 --- a/ghc/rts/Profiling.c +++ b/ghc/rts/Profiling.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Profiling.c,v 1.29 2001/12/12 14:31:43 simonmar Exp $ + * $Id: Profiling.c,v 1.37 2003/08/22 22:24:13 sof Exp $ * * (c) The GHC Team, 1998-2000 * @@ -16,12 +16,14 @@ #include "Profiling.h" #include "Storage.h" #include "Proftimer.h" -#include "Itimer.h" +#include "Timer.h" #include "ProfHeap.h" #include "Arena.h" #include "RetainerProfile.h" #include "LdvProfile.h" +#include + /* * Profiling allocation arena. */ @@ -38,7 +40,8 @@ unsigned int HP_ID; /* figures for the profiling report. */ -static lnat total_alloc, total_prof_ticks; +static ullong total_alloc; +static lnat total_prof_ticks; /* Globals for opening the profiling log file(s) */ @@ -258,8 +261,8 @@ static void initProfilingLogFile(void) { /* Initialise the log file name */ - prof_filename = arenaAlloc(prof_arena, strlen(prog_argv[0]) + 6); - sprintf(prof_filename, "%s.prof", prog_argv[0]); + prof_filename = arenaAlloc(prof_arena, strlen(prog_name) + 6); + sprintf(prof_filename, "%s.prof", prog_name); /* open the log file */ if ((prof_file = fopen(prof_filename, "w")) == NULL) { @@ -289,8 +292,8 @@ initProfilingLogFile(void) if (RtsFlags.ProfFlags.doHeapProfile) { /* Initialise the log file name */ - hp_filename = arenaAlloc(prof_arena, strlen(prog_argv[0]) + 6); - sprintf(hp_filename, "%s.hp", prog_argv[0]); + hp_filename = arenaAlloc(prof_arena, strlen(prog_name) + 6); + sprintf(hp_filename, "%s.hp", prog_name); /* open the log file */ if ((hp_file = fopen(hp_filename, "w")) == NULL) { @@ -643,7 +646,7 @@ report_per_cc_costs( void ) } } - fprintf(prof_file, "%-20s %-10s", "COST CENTRE", "MODULE"); + fprintf(prof_file, "%-30s %-20s", "COST CENTRE", "MODULE"); fprintf(prof_file, "%6s %6s", "%time", "%alloc"); if (RtsFlags.CcFlags.doCostCentres >= COST_CENTRES_VERBOSE) { fprintf(prof_file, " %5s %9s", "ticks", "bytes"); @@ -654,7 +657,7 @@ report_per_cc_costs( void ) if (cc_to_ignore(cc)) { continue; } - fprintf(prof_file, "%-20s %-10s", cc->label, cc->module); + fprintf(prof_file, "%-30s %-20s", cc->label, cc->module); fprintf(prof_file, "%6.1f %6.1f", total_prof_ticks == 0 ? 0.0 : (cc->time_ticks / (StgFloat) total_prof_ticks * 100), total_alloc == 0 ? 0.0 : (cc->mem_alloc / (StgFloat) @@ -677,10 +680,10 @@ report_per_cc_costs( void ) static void fprint_header( void ) { - fprintf(prof_file, "%-24s %-10s individual inherited\n", "", ""); + fprintf(prof_file, "%-24s %-10s individual inherited\n", "", ""); - fprintf(prof_file, "%-24s %-10s", "COST CENTRE", "MODULE"); - fprintf(prof_file, "%8s %5s %5s %5s %5s", "entries", "%time", "%alloc", "%time", "%alloc"); + fprintf(prof_file, "%-24s %-50s", "COST CENTRE", "MODULE"); + fprintf(prof_file, "%6s %10s %5s %5s %5s %5s", "no.", "entries", "%time", "%alloc", "%time", "%alloc"); if (RtsFlags.CcFlags.doCostCentres >= COST_CENTRES_VERBOSE) { fprintf(prof_file, " %5s %9s", "ticks", "bytes"); @@ -712,13 +715,14 @@ reportCCSProfiling( void ) gen_XML_logfile(); return; default: + break; } fprintf(prof_file, "\t%s Time and Allocation Profiling Report (%s)\n", time_str(), "Final"); fprintf(prof_file, "\n\t "); - fprintf(prof_file, " %s", prog_argv[0]); + fprintf(prof_file, " %s", prog_name); fprintf(prof_file, " +RTS"); for (count = 0; rts_argv[count]; count++) fprintf(prof_file, " %s", rts_argv[count]); @@ -732,9 +736,8 @@ reportCCSProfiling( void ) total_prof_ticks, TICK_MILLISECS); fprintf(prof_file, "\ttotal alloc = %11s bytes", - ullong_format_string((ullong) total_alloc * sizeof(W_), + ullong_format_string(total_alloc * sizeof(W_), temp, rtsTrue/*commas*/)); - /* ToDo: 64-bit error! */ #if defined(PROFILING_DETAIL_COUNTS) fprintf(prof_file, " (%lu closures)", total_allocs); @@ -764,15 +767,15 @@ reportCCS(CostCentreStack *ccs, nat indent) /* force printing of *all* cost centres if -P -P */ { - fprintf(prof_file, "%6d %-*s%-*s %-10s", - ccs->ccsID, indent, "", 24-indent, cc->label, cc->module); + fprintf(prof_file, "%-*s%-*s %-50s", + indent, "", 24-indent, cc->label, cc->module); - fprintf(prof_file, "%8lld %5.1f %5.1f %5.1f %5.1f", - ccs->scc_count, - total_prof_ticks == 0 ? 0.0 : (ccs->time_ticks / (StgFloat) total_prof_ticks * 100), - total_alloc == 0 ? 0.0 : (ccs->mem_alloc / (StgFloat) total_alloc * 100), - total_prof_ticks == 0 ? 0.0 : (ccs->inherited_ticks / (StgFloat) total_prof_ticks * 100), - total_alloc == 0 ? 0.0 : (ccs->inherited_alloc / (StgFloat) total_alloc * 100) + fprintf(prof_file, "%6d %11.0f %5.1f %5.1f %5.1f %5.1f", + ccs->ccsID, (double) ccs->scc_count, + total_prof_ticks == 0 ? 0.0 : ((double)ccs->time_ticks / (double)total_prof_ticks * 100.0), + total_alloc == 0 ? 0.0 : ((double)ccs->mem_alloc / (double)total_alloc * 100.0), + total_prof_ticks == 0 ? 0.0 : ((double)ccs->inherited_ticks / (double)total_prof_ticks * 100.0), + total_alloc == 0 ? 0.0 : ((double)ccs->inherited_alloc / (double)total_alloc * 100.0) ); if (RtsFlags.CcFlags.doCostCentres >= COST_CENTRES_VERBOSE) {