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