summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/RtsFlags.h2
-rw-r--r--rts/ProfHeap.c2
-rw-r--r--rts/RtsFlags.c12
3 files changed, 14 insertions, 2 deletions
diff --git a/includes/RtsFlags.h b/includes/RtsFlags.h
index fbdc64ebbc..6c4b230209 100644
--- a/includes/RtsFlags.h
+++ b/includes/RtsFlags.h
@@ -97,6 +97,8 @@ struct PROFILING_FLAGS {
nat maxRetainerSetSize;
+ nat ccsLength;
+
char* modSelector;
char* descrSelector;
char* typeSelector;
diff --git a/rts/ProfHeap.c b/rts/ProfHeap.c
index 2818fb6946..0ee53f3e22 100644
--- a/rts/ProfHeap.c
+++ b/rts/ProfHeap.c
@@ -806,7 +806,7 @@ dumpCensus( Census *census )
#ifdef PROFILING
switch (RtsFlags.ProfFlags.doHeapProfile) {
case HEAP_BY_CCS:
- fprint_ccs(hp_file, (CostCentreStack *)ctr->identity, 25);
+ fprint_ccs(hp_file, (CostCentreStack *)ctr->identity, RtsFlags.ProfFlags.ccsLength);
break;
case HEAP_BY_MOD:
case HEAP_BY_DESCR:
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c
index 9aa906f130..7b8a4d1d68 100644
--- a/rts/RtsFlags.c
+++ b/rts/RtsFlags.c
@@ -177,6 +177,7 @@ void initRtsFlagsDefaults(void)
RtsFlags.ProfFlags.includeTSOs = rtsFalse;
RtsFlags.ProfFlags.showCCSOnException = rtsFalse;
RtsFlags.ProfFlags.maxRetainerSetSize = 8;
+ RtsFlags.ProfFlags.ccsLength = 25;
RtsFlags.ProfFlags.modSelector = NULL;
RtsFlags.ProfFlags.descrSelector = NULL;
RtsFlags.ProfFlags.typeSelector = NULL;
@@ -369,6 +370,9 @@ usage_text[] = {
" -hb<bio>... closures with specified biographies (lag,drag,void,use)",
"",
" -R<size> Set the maximum retainer set size (default: 8)",
+"",
+" -L<chars> Maximum length of a cost-centre stack in a heap profile",
+" (default: 25)",
"",
" -i<sec> Time between heap samples (seconds, default: 0.1)",
"",
@@ -858,7 +862,13 @@ error = rtsTrue;
PROFILING_BUILD_ONLY(
RtsFlags.ProfFlags.maxRetainerSetSize = atof(rts_argv[arg]+2);
) break;
-
+ case 'L':
+ PROFILING_BUILD_ONLY(
+ RtsFlags.ProfFlags.ccsLength = atof(rts_argv[arg]+2);
+ if(RtsFlags.ProfFlags.ccsLength <= 0) {
+ bad_option(rts_argv[arg]);
+ }
+ ) break;
case 'h': /* serial heap profile */
#if !defined(PROFILING) && defined(DEBUG)
switch (rts_argv[arg][2]) {