public static bool MonitorUpdateDuration <T>(ISveltoTask <T> sveltoTask, string runnerName) where T : IEnumerator { var taskName = sveltoTask.ToString(); #if ENABLE_PIX_EVENTS PixWrapper.PIXBeginEventEx(0x11000000, key); #endif _stopwatch.Value.Start(); var result = sveltoTask.MoveNext(); _stopwatch.Value.Stop(); #if ENABLE_PIX_EVENTS PixWrapper.PIXEndEventEx(); #endif lock (LockObject) { ref var infosPerRunnner = ref taskInfos.GetOrCreate(runnerName, () => new FasterDictionary <string, TaskInfo>()); if (infosPerRunnner.TryGetValue(taskName, out var info) == false) { info = new TaskInfo(taskName, runnerName); infosPerRunnner.Add(taskName, info); } else { info.AddUpdateDuration((float)_stopwatch.Value.Elapsed.TotalMilliseconds); infosPerRunnner[taskName] = info; } }
public static bool MonitorUpdateDuration <T>(ISveltoTask <T> sveltoTask, string runnerName) where T : IEnumerator { var key = sveltoTask.ToString().FastConcat(runnerName); #if ENABLE_PIX_EVENTS PixWrapper.PIXBeginEventEx(0x11000000, key); #endif _stopwatch.Start(); var result = sveltoTask.MoveNext(); _stopwatch.Stop(); #if ENABLE_PIX_EVENTS PixWrapper.PIXEndEventEx(); #endif lock (LOCK_OBJECT) { TaskInfo info; if (taskInfos.TryGetValue(key, out info) == false) { info = new TaskInfo(sveltoTask.ToString()); info.AddThreadInfo(runnerName.FastConcat(": ")); taskInfos.Add(key, ref info); } else { info.AddUpdateDuration(_stopwatch.Elapsed.TotalMilliseconds); taskInfos.Update(key, ref info); } } _stopwatch.Reset(); return(result); }