add missing files after merging
[blender.git] / source / gameengine / Ketsji / KX_TimeLogger.cpp
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 /** \file gameengine/Ketsji/KX_TimeLogger.cpp
31  *  \ingroup ketsji
32  */
33
34
35 #include "KX_TimeLogger.h"
36
37 KX_TimeLogger::KX_TimeLogger(unsigned int maxNumMeasurements) : 
38         m_maxNumMeasurements(maxNumMeasurements), 
39         m_logStart(0),
40         m_logging(false)
41 {
42 }
43
44
45 KX_TimeLogger::~KX_TimeLogger(void)
46 {
47 }
48
49
50 void KX_TimeLogger::SetMaxNumMeasurements(unsigned int maxNumMeasurements)
51 {
52         if ((m_maxNumMeasurements != maxNumMeasurements) && maxNumMeasurements) {
53                 // Actual removing is done in NextMeasurement()
54                 m_maxNumMeasurements = maxNumMeasurements;
55         }
56 }
57
58
59 unsigned int KX_TimeLogger::GetMaxNumMeasurements(void) const
60 {
61         return m_maxNumMeasurements;
62 }
63
64
65 void KX_TimeLogger::StartLog(double now)
66 {
67         if (!m_logging) {
68                 m_logging = true;
69                 m_logStart = now;
70         }
71 }
72
73
74 void KX_TimeLogger::EndLog(double now)
75 {
76         if (m_logging) {
77                 m_logging = false;
78                 double time = now - m_logStart;
79                 if (m_measurements.size() > 0) {
80                         m_measurements[0] += time;
81                 }
82         }
83 }
84
85
86 void KX_TimeLogger::NextMeasurement(double now)
87 {
88         // End logging to current measurement
89         EndLog(now);
90
91         // Add a new measurement at the front
92         double m = 0.;
93         m_measurements.push_front(m);
94
95         // Remove measurement if we grow beyond the maximum size
96         if ((m_measurements.size()) > m_maxNumMeasurements) {
97                 while (m_measurements.size() > m_maxNumMeasurements) {
98                         m_measurements.pop_back();
99                 }
100         }
101 }
102
103
104
105 double KX_TimeLogger::GetAverage(void) const
106 {
107         double avg = 0.;
108
109         unsigned int numMeasurements = m_measurements.size();
110         if (numMeasurements > 1) {
111                 for (unsigned int i = 1; i < numMeasurements; i++) {
112                         avg += m_measurements[i];
113                 }
114                 avg /= (float)numMeasurements - 1;
115         }
116
117         return avg;
118 }
119