in rts/Trace.c [53:104]
void initTracing (void)
{
const EventLogWriter *eventlog_writer = getEventLogWriter();
#if defined(THREADED_RTS)
initMutex(&trace_utx);
#endif
// -Ds turns on scheduler tracing too
TRACE_sched =
RtsFlags.TraceFlags.scheduler ||
RtsFlags.DebugFlags.scheduler;
// -Dg turns on gc tracing too
TRACE_gc =
RtsFlags.TraceFlags.gc ||
RtsFlags.DebugFlags.gc ||
RtsFlags.DebugFlags.scheduler;
if (TRACE_gc && RtsFlags.GcFlags.giveStats == NO_GC_STATS) {
RtsFlags.GcFlags.giveStats = COLLECT_GC_STATS;
}
TRACE_spark_sampled =
RtsFlags.TraceFlags.sparks_sampled;
// -Dr turns on full spark tracing
TRACE_spark_full =
RtsFlags.TraceFlags.sparks_full ||
RtsFlags.DebugFlags.sparks;
TRACE_user =
RtsFlags.TraceFlags.user;
// We trace cap events if we're tracing anything else
TRACE_cap =
TRACE_sched ||
TRACE_gc ||
TRACE_spark_sampled ||
TRACE_spark_full ||
TRACE_user;
eventlog_enabled = RtsFlags.TraceFlags.tracing == TRACE_EVENTLOG &&
eventlog_writer != NULL;
/* Note: we can have any of the TRACE_* flags turned on even when
eventlog_enabled is off. In the DEBUG way we may be tracing to stderr.
*/
if (eventlog_enabled) {
initEventLogging(eventlog_writer);
}
}