Ejemplo n.º 1
0
        public MethodStats TraceLeave(IMethodEvent clrEvent)
        {
            var stack = _stackLevels[clrEvent.Thread];
            var lastEnter = stack.Pop();
            var handledException = false;
            while (lastEnter.Id != clrEvent.CallId)
            {
                handledException = true;
                lastEnter = stack.Pop();
            }
            var elapsedInclusive = clrEvent.Ticks - lastEnter.TicksTime;
            var result = new MethodStats
            {
                StackLevel = stack.Count, ElapsedInclusive = elapsedInclusive, HandledException = handledException
            };
            if (!result.HandledException)
            {
                result.ElapsedExclusive = elapsedInclusive - lastEnter.NestedElapsed;
            }

            if (result.StackLevel > 0)
            {
                var parentToken = stack.Pop();
                stack.Push(new CallToken { Id = parentToken.Id, TicksTime = parentToken.TicksTime, NestedElapsed = (parentToken.NestedElapsed + elapsedInclusive) });
            }

            return result;
        }
Ejemplo n.º 2
0
 public void TraceEnter(IMethodEvent methodEnter)
 {
     if (!_stackLevels.ContainsKey(methodEnter.Thread))
     {
         _stackLevels[methodEnter.Thread] = new Stack<CallToken>();
     }
     _stackLevels[methodEnter.Thread].Push(new CallToken() { TicksTime = methodEnter.Ticks, Id = methodEnter.CallId });
 }