예제 #1
0
        public static void Stop(bool outputData = true)
        {
#if GAIA_DEBUG
            if (!m_stopwatch.IsRunning || !m_isEnabled)
            {
                return;
            }

            //end any running events
            foreach (GaiaStopWatchEvent stopWatchEvent in m_events.FindAll(x => x.m_started == true))
            {
                EndEvent(stopWatchEvent.m_name);
            }
            m_currentEvent   = null;
            m_lastLogElapsed = 0;
            m_stopwatch.Stop();
            m_isEnabled = false;
            LogWithTime("Stopping the Gaia Stopwatch Log.");
            if (outputData)
            {
                GameObject parentGO            = GaiaUtils.GetStopwatchDataObject();
                GameObject stopWatchDataObject = new GameObject(string.Format("Gaia Stopwatch Run {0:yyyy-MM-dd--HH-mm-ss}", DateTime.Now));
                stopWatchDataObject.transform.parent = parentGO.transform;
                GaiaStopwatchDataset newDataset = stopWatchDataObject.AddComponent <GaiaStopwatchDataset>();
                newDataset.m_events = m_events;
            }
#endif
        }
예제 #2
0
        private void DrawStopwatchEvent(GaiaStopWatchEvent stopWatchEvent)
        {
            int id = m_gaiastopwatchDataset.m_events.FindIndex(x => x == stopWatchEvent);

            m_unfoldedStates[id] = m_editorUtils.Foldout(m_unfoldedStates[id], new GUIContent(stopWatchEvent.m_name));
            if (m_unfoldedStates[id])
            {
                EditorGUI.indentLevel++;
                m_editorUtils.LabelField("FirstStart", new GUIContent(stopWatchEvent.m_firstStartTimeStamp.ToString()));
                m_editorUtils.LabelField("TotalDuration", new GUIContent(stopWatchEvent.m_accumulatedTime.ToString()));
                m_editorUtils.LabelField("Calls", new GUIContent(stopWatchEvent.m_callCount.ToString()));
                m_editorUtils.LabelField("DurationPerCall", new GUIContent(stopWatchEvent.m_durationPerCall.ToString()));


                List <GaiaStopWatchEvent> relevantEvents;

                if (m_orderbyDescending)
                {
                    relevantEvents = m_gaiastopwatchDataset.m_events.FindAll(x => x.m_parent == stopWatchEvent.m_name).OrderByDescending(m_orderByLambda).ToList();
                }
                else
                {
                    relevantEvents = m_gaiastopwatchDataset.m_events.FindAll(x => x.m_parent == stopWatchEvent.m_name).OrderBy(m_orderByLambda).ToList();
                }

                foreach (GaiaStopWatchEvent subEvent in relevantEvents)
                {
                    DrawStopwatchEvent(subEvent);
                }
                EditorGUI.indentLevel--;
            }
        }
예제 #3
0
        public static void StartEvent(string name)
        {
#if GAIA_DEBUG
            //Stopwatch not running yet? If enabled, we begin a new log now.
            if (!m_stopwatch.IsRunning)
            {
                if (m_isEnabled)
                {
                    Start();
                }
                else
                {
                    return;
                }
            }

            GaiaStopWatchEvent stopWatchEvent = m_events.Find(x => x.m_name == name);

            if (stopWatchEvent != null)
            {
                if (!stopWatchEvent.m_started)
                {
                    stopWatchEvent.m_lastStartTimeStamp = m_stopwatch.ElapsedMilliseconds;
                    stopWatchEvent.m_started            = true;
                }
                else
                {
                    UnityEngine.Debug.LogWarning("Trying to start an event '" + name + "' with the Gaia Stopwatch that has already been started before!");
                }
            }
            else
            {
                //Event does not exist yet, let's create it
                stopWatchEvent = new GaiaStopWatchEvent()
                {
                    m_firstStartTimeStamp = m_stopwatch.ElapsedMilliseconds,
                    m_lastStartTimeStamp  = m_stopwatch.ElapsedMilliseconds,
                    m_name    = name,
                    m_started = true,
                };

                m_events.Add(stopWatchEvent);
            }
            LogWithTime("Start of Event: " + name + " (" + stopWatchEvent.m_callCount + ")");
            //assign parent if current Event not is null, otherwise this will become the first current event
            if (m_currentEvent != null)
            {
                stopWatchEvent.m_parent = m_currentEvent.m_name;
            }
            m_currentEvent = stopWatchEvent;
#endif
        }
예제 #4
0
        public static void EndEvent(string name, bool warning = true)
        {
#if GAIA_DEBUG
            if (!m_stopwatch.IsRunning)
            {
                return;
            }

            GaiaStopWatchEvent stopWatchEvent = m_events.Find(x => x.m_name == name && x.m_started == true);

            if (stopWatchEvent != null)
            {
                stopWatchEvent.m_lastStopTimeStamp = m_stopwatch.ElapsedMilliseconds;
                stopWatchEvent.m_started           = false;
                stopWatchEvent.m_callCount++;
                stopWatchEvent.m_accumulatedTime += stopWatchEvent.m_lastStopTimeStamp - stopWatchEvent.m_lastStartTimeStamp;
                stopWatchEvent.m_durationPerCall  = stopWatchEvent.m_accumulatedTime / stopWatchEvent.m_callCount;
            }
            else
            {
                if (warning)
                {
                    UnityEngine.Debug.LogWarning("Trying to stop an event '" + name + "' with the Gaia Stopwatch, but that event does not exist or is not running!");
                }
                return;
            }

            //End all child events that are still running
            var runningChildEvents = m_events.FindAll(x => x.m_parent == stopWatchEvent.m_name && x.m_started == true);
            if (runningChildEvents != null)
            {
                foreach (GaiaStopWatchEvent runningChildEvent in m_events.FindAll(x => x.m_parent == stopWatchEvent.m_name && x.m_started == true))
                {
                    EndEvent(runningChildEvent.m_name);
                }
            }

            //Return current event to parent, if any
            if (stopWatchEvent.m_parent != null)
            {
                m_currentEvent = m_events.Find(x => x.m_name == stopWatchEvent.m_parent);
            }
            LogWithTime("End of Event: " + name + " (" + stopWatchEvent.m_callCount + "), Total time accumulated for this Event: " + String.Format("{0:N0}", stopWatchEvent.m_accumulatedTime));
#endif
        }