public static void DoTimed <T>(this IEnumerable <T> e, Action <T> a, string text) { // PERF: This is a hot path and must run with minimal added overhead. // Calling Stopwatch.GetTimestamp is a bit expensive, so we enumerate manually to allow us to call it only // once per iteration in the normal case. // See also: RunActivity var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks; using (var enumerator = e.GetEnumerator()) { var start = Stopwatch.GetTimestamp(); while (enumerator.MoveNext()) { a(enumerator.Current); var current = Stopwatch.GetTimestamp(); if (current - start > longTickThresholdInStopwatchTicks) { PerfTimer.LogLongTick(start, current, text, enumerator.Current); start = Stopwatch.GetTimestamp(); } else { start = current; } } } }
public static Activity RunActivity(Actor self, Activity act) { // Note - manual iteration here for performance due to high call volume. var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks; var start = Stopwatch.GetTimestamp(); while (act != null) { var prev = act; act = act.Tick(self); var current = Stopwatch.GetTimestamp(); if (current - start > longTickThresholdInStopwatchTicks) { PerfTimer.LogLongTick(start, current, "Activity", prev); start = Stopwatch.GetTimestamp(); } else { start = current; } if (prev == act) { break; } } return(act); }
public static Activity RunActivity(Actor self, Activity act) { // PERF: If there are no activities we can bail straight away and save ourselves a call to // Stopwatch.GetTimestamp. if (act == null) { return(act); } // PERF: This is a hot path and must run with minimal added overhead. // Calling Stopwatch.GetTimestamp is a bit expensive, so we enumerate manually to allow us to call it only // once per iteration in the normal case. // See also: DoTimed var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks; var start = Stopwatch.GetTimestamp(); while (act != null) { var prev = act; act = act.TickOuter(self); var current = Stopwatch.GetTimestamp(); if (current - start > longTickThresholdInStopwatchTicks) { PerfTimer.LogLongTick(start, current, "Activity", prev); start = Stopwatch.GetTimestamp(); } else { start = current; } if (act == prev) { break; } } return(act); }
public void ApplyToAllTimed(Action <Actor, T> action, string text) { var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks; var start = Stopwatch.GetTimestamp(); for (var i = 0; i < actors.Count; i++) { var actor = actors[i]; var trait = traits[i]; action(actor, trait); var current = Stopwatch.GetTimestamp(); if (current - start > longTickThresholdInStopwatchTicks) { PerfTimer.LogLongTick(start, current, text, trait); start = Stopwatch.GetTimestamp(); } else { start = current; } } }
public static void DoTimed <T>(this IEnumerable <T> e, Action <T> a, string text) { var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks; using (var enumerator = e.GetEnumerator()) { var start = Stopwatch.GetTimestamp(); while (enumerator.MoveNext()) { a(enumerator.Current); var current = Stopwatch.GetTimestamp(); if (current - start > longTickThresholdInStopwatchTicks) { PerfTimer.LogLongTick(start, current, text, enumerator.Current); start = Stopwatch.GetTimestamp(); } else { start = current; } } } }