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 }
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--; } }
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 }
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 }