1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_MACROS_DEBUG_TIMEMEASURE_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_MACROS_DEBUG_TIMEMEASURE_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //*************************************************************************************************************
28*b1cdbd2cSJim Jagielski //  special macros for time measures
29*b1cdbd2cSJim Jagielski //  1) LOGFILE_TIMEMEASURE                  used it to define log file for this operations (default will be set automaticly)
30*b1cdbd2cSJim Jagielski //  2) START_TIMEMEASURE                    start new measure by using given variable names
31*b1cdbd2cSJim Jagielski //  3) START_TIMEMEASURE                    stop current measure by using given variable names and return time
32*b1cdbd2cSJim Jagielski //  4) LOG_TIMEMEASURE                      write measured time to logfile
33*b1cdbd2cSJim Jagielski //*************************************************************************************************************
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #ifdef  ENABLE_TIMEMEASURE
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski 	//_________________________________________________________________________________________________________________
38*b1cdbd2cSJim Jagielski 	//	includes
39*b1cdbd2cSJim Jagielski 	//_________________________________________________________________________________________________________________
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski 	#ifndef _RTL_STRBUF_HXX_
42*b1cdbd2cSJim Jagielski 	#include <rtl/strbuf.hxx>
43*b1cdbd2cSJim Jagielski 	#endif
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski     #ifndef _OSL_TIME_H_
46*b1cdbd2cSJim Jagielski     #include <osl/time.h>
47*b1cdbd2cSJim Jagielski     #endif
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski 	/*_____________________________________________________________________________________________________________
50*b1cdbd2cSJim Jagielski         LOGFILE_TIMEMEASURE
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski 		For follow macros we need a special log file. If user forget to specify anyone, we must do it for him!
53*b1cdbd2cSJim Jagielski 	_____________________________________________________________________________________________________________*/
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski     #ifndef LOGFILE_TIMEMEASURE
56*b1cdbd2cSJim Jagielski         #define LOGFILE_TIMEMEASURE "timemeasure.log"
57*b1cdbd2cSJim Jagielski 	#endif
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski     /*_____________________________________________________________________________________________________________
60*b1cdbd2cSJim Jagielski         class TimeMeasure
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski         We need this inline class as global timer to make it possible measure times over different objects!
63*b1cdbd2cSJim Jagielski         zB. Use it as baseclass to start timer at ctor (must be first called baseclass!!!) and stop it by calling stop method.
64*b1cdbd2cSJim Jagielski 	_____________________________________________________________________________________________________________*/
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski     class DBGTimeMeasureBase
67*b1cdbd2cSJim Jagielski     {
68*b1cdbd2cSJim Jagielski         public:
DBGTimeMeasureBase()69*b1cdbd2cSJim Jagielski             inline DBGTimeMeasureBase()
70*b1cdbd2cSJim Jagielski             {
71*b1cdbd2cSJim Jagielski                 m_nEnd   = 0                   ;
72*b1cdbd2cSJim Jagielski                 m_nStart = osl_getGlobalTimer();
73*b1cdbd2cSJim Jagielski             }
74*b1cdbd2cSJim Jagielski 
stopAndGet()75*b1cdbd2cSJim Jagielski             inline sal_Int32 stopAndGet()
76*b1cdbd2cSJim Jagielski             {
77*b1cdbd2cSJim Jagielski                 m_nEnd = osl_getGlobalTimer();
78*b1cdbd2cSJim Jagielski                 return( m_nEnd-m_nStart );
79*b1cdbd2cSJim Jagielski             }
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski         private:
82*b1cdbd2cSJim Jagielski             sal_Int32 m_nStart ;
83*b1cdbd2cSJim Jagielski             sal_Int32 m_nEnd   ;
84*b1cdbd2cSJim Jagielski     };
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski 	/*_____________________________________________________________________________________________________________
87*b1cdbd2cSJim Jagielski         START_TIMEMEASURE( NSTART, NEND )
88*b1cdbd2cSJim Jagielski         STOP_TIMEMEASURE( NSTART, NEND, NTIME )
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski         If you doesn't need a time measure above different classes ... you can try this macros!
91*b1cdbd2cSJim Jagielski         They initialize your given members with start end end time ... You can calculate differenz by himself.
92*b1cdbd2cSJim Jagielski     _____________________________________________________________________________________________________________*/
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski     #define START_TIMEMEASURE( NSTART, NEND )                                                                   \
95*b1cdbd2cSJim Jagielski                 sal_Int32   NSTART  = 0;                                                                        \
96*b1cdbd2cSJim Jagielski                 sal_Int32   NEND    = 0;                                                                        \
97*b1cdbd2cSJim Jagielski                 NSTART = osl_getGlobalTimer();
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski     #define STOP_TIMEMEASURE( NSTART, NEND, NTIME )                                                             \
100*b1cdbd2cSJim Jagielski                           NEND  = osl_getGlobalTimer();                                                         \
101*b1cdbd2cSJim Jagielski                 sal_Int32 NTIME = NEND-NSTART;
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 	/*_____________________________________________________________________________________________________________
104*b1cdbd2cSJim Jagielski         LOG_TIMEMEASURE( SOPERATION, NSTART )
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski         Write measured time to logfile.
107*b1cdbd2cSJim Jagielski     _____________________________________________________________________________________________________________*/
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski     #define LOG_TIMEMEASURE( SOPERATION, NTIME )                                                                \
110*b1cdbd2cSJim Jagielski                 {                                                                                               \
111*b1cdbd2cSJim Jagielski                     ::rtl::OStringBuffer _sBuffer( 256 );                                                       \
112*b1cdbd2cSJim Jagielski                     _sBuffer.append( SOPERATION         );                                                      \
113*b1cdbd2cSJim Jagielski                     _sBuffer.append( "\t=\t"            );                                                      \
114*b1cdbd2cSJim Jagielski                     _sBuffer.append( (sal_Int32)(NTIME) );                                                      \
115*b1cdbd2cSJim Jagielski                     _sBuffer.append( " ms\n"            );                                                      \
116*b1cdbd2cSJim Jagielski                     WRITE_LOGFILE( LOGFILE_TIMEMEASURE, _sBuffer.makeStringAndClear().getStr() )                \
117*b1cdbd2cSJim Jagielski                 }
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski #else   // #ifdef ENABLE_TIMEMEASURE
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski 	/*_____________________________________________________________________________________________________________
122*b1cdbd2cSJim Jagielski 		If right testmode is'nt set - implements these macros empty!
123*b1cdbd2cSJim Jagielski 	_____________________________________________________________________________________________________________*/
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski     #undef  LOGFILE_TIMEMEASURE
126*b1cdbd2cSJim Jagielski     #define START_TIMEMEASURE( NSTART, NEND )
127*b1cdbd2cSJim Jagielski     #define STOP_TIMEMEASURE( NSTART, NEND, NTIME )
128*b1cdbd2cSJim Jagielski     #define LOG_TIMEMEASURE( SOPERATION, NTIME )
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski #endif  // #ifdef ENABLE_TIMEMEASURE
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
133*b1cdbd2cSJim Jagielski //	end of file
134*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski #endif  // #ifndef __FRAMEWORK_MACROS_DEBUG_TIMEMEASURE_HXX_
137