projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
distclean: ghcprof-inplace
[ghc-hetmet.git]
/
rts
/
ProfHeap.c
diff --git
a/rts/ProfHeap.c
b/rts/ProfHeap.c
index
dfa0067
..
db9e41f
100644
(file)
--- a/
rts/ProfHeap.c
+++ b/
rts/ProfHeap.c
@@
-99,6
+99,7
@@
static void dumpCensus( Census *census );
Closure Type Profiling;
------------------------------------------------------------------------- */
Closure Type Profiling;
------------------------------------------------------------------------- */
+#ifndef PROFILING
static char *type_names[] = {
"INVALID_OBJECT",
"CONSTR",
static char *type_names[] = {
"INVALID_OBJECT",
"CONSTR",
@@
-173,6
+174,7
@@
static char *type_names[] = {
"CATCH_STM_FRAME",
"N_CLOSURE_TYPES"
};
"CATCH_STM_FRAME",
"N_CLOSURE_TYPES"
};
+#endif
/* ----------------------------------------------------------------------------
* Find the "closure identity", which is a unique pointer reresenting
/* ----------------------------------------------------------------------------
* Find the "closure identity", which is a unique pointer reresenting
@@
-190,9
+192,9
@@
closureIdentity( StgClosure *p )
case HEAP_BY_MOD:
return p->header.prof.ccs->cc->module;
case HEAP_BY_DESCR:
case HEAP_BY_MOD:
return p->header.prof.ccs->cc->module;
case HEAP_BY_DESCR:
- return get_itbl(p)->prof.closure_desc;
+ return GET_PROF_DESC(get_itbl(p));
case HEAP_BY_TYPE:
case HEAP_BY_TYPE:
- return get_itbl(p)->prof.closure_type;
+ return GET_PROF_TYPE(get_itbl(p));
case HEAP_BY_RETAINER:
// AFAIK, the only closures in the heap which might not have a
// valid retainer set are DEAD_WEAK closures.
case HEAP_BY_RETAINER:
// AFAIK, the only closures in the heap which might not have a
// valid retainer set are DEAD_WEAK closures.
@@
-215,7
+217,6
@@
closureIdentity( StgClosure *p )
case CONSTR_0_2:
case CONSTR_STATIC:
case CONSTR_NOCAF_STATIC:
case CONSTR_0_2:
case CONSTR_STATIC:
case CONSTR_NOCAF_STATIC:
- printf("",strlen(GET_CON_DESC(itbl_to_con_itbl(info))));
return GET_CON_DESC(itbl_to_con_itbl(info));
default:
return type_names[info->type];
return GET_CON_DESC(itbl_to_con_itbl(info));
default:
return type_names[info->type];
@@
-341,8
+342,12
@@
initEra(Census *census)
STATIC_INLINE void
freeEra(Census *census)
{
STATIC_INLINE void
freeEra(Census *census)
{
- arenaFree(census->arena);
- freeHashTable(census->hash, NULL);
+ if (RtsFlags.ProfFlags.bioSelector != NULL)
+ // when bioSelector==NULL, these are freed in heapCensus()
+ {
+ arenaFree(census->arena);
+ freeHashTable(census->hash, NULL);
+ }
}
/* --------------------------------------------------------------------------
}
/* --------------------------------------------------------------------------
@@
-377,7
+382,7
@@
nextEra( void )
* Heap profiling by info table
* ------------------------------------------------------------------------- */
* Heap profiling by info table
* ------------------------------------------------------------------------- */
-#if !defined(PROFILNG)
+#if !defined(PROFILING)
FILE *hp_file;
static char *hp_filename;
FILE *hp_file;
static char *hp_filename;
@@
-452,12
+457,8
@@
initHeapProfiling(void)
era = 0;
}
era = 0;
}
- { // max_era = 2^LDV_SHIFT
- nat p;
- max_era = 1;
- for (p = 0; p < LDV_SHIFT; p++)
- max_era *= 2;
- }
+ // max_era = 2^LDV_SHIFT
+ max_era = 1 << LDV_SHIFT;
n_censuses = 32;
censuses = stgMallocBytes(sizeof(Census) * n_censuses, "initHeapProfiling");
n_censuses = 32;
censuses = stgMallocBytes(sizeof(Census) * n_censuses, "initHeapProfiling");
@@
-523,12
+524,19
@@
endHeapProfiling(void)
}
#endif
}
#endif
- {
+#ifdef PROFILING
+ if (doingLDVProfiling()) {
nat t;
nat t;
- for (t = 0; t <= era; t++) {
+ for (t = 1; t <= era; t++) {
freeEra( &censuses[t] );
}
freeEra( &censuses[t] );
}
+ } else {
+ freeEra( &censuses[0] );
}
}
+#else
+ freeEra( &censuses[0] );
+#endif
+
stgFree(censuses);
seconds = mut_user_time();
stgFree(censuses);
seconds = mut_user_time();
@@
-638,12
+646,12
@@
closureSatisfiesConstraints( StgClosure* p )
}
if (RtsFlags.ProfFlags.descrSelector) {
}
if (RtsFlags.ProfFlags.descrSelector) {
- b = strMatchesSelector( (get_itbl((StgClosure *)p))->prof.closure_desc,
+ b = strMatchesSelector( (GET_PROF_DESC(get_itbl((StgClosure *)p))),
RtsFlags.ProfFlags.descrSelector );
if (!b) return rtsFalse;
}
if (RtsFlags.ProfFlags.typeSelector) {
RtsFlags.ProfFlags.descrSelector );
if (!b) return rtsFalse;
}
if (RtsFlags.ProfFlags.typeSelector) {
- b = strMatchesSelector( (get_itbl((StgClosure *)p))->prof.closure_type,
+ b = strMatchesSelector( (GET_PROF_TYPE(get_itbl((StgClosure *)p))),
RtsFlags.ProfFlags.typeSelector );
if (!b) return rtsFalse;
}
RtsFlags.ProfFlags.typeSelector );
if (!b) return rtsFalse;
}