X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FProfiling.c;h=a8650788e95df0480f0f89b90fa449f323ae0f8e;hp=028dc5a5091bf04fa8cdde31cf382ddf102f5b67;hb=1cb0eb071f1316d6650f354166506789a2638720;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1 diff --git a/rts/Profiling.c b/rts/Profiling.c index 028dc5a..a865078 100644 --- a/rts/Profiling.c +++ b/rts/Profiling.c @@ -13,7 +13,6 @@ #include "RtsUtils.h" #include "RtsFlags.h" #include "Profiling.h" -#include "Storage.h" #include "Proftimer.h" #include "Timer.h" #include "ProfHeap.h" @@ -23,6 +22,10 @@ #include +#ifdef DEBUG +#include "Trace.h" +#endif + /* * Profiling allocation arena. */ @@ -277,13 +280,13 @@ initProfilingLogFile(void) if (RtsFlags.CcFlags.doCostCentres == COST_CENTRES_XML) { /* dump the time, and the profiling interval */ fprintf(prof_file, "\"%s\"\n", time_str()); - fprintf(prof_file, "\"%d ms\"\n", TICK_MILLISECS); + fprintf(prof_file, "\"%d ms\"\n", RtsFlags.MiscFlags.tickInterval); /* declare all the cost centres */ { CostCentre *cc; for (cc = CC_LIST; cc != NULL; cc = cc->link) { - fprintf(prof_file, "%d %d \"%s\" \"%s\"\n", + fprintf(prof_file, "%d %ld \"%s\" \"%s\"\n", CC_UQ, cc->ccID, cc->label, cc->module); } } @@ -353,11 +356,12 @@ CostCentreStack * PushCostCentre ( CostCentreStack *ccs, CostCentre *cc ) #define PushCostCentre _PushCostCentre { - IF_DEBUG(prof, - debugBelch("Pushing %s on ", cc->label); - debugCCS(ccs); - debugBelch("\n")); - return PushCostCentre(ccs,cc); + IF_DEBUG(prof, + traceBegin("pushing %s on ", cc->label); + debugCCS(ccs); + traceEnd();); + + return PushCostCentre(ccs,cc); } #endif @@ -533,10 +537,10 @@ DecCCS(CostCentreStack *ccs) { if (prof_file && RtsFlags.CcFlags.doCostCentres == COST_CENTRES_XML) { if (ccs->prevStack == EMPTY_STACK) - fprintf(prof_file, "%d %d 1 %d\n", CCS_UQ, + fprintf(prof_file, "%d %ld 1 %ld\n", CCS_UQ, ccs->ccsID, ccs->cc->ccID); else - fprintf(prof_file, "%d %d 2 %d %d\n", CCS_UQ, + fprintf(prof_file, "%d %ld 2 %ld %ld\n", CCS_UQ, ccs->ccsID, ccs->cc->ccID, ccs->prevStack->ccsID); } } @@ -546,10 +550,10 @@ DecBackEdge( CostCentreStack *ccs, CostCentreStack *oldccs ) { if (prof_file && RtsFlags.CcFlags.doCostCentres == COST_CENTRES_XML) { if (ccs->prevStack == EMPTY_STACK) - fprintf(prof_file, "%d %d 1 %d\n", CCS_UQ, + fprintf(prof_file, "%d %ld 1 %ld\n", CCS_UQ, ccs->ccsID, ccs->cc->ccID); else - fprintf(prof_file, "%d %d 2 %d %d\n", CCS_UQ, + fprintf(prof_file, "%d %ld 2 %ld %ld\n", CCS_UQ, ccs->ccsID, ccs->cc->ccID, oldccs->ccsID); } } @@ -663,7 +667,8 @@ report_per_cc_costs( void ) ); if (RtsFlags.CcFlags.doCostCentres >= COST_CENTRES_VERBOSE) { - fprintf(prof_file, " %5llu %9llu", (StgWord64)(cc->time_ticks), cc->mem_alloc); + fprintf(prof_file, " %5" FMT_Word64 " %9" FMT_Word64, + (StgWord64)(cc->time_ticks), cc->mem_alloc); } fprintf(prof_file, "\n"); } @@ -730,8 +735,10 @@ reportCCSProfiling( void ) fprintf(prof_file, "\n\n"); fprintf(prof_file, "\ttotal time = %11.2f secs (%lu ticks @ %d ms)\n", - total_prof_ticks / (StgFloat) TICK_FREQUENCY, - total_prof_ticks, TICK_MILLISECS); + (double) total_prof_ticks * + (double) RtsFlags.MiscFlags.tickInterval / 1000, + (unsigned long) total_prof_ticks, + (int) RtsFlags.MiscFlags.tickInterval); fprintf(prof_file, "\ttotal alloc = %11s bytes", ullong_format_string(total_alloc * sizeof(W_), @@ -768,7 +775,7 @@ reportCCS(CostCentreStack *ccs, nat indent) fprintf(prof_file, "%-*s%-*s %-50s", indent, "", 24-indent, cc->label, cc->module); - fprintf(prof_file, "%6d %11.0f %5.1f %5.1f %5.1f %5.1f", + fprintf(prof_file, "%6ld %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), @@ -777,7 +784,8 @@ reportCCS(CostCentreStack *ccs, nat indent) ); if (RtsFlags.CcFlags.doCostCentres >= COST_CENTRES_VERBOSE) { - fprintf(prof_file, " %5llu %9llu", (StgWord64)(ccs->time_ticks), ccs->mem_alloc*sizeof(W_)); + fprintf(prof_file, " %5" FMT_Word64 " %9" FMT_Word64, + (StgWord64)(ccs->time_ticks), ccs->mem_alloc*sizeof(W_)); #if defined(PROFILING_DETAIL_COUNTS) fprintf(prof_file, " %8ld %8ld %8ld %8ld %8ld %8ld %8ld", ccs->mem_allocs, ccs->thunk_count, @@ -879,8 +887,6 @@ gen_XML_logfile( void ) reportCCS_XML(pruneCCSTree(CCS_MAIN)); fprintf(prof_file, " 0\n"); - - fclose(prof_file); } static void @@ -893,7 +899,7 @@ reportCCS_XML(CostCentreStack *ccs) cc = ccs->cc; - fprintf(prof_file, " 1 %d %llu %llu %llu", + fprintf(prof_file, " 1 %ld %" FMT_Word64 " %" FMT_Word64 " %" FMT_Word64, ccs->ccsID, ccs->scc_count, (StgWord64)(ccs->time_ticks), ccs->mem_alloc); for (i = ccs->indexTable; i != 0; i = i->next) {