summaryrefslogtreecommitdiff
path: root/rts/RtsFlags.c
diff options
context:
space:
mode:
authorDuncan Coutts <duncan@well-typed.com>2011-07-08 17:36:16 +0200
committerDuncan Coutts <duncan@well-typed.com>2011-07-18 16:31:15 +0100
commita5192d48e61a8ece69cddc43cc12625fcdcc56ec (patch)
tree162cfa9cb99b7afd75ea13a59f7058e0146aabec /rts/RtsFlags.c
parent5cc2670c58909b237249e96823b1bf8a236e1b53 (diff)
downloadhaskell-a5192d48e61a8ece69cddc43cc12625fcdcc56ec.tar.gz
add a new trace class for spark events
Diffstat (limited to 'rts/RtsFlags.c')
-rw-r--r--rts/RtsFlags.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c
index 24181d32b0..abeffc79a6 100644
--- a/rts/RtsFlags.c
+++ b/rts/RtsFlags.c
@@ -163,6 +163,7 @@ void initRtsFlagsDefaults(void)
RtsFlags.TraceFlags.tracing = TRACE_NONE;
RtsFlags.TraceFlags.timestamp = rtsFalse;
RtsFlags.TraceFlags.scheduler = rtsFalse;
+ RtsFlags.TraceFlags.sparks = rtsFalse;
#endif
RtsFlags.MiscFlags.tickInterval = 20; /* In milliseconds */
@@ -288,6 +289,7 @@ usage_text[] = {
# endif
" where [flags] can contain:",
" s scheduler events",
+" p par spark events",
# ifdef DEBUG
" t add time stamps (only useful with -v)",
# endif
@@ -1429,19 +1431,57 @@ decodeSize(const char *flag, nat offset, StgWord64 min, StgWord64 max)
static void read_trace_flags(char *arg)
{
char *c;
+ rtsBool enabled = rtsTrue;
+ /* Syntax for tracing flags currently looks like:
+ *
+ * -l To turn on eventlog tracing with default trace classes
+ * -lx Turn on class 'x' (for some class listed below)
+ * -l-x Turn off class 'x'
+ * -la Turn on all classes
+ * -l-a Turn off all classes
+ *
+ * This lets users say things like:
+ * -la-p "all but sparks"
+ * -l-ap "only sparks"
+ */
+
+ /* Start by turning on the default tracing flags.
+ *
+ * Currently this is all the trace classes, but might not be in
+ * future, for example we might default to slightly less verbose
+ * scheduler or GC tracing.
+ */
+ RtsFlags.TraceFlags.scheduler = rtsTrue;
+ RtsFlags.TraceFlags.sparks = rtsTrue;
for (c = arg; *c != '\0'; c++) {
switch(*c) {
case '\0':
break;
+ case '-':
+ enabled = rtsFalse;
+ break;
+ case 'a':
+ RtsFlags.TraceFlags.scheduler = enabled;
+ RtsFlags.TraceFlags.sparks = enabled;
+ enabled = rtsTrue;
+ break;
+
case 's':
- RtsFlags.TraceFlags.scheduler = rtsTrue;
+ RtsFlags.TraceFlags.scheduler = enabled;
+ enabled = rtsTrue;
+ break;
+ case 'p':
+ RtsFlags.TraceFlags.sparks = enabled;
+ enabled = rtsTrue;
break;
case 't':
- RtsFlags.TraceFlags.timestamp = rtsTrue;
+ RtsFlags.TraceFlags.timestamp = enabled;
+ enabled = rtsTrue;
break;
case 'g':
// ignored for backwards-compat
+ enabled = rtsTrue;
break;
default:
errorBelch("unknown trace option: %c",*c);