summaryrefslogtreecommitdiff
path: root/rts/Profiling.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2008-05-12 10:40:20 +0000
committerSimon Marlow <marlowsd@gmail.com>2008-05-12 10:40:20 +0000
commit9ac03f0b59ea5a6274309c6915666f4a79c0cb09 (patch)
treec08a42784813f76dfae120aaff2c99377a8f3d70 /rts/Profiling.c
parentdcf739bd7fb7de140be3bafb4ce211e2e5c7bba9 (diff)
downloadhaskell-9ac03f0b59ea5a6274309c6915666f4a79c0cb09.tar.gz
FIX #2234: don't generate <prog>.prof unless we're going to put something in it
Diffstat (limited to 'rts/Profiling.c')
-rw-r--r--rts/Profiling.c64
1 files changed, 37 insertions, 27 deletions
diff --git a/rts/Profiling.c b/rts/Profiling.c
index 4e759b6942..77fab52b6c 100644
--- a/rts/Profiling.c
+++ b/rts/Profiling.c
@@ -268,34 +268,44 @@ ccsSetSelected( CostCentreStack *ccs )
static void
initProfilingLogFile(void)
{
- /* Initialise the log file name */
- 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) {
- debugBelch("Can't open profiling report file %s\n", prof_filename);
- RtsFlags.CcFlags.doCostCentres = 0;
- // The following line was added by Sung; retainer/LDV profiling may need
- // two output files, i.e., <program>.prof/hp.
- if (RtsFlags.ProfFlags.doHeapProfile == HEAP_BY_RETAINER)
- RtsFlags.ProfFlags.doHeapProfile = 0;
- return;
+ if (RtsFlags.CcFlags.doCostCentres == 0 &&
+ RtsFlags.ProfFlags.doHeapProfile != HEAP_BY_RETAINER)
+ {
+ /* No need for the <prog>.prof file */
+ prof_filename = NULL;
+ prof_file = NULL;
}
-
- 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", RtsFlags.MiscFlags.tickInterval);
-
- /* declare all the cost centres */
- {
- CostCentre *cc;
- for (cc = CC_LIST; cc != NULL; cc = cc->link) {
- fprintf(prof_file, "%d %ld \"%s\" \"%s\"\n",
- CC_UQ, cc->ccID, cc->label, cc->module);
- }
- }
+ else
+ {
+ /* Initialise the log file name */
+ 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) {
+ debugBelch("Can't open profiling report file %s\n", prof_filename);
+ RtsFlags.CcFlags.doCostCentres = 0;
+ // The following line was added by Sung; retainer/LDV profiling may need
+ // two output files, i.e., <program>.prof/hp.
+ if (RtsFlags.ProfFlags.doHeapProfile == HEAP_BY_RETAINER)
+ RtsFlags.ProfFlags.doHeapProfile = 0;
+ return;
+ }
+
+ 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", RtsFlags.MiscFlags.tickInterval);
+
+ /* declare all the cost centres */
+ {
+ CostCentre *cc;
+ for (cc = CC_LIST; cc != NULL; cc = cc->link) {
+ fprintf(prof_file, "%d %ld \"%s\" \"%s\"\n",
+ CC_UQ, cc->ccID, cc->label, cc->module);
+ }
+ }
+ }
}
if (RtsFlags.ProfFlags.doHeapProfile) {