text: /* -----------------------------------------------------------------------------
   *
   * (c) The GHC Team, 1998-2005
   *
   * Statistics and timing-related functions.
   *
   * ---------------------------------------------------------------------------*/
  
  #ifndef STATS_H
  #define STATS_H
  
  #include "GetTime.h"
  
  #include "BeginPrivate.h"
  
  #if defined(mingw32_HOST_OS)
  /* On Win64, if we say "printf" then gcc thinks we are going to use
     MS format specifiers like %I64d rather than %llu */
  #define PRINTF gnu_printf
  #else
  /* However, on OS X, "gnu_printf" isn't recognised */
  #define PRINTF printf
  #endif
  
  struct gc_thread_;
  
  void      stat_startInit(void);
  void      stat_endInit(void);
  
  void      stat_startGCSync(struct gc_thread_ *_gct);
  void      stat_startGC(Capability *cap, struct gc_thread_ *_gct);
  void      stat_endGC  (Capability *cap, struct gc_thread_ *_gct,
                         W_ live, W_ copied, W_ slop, nat gen,
                         nat n_gc_threads, W_ par_max_copied, W_ par_tot_copied);
  
  #ifdef PROFILING
  void      stat_startRP(void);
  void      stat_endRP(nat, 
  #ifdef DEBUG_RETAINER
                              nat, int, 
  #endif
                              double);
  #endif /* PROFILING */
  
  #if defined(PROFILING) || defined(DEBUG)
  void      stat_startHeapCensus(void);
  void      stat_endHeapCensus(void);
  #endif
  
  void      stat_startExit(void);
  void      stat_endExit(void);
  
  void      stat_exit(void);
  void      stat_workerStop(void);
  
  void      initStats0(void);
  void      initStats1(void);
  
  double    mut_user_time_until(Time t);
  double    mut_user_time(void);
  
  #ifdef PROFILING
  double    mut_user_time_during_RP(void);
  double    mut_user_time_during_heap_census(void);
  #endif /* PROFILING */
  
  void      statDescribeGens( void );
  
  Time      stat_getElapsedGCTime(void);
  Time      stat_getElapsedTime(void);
  
  #include "EndPrivate.h"
  
  #endif /* STATS_H */
  