Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/Ketsji/KX_TimeLogger.cpp')
-rw-r--r--source/gameengine/Ketsji/KX_TimeLogger.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/source/gameengine/Ketsji/KX_TimeLogger.cpp b/source/gameengine/Ketsji/KX_TimeLogger.cpp
new file mode 100644
index 00000000000..e2114e8d8d7
--- /dev/null
+++ b/source/gameengine/Ketsji/KX_TimeLogger.cpp
@@ -0,0 +1,117 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ */
+
+#include "KX_TimeLogger.h"
+
+
+
+KX_TimeLogger::KX_TimeLogger(unsigned int maxNumMeasurements)
+: m_maxNumMeasurements(maxNumMeasurements), m_logging(false), m_logStart(0)
+{
+}
+
+
+KX_TimeLogger::~KX_TimeLogger(void)
+{
+}
+
+
+void KX_TimeLogger::SetMaxNumMeasurements(unsigned int maxNumMeasurements)
+{
+ if ((m_maxNumMeasurements != maxNumMeasurements) && maxNumMeasurements) {
+ // Actual removing is done in NextMeasurement()
+ m_maxNumMeasurements = maxNumMeasurements;
+ }
+}
+
+
+unsigned int KX_TimeLogger::GetMaxNumMeasurements(void) const
+{
+ return m_maxNumMeasurements;
+}
+
+
+void KX_TimeLogger::StartLog(double now)
+{
+ if (!m_logging) {
+ m_logging = true;
+ m_logStart = now;
+ }
+}
+
+
+void KX_TimeLogger::EndLog(double now)
+{
+ if (m_logging) {
+ m_logging = false;
+ double time = now - m_logStart;
+ if (m_measurements.size() > 0) {
+ m_measurements[0] += time;
+ }
+ }
+}
+
+
+void KX_TimeLogger::NextMeasurement(double now)
+{
+ // End logging to current measurement
+ EndLog(now);
+
+ // Add a new measurement at the front
+ double m = 0.;
+ m_measurements.push_front(m);
+
+ // Remove measurement if we grow beyond the maximum size
+ if ((m_measurements.size()) > m_maxNumMeasurements) {
+ while (m_measurements.size() > m_maxNumMeasurements) {
+ m_measurements.pop_back();
+ }
+ }
+}
+
+
+
+double KX_TimeLogger::GetAverage(void) const
+{
+ double avg = 0.;
+
+ unsigned int numMeasurements = m_measurements.size();
+ if (numMeasurements > 1) {
+ for (int i = 1; i < numMeasurements; i++) {
+ avg += m_measurements[i];
+ }
+ avg /= (float)numMeasurements - 1;
+ }
+
+ return avg;
+}
+