svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r22205:22290
[blender.git] / source / gameengine / Ketsji / KX_TimeCategoryLogger.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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 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 #include "KX_TimeCategoryLogger.h"
31
32 #ifdef HAVE_CONFIG_H
33 #include <config.h>
34 #endif
35
36 KX_TimeCategoryLogger::KX_TimeCategoryLogger(unsigned int maxNumMeasurements)
37 : m_maxNumMeasurements(maxNumMeasurements)
38 {
39 }
40
41
42 KX_TimeCategoryLogger::~KX_TimeCategoryLogger(void)
43 {
44         DisposeLoggers();
45 }
46
47
48 void KX_TimeCategoryLogger::SetMaxNumMeasurements(unsigned int maxNumMeasurements)
49 {
50         KX_TimeLoggerMap::iterator it;
51         for (it = m_loggers.begin(); it != m_loggers.end(); it++) {
52                 it->second->SetMaxNumMeasurements(maxNumMeasurements);
53         }
54         m_maxNumMeasurements = maxNumMeasurements;
55 }
56
57
58 unsigned int KX_TimeCategoryLogger::GetMaxNumMeasurements(void) const
59 {
60         return m_maxNumMeasurements;
61 }
62
63
64 void KX_TimeCategoryLogger::AddCategory(TimeCategory tc)
65 {
66         // Only add if not already present
67         if (m_loggers.find(tc) == m_loggers.end()) {
68                 KX_TimeLogger* logger = new KX_TimeLogger(m_maxNumMeasurements);
69                 //assert(logger);
70                 m_loggers.insert(KX_TimeLoggerMap::value_type(tc, logger));
71         }
72 }
73
74
75 void KX_TimeCategoryLogger::StartLog(TimeCategory tc, double now, bool endOtherCategories)
76 {
77         if (endOtherCategories) {
78                 KX_TimeLoggerMap::iterator it;
79                 for (it = m_loggers.begin(); it != m_loggers.end(); it++) {
80                         if (it->first != tc) {
81                                 it->second->EndLog(now);
82                         }
83                 }
84         }
85         //assert(m_loggers[tc] != m_loggers.end());
86         m_loggers[tc]->StartLog(now);
87 }
88
89
90 void KX_TimeCategoryLogger::EndLog(TimeCategory tc, double now)
91 {
92         //assert(m_loggers[tc] != m_loggers.end());
93         m_loggers[tc]->EndLog(now);
94 }
95
96
97 void KX_TimeCategoryLogger::EndLog(double now)
98 {
99         KX_TimeLoggerMap::iterator it;
100         for (it = m_loggers.begin(); it != m_loggers.end(); it++) {
101                 it->second->EndLog(now);
102         }
103 }
104
105
106 void KX_TimeCategoryLogger::NextMeasurement(double now)
107 {
108         KX_TimeLoggerMap::iterator it;
109         for (it = m_loggers.begin(); it != m_loggers.end(); it++) {
110                 it->second->NextMeasurement(now);
111         }
112 }
113
114
115 double KX_TimeCategoryLogger::GetAverage(TimeCategory tc)
116 {
117         //assert(m_loggers[tc] != m_loggers.end());
118         return m_loggers[tc]->GetAverage();
119 }
120
121
122 double KX_TimeCategoryLogger::GetAverage(void)
123 {
124         double time = 0.;
125
126         KX_TimeLoggerMap::iterator it;
127         for (it = m_loggers.begin(); it != m_loggers.end(); it++) {
128                 time += it->second->GetAverage();
129         }
130
131         return time;
132 }
133
134
135 void KX_TimeCategoryLogger::DisposeLoggers(void)
136 {
137         KX_TimeLoggerMap::iterator it;
138         for (it = m_loggers.begin(); it != m_loggers.end(); it++) {
139                 delete it->second;
140         }
141 }
142