public void StopTrace() { long endTime = GetTimeInMs(); int threadId = Thread.CurrentThread.ManagedThreadId; TracingThreadInfo tracingThreadInfo = TryGetTracingThreadInfo(threadId); MethodBase parentMethod = GetParentMethod(); TrySaveTraceResults(tracingThreadInfo, parentMethod, endTime); }
public void StartTrace() { int threadId = Thread.CurrentThread.ManagedThreadId; TracingThreadInfo tracingThreadInfo = GetOrCreateTracingTreadInfo(threadId); MethodBase parentMethod = GetParentMethod(); long startTime = GetTimeInMs(); AddStartTraceData(tracingThreadInfo, parentMethod, startTime); }
private TracingThreadInfo GetOrCreateTracingTreadInfo(int threadId) { if (threadsMap.ContainsKey(threadId)) { return(threadsMap[threadId]); } ThreadTraceResult threadTraceResult = new ThreadTraceResult(threadId); TracingThreadInfo tracingThreadInfo = new TracingThreadInfo(threadTraceResult); return(threadsMap[threadId] = tracingThreadInfo); }
private void AddStartTraceData(TracingThreadInfo tracingThreadInfo, MethodBase parentMethod, long startTime) { MethodTraceResult methodTraceResult = new MethodTraceResult(parentMethod.Name, parentMethod.ReflectedType.Name); TracingMethodInfo tracingMethodInfo = new TracingMethodInfo(startTime, parentMethod, methodTraceResult); if (tracingThreadInfo.TracingStack.Count != 0) { TracingMethodInfo parentTracingMethodInfo = tracingThreadInfo.TracingStack.Peek(); if (parentTracingMethodInfo.MethodTraceResult.Methods == null) { parentTracingMethodInfo.MethodTraceResult.Methods = new List <MethodTraceResult>(); } parentTracingMethodInfo.MethodTraceResult.Methods.Add(methodTraceResult); } tracingThreadInfo.TracingStack.Push(tracingMethodInfo); }
private void TrySaveTraceResults(TracingThreadInfo tracingThreadInfo, MethodBase parentMethod, long endTime) { if ((tracingThreadInfo.TracingStack.Count == 0) || (tracingThreadInfo.TracingStack.Peek().MethodBase != parentMethod)) { throw new OrderViolationException(); } TracingMethodInfo tracingMethodInfo = tracingThreadInfo.TracingStack.Pop(); tracingMethodInfo.MethodTraceResult.Time = (int)(endTime - tracingMethodInfo.StartTime); if (tracingThreadInfo.TracingStack.Count == 0) { tracingThreadInfo.ThreadTraceResult.Methods.Add(tracingMethodInfo.MethodTraceResult); tracingThreadInfo.IsEmptyThread = false; isThreadResultCreated = false; } }