Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        public static Activity RunActivity(Actor self, Activity act)
        {
            while (act != null)
            {
                var prev = act;

                var sw = new Stopwatch();
                act = act.Tick(self);
                var dt = sw.ElapsedTime();
                if (dt > Game.Settings.Debug.LongTickThreshold)
                {
                    Log.Write("perf", "[{2}] Activity: {0} ({1:0.000} ms)", prev, dt * 1000, Game.LocalTick);
                }

                if (prev == act)
                {
                    break;
                }
            }
            return(act);
        }
Esempio n. 3
0
        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.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);
        }