コード例 #1
0
        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) + ")");
            }
        }
コード例 #2
0
        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 + ")");
            }
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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})");
        }