summaryrefslogtreecommitdiff
path: root/rts/RtsFlags.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/RtsFlags.c')
-rw-r--r--rts/RtsFlags.c60
1 files changed, 57 insertions, 3 deletions
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c
index 24181d32b0..fcc1f49a36 100644
--- a/rts/RtsFlags.c
+++ b/rts/RtsFlags.c
@@ -163,6 +163,9 @@ void initRtsFlagsDefaults(void)
RtsFlags.TraceFlags.tracing = TRACE_NONE;
RtsFlags.TraceFlags.timestamp = rtsFalse;
RtsFlags.TraceFlags.scheduler = rtsFalse;
+ RtsFlags.TraceFlags.gc = rtsFalse;
+ RtsFlags.TraceFlags.sparks_sampled= rtsFalse;
+ RtsFlags.TraceFlags.sparks_full = rtsFalse;
#endif
RtsFlags.MiscFlags.tickInterval = 20; /* In milliseconds */
@@ -288,9 +291,15 @@ usage_text[] = {
# endif
" where [flags] can contain:",
" s scheduler events",
+" g GC events",
+" p par spark events (sampled)",
+" f par spark events (full detail)",
# ifdef DEBUG
" t add time stamps (only useful with -v)",
# endif
+" a all event classes above",
+" -x disable an event class, for any flag above",
+" the initial enabled event classes are 'sgp'",
#endif
#if !defined(PROFILING)
@@ -1429,19 +1438,64 @@ 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, except full-detail sparks.
+ * Similarly, in future we might default to slightly less verbose
+ * scheduler or GC tracing.
+ */
+ RtsFlags.TraceFlags.scheduler = rtsTrue;
+ RtsFlags.TraceFlags.gc = rtsTrue;
+ RtsFlags.TraceFlags.sparks_sampled = rtsTrue;
for (c = arg; *c != '\0'; c++) {
switch(*c) {
case '\0':
break;
+ case '-':
+ enabled = rtsFalse;
+ break;
+ case 'a':
+ RtsFlags.TraceFlags.scheduler = enabled;
+ RtsFlags.TraceFlags.gc = enabled;
+ RtsFlags.TraceFlags.sparks_sampled = enabled;
+ RtsFlags.TraceFlags.sparks_full = enabled;
+ enabled = rtsTrue;
+ break;
+
case 's':
- RtsFlags.TraceFlags.scheduler = rtsTrue;
+ RtsFlags.TraceFlags.scheduler = enabled;
+ enabled = rtsTrue;
+ break;
+ case 'p':
+ RtsFlags.TraceFlags.sparks_sampled = enabled;
+ enabled = rtsTrue;
+ break;
+ case 'f':
+ RtsFlags.TraceFlags.sparks_full = enabled;
+ enabled = rtsTrue;
break;
case 't':
- RtsFlags.TraceFlags.timestamp = rtsTrue;
+ RtsFlags.TraceFlags.timestamp = enabled;
+ enabled = rtsTrue;
break;
case 'g':
- // ignored for backwards-compat
+ RtsFlags.TraceFlags.gc = enabled;
+ enabled = rtsTrue;
break;
default:
errorBelch("unknown trace option: %c",*c);