public ulong StartSpan(long methodID) { ulong idx = _nextIdx++; MSpan *s = _mSpan + idx; s->methodID = methodID; s->startMS = _sw.ElapsedMilliseconds; return(idx); }
static void OnAppExit(object sender, EventArgs e) { Console.WriteLine("MStats.OnAppExit"); foreach (MThread t in _mThread) { for (int i = 0; i < (int)t._nextIdx; i++) { MSpan *s = t._mSpan + i; Console.WriteLine("t: {0}, mID: {1}, start: {2}, end: {3}", i, s->methodID, s->startMS, s->endMS); } } }
public static void Setup() { if (_ready) { return; } Console.WriteLine("MStats.Setup"); _ready = true; _mSpanHeapHandle = Marshal.AllocHGlobal((IntPtr)MAX_HEAP_SIZE); _mSpanHeap = (MSpan *)_mSpanHeapHandle.ToPointer(); _mThreadIdx = 0; _threadID = new ThreadLocal <int>(); _mThreadMap = new ConcurrentDictionary <int, int>(); for (int i = 0; i < _mThread.Length; i++) { _mThread[i] = new MThread(_mSpanHeap + (MAX_THREAD_HEAP_SIZE * i)); } AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnAppExit); }
public void EndSpan(ulong mSpanID) { MSpan *s = _mSpan + mSpanID; s->endMS = _sw.ElapsedMilliseconds; }
public MThread(MSpan *mSpan) { _nextIdx = 0; _mSpan = mSpan; _sw = Stopwatch.StartNew(); }