Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 96 additions & 1 deletion src/TraceEvent/Parsers/ClrTraceEventParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -982,6 +982,18 @@ public event Action<YieldProcessorMeasurementTraceData> YieldProcessorMeasuremen
source.UnregisterEventTemplate(value, 0, YieldProcessorMeasurementTaskGuid);
}
}
public event Action<ThreadPoolMinMaxThreadsTraceData> ThreadPoolMinMaxThreads
{
add
{
RegisterTemplate(ThreadPoolMinMaxThreadsTemplate(value));
}
remove
{
source.UnregisterEventTemplate(value, 59, ProviderGuid);
source.UnregisterEventTemplate(value, 0, ThreadPoolMinMaxThreadsTaskGuid);
}
}
public event Action<ThreadPoolWorkingThreadCountTraceData> ThreadPoolWorkingThreadCountStart
{
add
Expand Down Expand Up @@ -2109,13 +2121,17 @@ static private YieldProcessorMeasurementTraceData YieldProcessorMeasurementTempl
{ // action, eventid, taskid, taskName, taskGuid, opcode, opcodeName, providerGuid, providerName
return new YieldProcessorMeasurementTraceData(action, 58, 37, "YieldProcessorMeasurement", YieldProcessorMeasurementTaskGuid, 0, "Info", ProviderGuid, ProviderName);
}
static private ThreadPoolMinMaxThreadsTraceData ThreadPoolMinMaxThreadsTemplate(Action<ThreadPoolMinMaxThreadsTraceData> action)
{ // action, eventid, taskid, taskName, taskGuid, opcode, opcodeName, providerGuid, providerName
return new ThreadPoolMinMaxThreadsTraceData(action, 59, 38, "ThreadPoolMinMaxThreads", ThreadPoolMinMaxThreadsTaskGuid, 0, "Info", ProviderGuid, ProviderName);
}

static private volatile TraceEvent[] s_templates;
protected internal override void EnumerateTemplates(Func<string, string, EventFilterResponse> eventsToObserve, Action<TraceEvent> callback)
{
if (s_templates == null)
{
var templates = new TraceEvent[141];
var templates = new TraceEvent[142];
templates[0] = new GCStartTraceData(null, 1, 1, "GC", GCTaskGuid, 1, "Start", ProviderGuid, ProviderName);
templates[1] = new GCEndTraceData(null, 2, 1, "GC", GCTaskGuid, 2, "Stop", ProviderGuid, ProviderName);
templates[2] = new GCNoUserDataTraceData(null, 3, 1, "GC", GCTaskGuid, 132, "RestartEEStop", ProviderGuid, ProviderName);
Expand Down Expand Up @@ -2266,6 +2282,8 @@ protected internal override void EnumerateTemplates(Func<string, string, EventFi
templates[139] = ExecutionCheckpointTemplate(null);
templates[140] = YieldProcessorMeasurementTemplate(null);

templates[141] = ThreadPoolMinMaxThreadsTemplate(null);

s_templates = templates;
}

Expand Down Expand Up @@ -2319,6 +2337,7 @@ protected internal override void EnumerateTemplates(Func<string, string, EventFi
private static readonly Guid AppDomainResourceManagementTaskGuid = new Guid(unchecked((int)0x88e83959), unchecked((short)0x6185), unchecked((short)0x4e0b), 0x95, 0xb8, 0x0e, 0x4a, 0x35, 0xdf, 0x61, 0x22);
private static readonly Guid ILStubTaskGuid = new Guid(unchecked((int)0xd00792da), unchecked((short)0x07b7), unchecked((short)0x40f5), 0x00, 0x00, 0x5d, 0x97, 0x4e, 0x05, 0x47, 0x40);
private static readonly Guid ThreadPoolWorkerThreadTaskGuid = new Guid(unchecked((int)0x8a9a44ab), unchecked((short)0xf681), unchecked((short)0x4271), 0x88, 0x10, 0x83, 0x0d, 0xab, 0x9f, 0x56, 0x21);
private static readonly Guid ThreadPoolMinMaxThreadsTaskGuid = new Guid(unchecked((int)0x6d168d67), unchecked((short)0xfb06), unchecked((short)0x4a60), 0x83, 0xba, 0x25, 0x44, 0xe8, 0x17, 0xf6, 0xa3);
private static readonly Guid ThreadPoolWorkerThreadRetirementTaskGuid = new Guid(unchecked((int)0x402ee399), unchecked((short)0xc137), unchecked((short)0x4dc0), 0xa5, 0xab, 0x3c, 0x2d, 0xea, 0x64, 0xac, 0x9c);
private static readonly Guid ThreadPoolWorkerThreadAdjustmentTaskGuid = new Guid(unchecked((int)0x94179831), unchecked((short)0xe99a), unchecked((short)0x4625), 0x88, 0x24, 0x23, 0xca, 0x5e, 0x00, 0xca, 0x7d);
private static readonly Guid RuntimeTaskGuid = new Guid(unchecked((int)0xcd7d3e32), unchecked((short)0x65fe), unchecked((short)0x40cd), 0x92, 0x25, 0xa2, 0x57, 0x7d, 0x20, 0x3f, 0xc3);
Expand Down Expand Up @@ -7991,6 +8010,82 @@ public override object PayloadValue(int index)
private event Action<ThreadPoolWorkerThreadTraceData> Action;
#endregion
}
public sealed class ThreadPoolMinMaxThreadsTraceData : TraceEvent
{
public int MinWorkerThreads { get { return GetInt16At(0); } }
public int MaxWorkerThreads { get { return GetInt16At(2); } }
public int MinIOCompletionThreads { get { return GetInt16At(4); } }
public int MaxIOCompletionThreads { get { return GetInt16At(6); } }
public int ClrInstanceID { get { return GetInt16At(8); } }

#region Private
internal ThreadPoolMinMaxThreadsTraceData(Action<ThreadPoolMinMaxThreadsTraceData> action, int eventID, int task, string taskName, Guid taskGuid, int opcode, string opcodeName, Guid providerGuid, string providerName)
: base(eventID, task, taskName, taskGuid, opcode, opcodeName, providerGuid, providerName)
{
Action = action;
}
protected internal override void Dispatch()
{
Action(this);
}
protected internal override Delegate Target
{
get { return Action; }
set { Action = (Action<ThreadPoolMinMaxThreadsTraceData>)value; }
}
protected internal override void Validate()
{
Debug.Assert(!(Version == 0 && EventDataLength != 10));
Debug.Assert(!(Version > 0 && EventDataLength < 10));
}
public override StringBuilder ToXml(StringBuilder sb)
{
Prefix(sb);
XmlAttrib(sb, "MinWorkerThreads", MinWorkerThreads);
XmlAttrib(sb, "MaxWorkerThreads", MaxWorkerThreads);
XmlAttrib(sb, "MinIOCompletionThreads", MinIOCompletionThreads);
XmlAttrib(sb, "MaxIOCompletionThreads", MaxIOCompletionThreads);
XmlAttrib(sb, "ClrInstanceID", ClrInstanceID);
sb.Append("/>");
return sb;
}

public override string[] PayloadNames
{
get
{
if (payloadNames == null)
{
payloadNames = new string[] { "MinWorkerThreads", "MaxWorkerThreads", "MinIOCompletionThreads", "MaxIOCompletionThreads", "ClrInstanceID"};
}

return payloadNames;
}
}

public override object PayloadValue(int index)
{
switch (index)
{
case 0:
return MinWorkerThreads;
case 1:
return MaxWorkerThreads;
case 2:
return MinIOCompletionThreads;
case 3:
return MaxIOCompletionThreads;
case 4:
return ClrInstanceID;
default:
Debug.Assert(false, "Bad field index");
return null;
}
}

private event Action<ThreadPoolMinMaxThreadsTraceData> Action;
#endregion
}
public sealed class ThreadPoolWorkerThreadAdjustmentSampleTraceData : TraceEvent
{
public double Throughput { get { return GetDoubleAt(0); } }
Expand Down