public Tracer() { fTraceResult = new TraceResult(); ThreadResult threadResult = new ThreadResult(System.Threading.Thread.CurrentThread.ManagedThreadId, 0); fTraceResult.Threads.Add(threadResult); }
private MethodResult CreateTraceResult(ThreadResult threadResult) { string methodName = GetMethodName(); string className = GetClassName(); MethodResult methodResult = new MethodResult(className, methodName, GetUnixTimeInMilliseconds()); List <string> stackMethods = GetStackTraceOfMethodNames(3); bool isFirst = true; MethodResult traceIter = methodResult; foreach (string methodNameTemp in stackMethods) { if (isFirst) { isFirst = false; bool isExist = false; foreach (MethodResult traceTemp in threadResult.DependenceMethods) { if (traceTemp.MethodName == methodNameTemp) { traceIter = traceTemp; isExist = true; break; } } if (!isExist) { threadResult.DependenceMethods.Add(methodResult); break; } } else { bool isExist = false; foreach (MethodResult traceTemp in traceIter.DependenceMethods) { if (traceTemp.MethodName == methodNameTemp) { traceIter = traceTemp; isExist = true; break; } } if (!isExist) { traceIter.DependenceMethods.Add(methodResult); break; } } } return(methodResult); }
private ThreadResult GetOrCreateThreadResult() { int threadId = System.Threading.Thread.CurrentThread.ManagedThreadId; foreach (ThreadResult thResult in fTraceResult.Threads) { if (thResult.Id == threadId) { return(thResult); } } ThreadResult threadResult = new ThreadResult(threadId, 0); fTraceResult.Threads.Add(threadResult); return(threadResult); }
public void StopTrace() { ThreadResult threadResult = GetOrCreateThreadResult(); string methodName = GetMethodName(); List <string> stackMethods = GetStackTraceOfMethodNames(2); bool isFirst = true; MethodResult traceIter = new MethodResult("", "", 0); foreach (string methodNameTemp in stackMethods) { if (isFirst) { isFirst = false; foreach (MethodResult traceTemp in threadResult.DependenceMethods) { if (traceTemp.MethodName == methodNameTemp) { traceIter = traceTemp; break; } } } else { foreach (MethodResult traceTemp in traceIter.DependenceMethods) { if (traceTemp.MethodName == methodNameTemp) { traceIter = traceTemp; break; } } } } traceIter.Time = GetUnixTimeInMilliseconds() - traceIter.Time; }