private void Clr_MethodR2RGetEntryPoint(R2RGetEntryPointTraceData obj) { IdOfIncompleteAction id = new IdOfIncompleteAction(); id.Identifier = obj.MethodID; id.ThreadID = obj.ThreadID; // If we had a R2R start lookup event, capture that start time, otherwise, use the R2REntrypoint // data as both start and stop EventUID startUID = new EventUID(obj); if (_incompleteR2REvents.TryGetValue(id, out IncompleteActionDesc r2rStartData)) { startUID = r2rStartData.Start; _incompleteR2REvents.Remove(id); } if (obj.EntryPoint == 0) { // If Entrypoint is null then the search failed. AddStartStopData(obj.ProcessID, id.ThreadID, startUID, new EventUID(obj), "R2R_Failed" + "(" + JITStats.GetMethodName(obj) + ")"); } else { AddStartStopData(obj.ProcessID, id.ThreadID, startUID, new EventUID(obj), "R2R_Found" + "(" + JITStats.GetMethodName(obj) + ")"); } }
private void MethodJittedEvent(TraceEvent evt, long methodID) { IdOfIncompleteAction id = new IdOfIncompleteAction(); id.Identifier = methodID; id.ThreadID = evt.ThreadID; if (_incompleteJitEvents.TryGetValue(id, out IncompleteActionDesc jitStartData)) { // JitStart is processed, don't process it again. _incompleteJitEvents.Remove(id); AddStartStopData(evt.ProcessID, id.ThreadID, jitStartData.Start, new EventUID(evt), jitStartData.OperationType + "(" + jitStartData.Name + ")"); } }
private void Clr_TypeLoadStart(TypeLoadStartTraceData obj) { IncompleteActionDesc incompleteDesc = new IncompleteActionDesc(); incompleteDesc.Start = new EventUID(obj); incompleteDesc.Name = ""; incompleteDesc.OperationType = "TypeLoad"; IdOfIncompleteAction id = new IdOfIncompleteAction(); id.Identifier = obj.TypeLoadStartID; id.ThreadID = obj.ThreadID; _incompleteTypeLoadEvents[id] = incompleteDesc; }
private void Clr_R2RGetEntryPointStart(R2RGetEntryPointStartTraceData obj) { IncompleteActionDesc incompleteDesc = new IncompleteActionDesc(); incompleteDesc.Start = new EventUID(obj); incompleteDesc.Name = ""; incompleteDesc.OperationType = "R2R"; IdOfIncompleteAction id = new IdOfIncompleteAction(); id.Identifier = obj.MethodID; id.ThreadID = obj.ThreadID; _incompleteR2REvents[id] = incompleteDesc; }
private void Clr_MethodJittingStarted(MethodJittingStartedTraceData obj) { IncompleteActionDesc incompleteDesc = new IncompleteActionDesc(); incompleteDesc.Start = new EventUID(obj); incompleteDesc.Name = JITStats.GetMethodName(obj); incompleteDesc.OperationType = "JIT"; IdOfIncompleteAction id = new IdOfIncompleteAction(); id.Identifier = obj.MethodID; id.ThreadID = obj.ThreadID; _incompleteJitEvents[id] = incompleteDesc; }
private void Clr_TypeLoadStop(TypeLoadStopTraceData obj) { IdOfIncompleteAction id = new IdOfIncompleteAction(); id.Identifier = obj.TypeLoadStartID; id.ThreadID = obj.ThreadID; // If we had a TypeLoad start lookup event, capture that start time, otherwise, use the TypeLoadStop // data as both start and stop EventUID startUID = new EventUID(obj); if (_incompleteTypeLoadEvents.TryGetValue(id, out IncompleteActionDesc typeLoadStartData)) { startUID = typeLoadStartData.Start; _incompleteTypeLoadEvents.Remove(id); } AddStartStopData(obj.ProcessID, id.ThreadID, startUID, new EventUID(obj), $"TypeLoad ({obj.TypeName}, {obj.LoadLevel})"); }