diff options
Diffstat (limited to 'rts/RtsFlags.c')
| -rw-r--r-- | rts/RtsFlags.c | 60 |
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); |
