X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FStgProf.h;h=165475d8119775807676ca1488f790712e98edce;hb=a814590c794226b34c0c9aff4138b0e7722ddab5;hp=f19f4d2de30421bf5ad82e0c9614dfb18c757b23;hpb=5ee90f9b922e51ac6613d860e728266e9bf4c84f;p=ghc-hetmet.git diff --git a/ghc/includes/StgProf.h b/ghc/includes/StgProf.h index f19f4d2..165475d 100644 --- a/ghc/includes/StgProf.h +++ b/ghc/includes/StgProf.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: StgProf.h,v 1.10 2000/05/12 13:01:04 simonmar Exp $ + * $Id: StgProf.h,v 1.17 2003/11/12 17:27:04 sof Exp $ * * (c) The GHC Team, 1998 * @@ -9,33 +9,9 @@ #ifndef STGPROF_H #define STGPROF_H -#if !defined(PROFILING) - -#define CCS_ALLOC(ccs, amount) doNothing() -#define ENTER_CC_PAP_CL(r) doNothing() -#define ENTER_CCS_PAP_CL(r) doNothing() - -#else /* PROFILING... */ - -/* ----------------------------------------------------------------------------- - * Constants - * ---------------------------------------------------------------------------*/ - -#define EMPTY_STACK NULL -#define EMPTY_TABLE NULL - -/* Constants used to set sumbsumed flag on CostCentres */ - -#define CC_IS_CAF 'c' /* 'c' => *is* a CAF cc */ -#define CC_IS_BORING 'B' /* 'B' => *not* a CAF/sub cc */ - /* ----------------------------------------------------------------------------- * Data Structures * ---------------------------------------------------------------------------*/ -/* - * CostCentre - */ - typedef struct _CostCentre { int ccID; @@ -44,7 +20,7 @@ typedef struct _CostCentre { /* used for accumulating costs at the end of the run... */ unsigned long time_ticks; - unsigned long mem_alloc; + ullong mem_alloc; char is_caf; @@ -52,35 +28,50 @@ typedef struct _CostCentre { } CostCentre; - -/* - * CostCentreStack - */ - typedef struct _CostCentreStack { int ccsID; CostCentre *cc; struct _CostCentreStack *prevStack; struct _IndexTable *indexTable; - - unsigned long scc_count; - + + unsigned int selected; + + ullong scc_count; + unsigned long time_ticks; - unsigned long mem_alloc; - unsigned long mem_resid; + + ullong mem_alloc; unsigned long inherited_ticks; - unsigned long inherited_alloc; + ullong inherited_alloc; CostCentre *root; } CostCentreStack; +/* ----------------------------------------------------------------------------- + * The rest is PROFILING only... + * ---------------------------------------------------------------------------*/ -/* - * IndexTable - */ +#if defined(PROFILING) + +/* ----------------------------------------------------------------------------- + * Constants + * ---------------------------------------------------------------------------*/ + +#define EMPTY_STACK NULL +#define EMPTY_TABLE NULL + +/* Constants used to set sumbsumed flag on CostCentres */ + +#define CC_IS_CAF 'c' /* 'c' => *is* a CAF cc */ +#define CC_IS_BORING 'B' /* 'B' => *not* a CAF/sub cc */ + + +/* ----------------------------------------------------------------------------- + * Data Structures + * ---------------------------------------------------------------------------*/ typedef struct _IndexTable { CostCentre *cc; @@ -192,10 +183,10 @@ extern CostCentreStack *CCS_LIST; /* registered CCS list */ cc : cc_ident, \ prevStack : NULL, \ indexTable : NULL, \ + selected : 0, \ scc_count : 0, \ time_ticks : 0, \ mem_alloc : 0, \ - mem_resid : 0, \ inherited_ticks : 0, \ inherited_alloc : 0, \ root : 0, \ @@ -208,8 +199,6 @@ extern CostCentreStack *CCS_LIST; /* registered CCS list */ * Time / Allocation Macros * ---------------------------------------------------------------------------*/ -#define CCS_TICK(ccs) (ccs)->time_ticks++ - /* eliminate profiling overhead from allocation costs */ #define CCS_ALLOC(ccs, size) (ccs)->mem_alloc += ((size)-sizeofW(StgProfHeader)) @@ -360,9 +349,15 @@ extern CostCentreStack *CCS_LIST; /* registered CCS list */ #define ENTER_CCS_PAP_CL(closure) \ ENTER_CCS_PAP((closure)->header.prof.ccs) - /* temp EW */ -#define STATIC_CCS_REF(ccs) (ccs) +/* ----------------------------------------------------------------------------- + When not profiling, these macros do nothing... + -------------------------------------------------------------------------- */ +#else /* !PROFILING */ +#define CCS_ALLOC(ccs, amount) doNothing() +#define ENTER_CC_PAP_CL(r) doNothing() +#define ENTER_CCS_PAP_CL(r) doNothing() + #endif /* PROFILING */ #endif /* STGPROF_H */