587113b6a2837976cbdd75e3a7b2a1c401239747
[occt.git] / src / OSD / OSD_PerfMeter.h
1 /*
2  Copyright (c) 1999-2012 OPEN CASCADE SAS
3
4  The content of this file is subject to the Open CASCADE Technology Public
5  License Version 6.5 (the "License"). You may not use the content of this file
6  except in compliance with the License. Please obtain a copy of the License
7  at http://www.opencascade.org and read it completely before using this file.
8
9  The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
10  main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11
12  The Original Code and all software distributed under the License is
13  distributed on an "AS IS" basis, without warranty of any kind, and the
14  Initial Developer hereby disclaims all such warranties, including without
15  limitation, any warranties of merchantability, fitness for a particular
16  purpose or non-infringement. Please see the License for the specific terms
17  and conditions governing the rights and limitations under the License.
18
19 */
20
21 #ifndef _OSD_PERFMETER_H
22 #define _OSD_PERFMETER_H
23
24 /*
25   Macros for convenient and fast usage of meters.
26   Define PERF_ENABLE_METERS to make them available.
27 */
28
29 #ifdef PERF_ENABLE_METERS
30
31 /* PERF_START_METER
32    Forces meter MeterName to begin to count by remembering
33    the current data of timer.
34    Creates new meter if there is no such meter
35 */
36 #define PERF_START_METER(_m_name) {                  \
37   static int __iMeter = -1;                          \
38   if  (__iMeter >= 0)  perf_start_imeter (__iMeter); \
39   else      __iMeter = perf_start_meter (_m_name);   \
40 }
41
42 /* PERF_STOP_METER
43    Forces meter MeterName to stop and cumulate the time elapsed
44    since the start
45 */
46 #define PERF_STOP_METER(_m_name) {                   \
47   static int __iMeter = -1;                          \
48   if  (__iMeter >= 0)  perf_stop_imeter (__iMeter);  \
49   else      __iMeter = perf_stop_meter (_m_name);    \
50 }
51
52 /* PERF_TICK_METER
53    Increments the counter of meter MeterName without changing
54    its state with respect to measurement of time.
55    Creates new meter if there is no such meter.
56    It is useful to count the number of enters to a part of code
57    without wasting a time to measure CPU time.
58 */
59 #define PERF_TICK_METER(_m_name) {                   \
60   static int __iMeter = -1;                          \
61   if  (__iMeter >= 0)  perf_tick_imeter (__iMeter);  \
62   else      __iMeter = perf_tick_meter (_m_name);    \
63 }
64
65 /* PERF_CLOSE_METER
66    Prints out and resets the given meter
67 */
68 #define PERF_CLOSE_METER(_m_name) perf_close_meter (_m_name);
69
70 /* PERF_PRINT_ALL
71    Prints all existing meters which have been entered at least once
72    and resets them
73 */
74 #define PERF_PRINT_ALL {                              \
75   perf_print_all_meters();                            \
76 }
77
78
79 #else
80 #define PERF_TICK_METER(_m_name)
81 #define PERF_START_METER(_m_name)
82 #define PERF_STOP_METER(_m_name)
83 #define PERF_CLOSE_METER(_m_name)
84 #define PERF_PRINT_ALL
85 #endif
86
87 #ifndef Standard_EXPORT
88 #ifdef WNT
89 #define Standard_EXPORT __declspec( dllexport )
90 #else
91 #define Standard_EXPORT extern
92 #endif
93 #endif
94
95 #ifdef __cplusplus
96 extern "C" {
97 #endif
98
99 Standard_EXPORT int     perf_init_meter         (const char * const MeterName);
100 /* Creates new counter (if it is absent) identified by
101    MeterName and resets its cumulative value
102    Returns  : iMeter if OK, -1 if alloc problem
103 */
104
105 Standard_EXPORT int     perf_start_meter        (const char * const MeterName);
106 /* Forces meter MeterName to begin to count by remembering
107    the current data of timer.
108    Creates new meter if there is no such meter
109    Returns  : iMeter if OK, -1 if no such meter and cannot create a new one
110 */
111
112 Standard_EXPORT int     perf_start_imeter       (const int  iMeter);
113 /* Forces meter with number iMeter to begin count by remembering
114    the current data of timer.
115    Returns  : iMeter if OK, -1 if no such meter
116 */
117
118 Standard_EXPORT int     perf_stop_meter         (const char * const MeterName);
119 /* Forces meter MeterName to stop and cumulate the time elapsed since the start
120    Returns  : iMeter if OK, -1 if no such meter or it is has not been started
121 */
122
123 Standard_EXPORT int     perf_stop_imeter        (const int  iMeter);
124 /* Forces meter with number iMeter to stop and cumulate the time
125    elapsed since the start.
126    Returns  : iMeter if OK, -1 if no such meter or it is has not been started
127 */
128
129 Standard_EXPORT int     perf_tick_meter         (const char * const MeterName);
130 /* Increments the counter of meter MeterName without changing
131    its state with respect to measurement of time.
132    Creates new meter if there is no such meter
133    Returns  : iMeter if OK, -1 if no such meter and cannot create a new one
134 */
135
136 Standard_EXPORT int     perf_tick_imeter        (const int  iMeter);
137 /* Increments the counter of meter iMeter without changing
138    its state with respect to measurement of time.
139    Returns  : iMeter if OK, -1 if no such meter
140 */
141
142 Standard_EXPORT int     perf_get_meter          (const char * const MeterName,
143                                                  int        * nb_enter,
144                                                  double     * seconds);
145 /* Tells the time cumulated by meter MeterName and the number
146    of enters to this meter
147    Output   :      *nb_enter, *seconds if the pointers != NULL
148    Returns  :      iMeter if OK, -1 if no such meter
149 */
150
151 Standard_EXPORT void    perf_close_meter        (const char * const MeterName);
152 /* Prints on stdout the cumulated time and the number of enters
153    for the specified meter
154 */
155
156 Standard_EXPORT void    perf_close_imeter       (const int iMeter);
157 /* Prints on stdout the cumulated time and the number of enters
158    for the specified meter
159 */
160
161 Standard_EXPORT void    perf_print_all_meters   (void);
162 /* Prints on stdout the cumulated time and the number of
163    enters for each alive meter which have the number of enters > 0.
164    Resets all meters
165 */
166
167 Standard_EXPORT void    perf_destroy_all_meters (void);
168 /* Deletes all meters and frees memory
169 */
170
171 extern          void    perf_print_and_destroy (void);
172 /* ATTENTION !!!
173    This func calls both perf_print_all_meters() and perf_destroy_all_meters()
174    and is called automatically at the end of a program
175    via system call atexit()
176 */
177
178 #ifdef __cplusplus
179 }
180 #endif
181
182 #endif