/* -----------------------------------------------------------------------------
- * $Id: Stats.c,v 1.40 2001/11/27 16:35:57 simonmar Exp $
+ * $Id: Stats.c,v 1.46 2002/08/19 16:02:26 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
#define PROF_VAL(x) 0
#endif
-lnat MaxResidency = 0; /* in words; for stats only */
-lnat AvgResidency = 0;
-lnat ResidencySamples = 0; /* for stats only */
+static lnat MaxResidency = 0; // in words; for stats only
+static lnat AvgResidency = 0;
+static lnat ResidencySamples = 0; // for stats only
static lnat GC_start_faults = 0, GC_end_faults = 0;
stats for this thread into the task_ids struct for that thread.
-------------------------------------------------------------------------- */
-#ifdef SMP
+#if defined(SMP)
void
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; }
}
#endif
+#if defined(SMP)
+long int stat_getElapsedTime ()
+{
+ getTimes();
+ return CurrentElapsedTime;
+}
+#endif
+
/* -----------------------------------------------------------------------------
Called at the end of execution
fprintf(sf, "<<ghc: %llu bytes, ", GC_tot_alloc*sizeof(W_));
fprintf(sf, "%d GCs, %ld/%ld avg/max bytes residency (%ld samples), %luM in use, %.2f INIT (%.2f elapsed), %.2f MUT (%.2f elapsed), %.2f GC (%.2f elapsed) :ghc>>\n",
total_collections,
- AvgResidency*sizeof(W_)/ResidencySamples,
+ ResidencySamples == 0 ? 0 :
+ AvgResidency*sizeof(W_)/ResidencySamples,
MaxResidency*sizeof(W_),
ResidencySamples,
(unsigned long)(mblocks_allocated * MBLOCK_SIZE / (1024L * 1024L)),
}
fflush(sf);
- fclose(sf);
+ if (sf != stderr) {
+ fclose(sf);
+ }
}
}