synched with trunk at revision 32129
[blender.git] / source / gameengine / Ketsji / KX_TimeLogger.h
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 #ifndef __KX_TIME_LOGGER_H
31 #define __KX_TIME_LOGGER_H
32
33 #if defined(WIN32) && !defined(FREE_WINDOWS)
34 #pragma warning (disable:4786) // suppress stl-MSVC debug info warning
35 #endif
36
37 #include <deque>
38
39 #ifdef WITH_CXX_GUARDEDALLOC
40 #include "MEM_guardedalloc.h"
41 #endif
42
43 /**
44  * Stores and manages time measurements.
45  */
46 class KX_TimeLogger {
47 public:
48         /**
49          * Constructor.
50          * @param maxNumMesasurements Maximum number of measurements stored (>1).
51          */
52         KX_TimeLogger(unsigned int maxNumMeasurements = 10);
53
54         /**
55          * Destructor.
56          */
57         virtual ~KX_TimeLogger(void);
58
59         /**
60          * Changes the maximum number of measurements that can be stored.
61          */
62         virtual void SetMaxNumMeasurements(unsigned int maxNumMeasurements);
63
64         /**
65          * Changes the maximum number of measurements that can be stored.
66          */
67         virtual unsigned int GetMaxNumMeasurements(void) const;
68
69         /**
70          * Starts logging in current measurement.
71          * @param now   The current time.
72          */
73         virtual void StartLog(double now);
74
75         /**
76          * End logging in current measurement.
77          * @param now   The current time.
78          */
79         virtual void EndLog(double now);
80
81         /**
82          * Logs time in next measurement.
83          * @param now   The current time.
84          */
85         virtual void NextMeasurement(double now);
86
87         /**
88          * Returns average of all but the current measurement.
89          * @return The average of all but the current measurement.
90          */
91         virtual double GetAverage(void) const;
92
93 protected:
94         /** Storage for the measurements. */
95         std::deque<double> m_measurements;
96
97         /** Maximum number of measurements. */
98         unsigned int m_maxNumMeasurements;
99
100         /** Time at start of logging. */
101         double m_logStart;
102
103         /** State of logging. */
104         bool m_logging;
105
106
107 #ifdef WITH_CXX_GUARDEDALLOC
108 public:
109         void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:KX_TimeLogger"); }
110         void operator delete( void *mem ) { MEM_freeN(mem); }
111 #endif
112 };
113
114 #endif // __KX_TIME_LOGGER_H
115