Initial revision
[blender.git] / source / gameengine / Ketsji / KX_TimeCategoryLogger.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL 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. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32
33 #ifndef __KX_TIME_CATEGORY_LOGGER_H
34 #define __KX_TIME_CATEGORY_LOGGER_H
35
36 #ifdef WIN32
37 #pragma warning (disable:4786) // suppress stl-MSVC debug info warning
38 #endif
39
40 #include <map>
41
42 #include "KX_TimeLogger.h"
43
44 /**
45  * Stores and manages time measurements by category.
46  * Categories can be added dynamically.
47  * Average measurements can be established for each separate category
48  * or for all categories together.
49  */
50 class KX_TimeCategoryLogger {
51 public:
52         typedef int TimeCategory;
53
54         /**
55          * Constructor.
56          * @param maxNumMesasurements Maximum number of measurements stored (> 1).
57          */
58         KX_TimeCategoryLogger(unsigned int maxNumMeasurements = 10);
59
60         /**
61          * Destructor.
62          */
63         virtual ~KX_TimeCategoryLogger(void);
64
65         /**
66          * Changes the maximum number of measurements that can be stored.
67          */
68         virtual void SetMaxNumMeasurements(unsigned int maxNumMeasurements);
69
70         /**
71          * Changes the maximum number of measurements that can be stored.
72          */
73         virtual unsigned int GetMaxNumMeasurements(void) const;
74
75         /**
76          * Adds a category.
77          * @param category      The new category.
78          */
79         virtual void AddCategory(TimeCategory tc);
80
81         /**
82          * Starts logging in current measurement for the given category.
83          * @param tc                                    The category to log to.
84          * @param now                                   The current time.
85          * @param endOtherCategories    Whether to stop logging to other categories.
86          */
87         virtual void StartLog(TimeCategory tc, double now, bool endOtherCategories = true);
88
89         /**
90          * End logging in current measurement for the given category.
91          * @param tc    The category to log to.
92          * @param now   The current time.
93          */
94         virtual void EndLog(TimeCategory tc, double now);
95
96         /**
97          * End logging in current measurement for all categories.
98          * @param now   The current time.
99          */
100         virtual void EndLog(double now);
101
102         /**
103          * Logs time in next measurement.
104          * @param now   The current time.
105          */
106         virtual void NextMeasurement(double now);
107
108         /**
109          * Returns average of all but the current measurement time.
110          * @return The average of all but the current measurement.
111          */
112         virtual double GetAverage(TimeCategory tc);
113
114         /**
115          * Returns average for grand total.
116          */
117         virtual double GetAverage(void);
118
119 protected:
120         /**  
121          * Disposes loggers.
122          */  
123         virtual void DisposeLoggers(void);
124
125         /** Storage for the loggers. */
126         typedef std::map<TimeCategory, KX_TimeLogger*> KX_TimeLoggerMap;
127         KX_TimeLoggerMap m_loggers;
128         /** Maximum number of measurements. */
129         unsigned int m_maxNumMeasurements;
130
131 };
132
133 #endif // __KX_TIME_CATEGORY_LOGGER_H