Colobot
profiler.h
1 /*
2  * This file is part of the Colobot: Gold Edition source code
3  * Copyright (C) 2001-2016, Daniel Roux, EPSITEC SA & TerranovaTeam
4  * http://epsitec.ch; http://colobot.info; http://github.com/colobot
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (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.
14  * See the 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, see http://gnu.org/licenses
18  */
19 
20 #pragma once
21 
22 class CSystemUtils;
23 struct SystemTimeStamp;
24 
25 #include <stack>
26 
31 enum PerformanceCounter
32 {
33  PCNT_EVENT_PROCESSING,
34 
35  PCNT_UPDATE_ALL,
36  PCNT_UPDATE_ENGINE,
37  PCNT_UPDATE_PARTICLE,
38  PCNT_UPDATE_GAME,
39  PCNT_UPDATE_CBOT,
40 
41  PCNT_RENDER_ALL,
42  PCNT_RENDER_PARTICLE_WORLD,
43  PCNT_RENDER_PARTICLE_IFACE,
44  PCNT_RENDER_WATER,
45  PCNT_RENDER_TERRAIN,
46  PCNT_RENDER_OBJECTS,
47  PCNT_RENDER_INTERFACE,
48  PCNT_RENDER_SHADOW_MAP,
49 
50  PCNT_SWAP_BUFFERS,
51 
52  PCNT_ALL,
53 
54  PCNT_MAX
55 };
56 
57 class CProfiler
58 {
59 public:
60  static void SetSystemUtils(CSystemUtils* systemUtils);
61 
62  static void StartPerformanceCounter(PerformanceCounter counter);
63  static void StopPerformanceCounter(PerformanceCounter counter);
64  static long long GetPerformanceCounterTime(PerformanceCounter counter);
65  static float GetPerformanceCounterFraction(PerformanceCounter counter);
66 
67 private:
68  static void ResetPerformanceCounters();
69  static void SavePerformanceCounters();
70 
71 private:
72  static CSystemUtils* m_systemUtils;
73 
74  static long long m_performanceCounters[PCNT_MAX];
75  static long long m_prevPerformanceCounters[PCNT_MAX];
76  static std::stack<SystemTimeStamp*> m_runningPerformanceCounters;
77  static std::stack<PerformanceCounter> m_runningPerformanceCountersType;
78 };
79 
80 
Definition: profiler.h:57
Platform-specific utils.
Definition: system.h:91
Definition: system_linux.h:31