[project @ 2002-02-01 02:05:52 by sof]
[ghc-hetmet.git] / ghc / rts / Stats.c
index 4b26990..fab773c 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Stats.c,v 1.39 2001/11/26 16:54:22 simonmar Exp $
+ * $Id: Stats.c,v 1.42 2002/01/24 07:50:01 sof Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -106,7 +106,7 @@ static TICK_TYPE HCe_start_time, HCe_tot_time = 0;   // heap census prof elap ti
 #endif
 
 #ifdef PROFILING
-#define PROF_VAL(x)   x
+#define PROF_VAL(x)   (x)
 #else
 #define PROF_VAL(x)   0
 #endif
@@ -354,9 +354,10 @@ stat_startExit(void)
 {
     getTimes();
     MutElapsedStamp = CurrentElapsedTime;
-    MutElapsedTime = CurrentElapsedTime - GCe_tot_time - InitElapsedStamp;
+    MutElapsedTime = CurrentElapsedTime - GCe_tot_time -
+       PROF_VAL(RPe_tot_time + HCe_tot_time) - InitElapsedStamp;
     if (MutElapsedTime < 0) { MutElapsedTime = 0; }    /* sometimes -0.00 */
-    
+
     /* for SMP, we don't know the mutator time yet, we have to inspect
      * all the running threads to find out, and they haven't stopped
      * yet.  So we just timestamp MutUserTime at this point so we can
@@ -585,10 +586,12 @@ stat_workerStop(void)
     nat i;
     pthread_t me = pthread_self();
 
+    getTimes();
+
     for (i = 0; i < RtsFlags.ParFlags.nNodes; i++) {
        if (task_ids[i].id == me) {
-           task_ids[i].mut_time = usertime() - task_ids[i].gc_time;
-           task_ids[i].mut_etime = elapsedtime()
+           task_ids[i].mut_time = CurrentUserTime - task_ids[i].gc_time;
+           task_ids[i].mut_etime = CurrentElapsedTime
                - GCe_tot_time
                - task_ids[i].elapsedtimestart;
            if (task_ids[i].mut_time < 0.0)  { task_ids[i].mut_time = 0.0;  }
@@ -596,6 +599,12 @@ stat_workerStop(void)
        }
     }
 }
+
+long int stat_getElapsedTime ()
+{
+  getTimes();
+  return CurrentElapsedTime;
+}
 #endif
 
 /* -----------------------------------------------------------------------------
@@ -748,7 +757,9 @@ stat_exit(int alloc)
        }
 
        fflush(sf);
-       fclose(sf);
+       if (sf != stderr) {
+           fclose(sf);
+       }
     }
 }