1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #ifndef __FRAMEWORK_MACROS_DEBUG_TIMEMEASURE_HXX_
29*cdf0e10cSrcweir #define __FRAMEWORK_MACROS_DEBUG_TIMEMEASURE_HXX_
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir //*************************************************************************************************************
32*cdf0e10cSrcweir //  special macros for time measures
33*cdf0e10cSrcweir //  1) LOGFILE_TIMEMEASURE                  used it to define log file for this operations (default will be set automaticly)
34*cdf0e10cSrcweir //  2) START_TIMEMEASURE                    start new measure by using given variable names
35*cdf0e10cSrcweir //  3) START_TIMEMEASURE                    stop current measure by using given variable names and return time
36*cdf0e10cSrcweir //  4) LOG_TIMEMEASURE                      write measured time to logfile
37*cdf0e10cSrcweir //*************************************************************************************************************
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir #ifdef  ENABLE_TIMEMEASURE
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir 	//_________________________________________________________________________________________________________________
42*cdf0e10cSrcweir 	//	includes
43*cdf0e10cSrcweir 	//_________________________________________________________________________________________________________________
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir 	#ifndef _RTL_STRBUF_HXX_
46*cdf0e10cSrcweir 	#include <rtl/strbuf.hxx>
47*cdf0e10cSrcweir 	#endif
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir     #ifndef _OSL_TIME_H_
50*cdf0e10cSrcweir     #include <osl/time.h>
51*cdf0e10cSrcweir     #endif
52*cdf0e10cSrcweir 
53*cdf0e10cSrcweir 	/*_____________________________________________________________________________________________________________
54*cdf0e10cSrcweir         LOGFILE_TIMEMEASURE
55*cdf0e10cSrcweir 
56*cdf0e10cSrcweir 		For follow macros we need a special log file. If user forget to specify anyone, we must do it for him!
57*cdf0e10cSrcweir 	_____________________________________________________________________________________________________________*/
58*cdf0e10cSrcweir 
59*cdf0e10cSrcweir     #ifndef LOGFILE_TIMEMEASURE
60*cdf0e10cSrcweir         #define LOGFILE_TIMEMEASURE "timemeasure.log"
61*cdf0e10cSrcweir 	#endif
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir     /*_____________________________________________________________________________________________________________
64*cdf0e10cSrcweir         class TimeMeasure
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir         We need this inline class as global timer to make it possible measure times over different objects!
67*cdf0e10cSrcweir         zB. Use it as baseclass to start timer at ctor (must be first called baseclass!!!) and stop it by calling stop method.
68*cdf0e10cSrcweir 	_____________________________________________________________________________________________________________*/
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir     class DBGTimeMeasureBase
71*cdf0e10cSrcweir     {
72*cdf0e10cSrcweir         public:
73*cdf0e10cSrcweir             inline DBGTimeMeasureBase()
74*cdf0e10cSrcweir             {
75*cdf0e10cSrcweir                 m_nEnd   = 0                   ;
76*cdf0e10cSrcweir                 m_nStart = osl_getGlobalTimer();
77*cdf0e10cSrcweir             }
78*cdf0e10cSrcweir 
79*cdf0e10cSrcweir             inline sal_Int32 stopAndGet()
80*cdf0e10cSrcweir             {
81*cdf0e10cSrcweir                 m_nEnd = osl_getGlobalTimer();
82*cdf0e10cSrcweir                 return( m_nEnd-m_nStart );
83*cdf0e10cSrcweir             }
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir         private:
86*cdf0e10cSrcweir             sal_Int32 m_nStart ;
87*cdf0e10cSrcweir             sal_Int32 m_nEnd   ;
88*cdf0e10cSrcweir     };
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir 	/*_____________________________________________________________________________________________________________
91*cdf0e10cSrcweir         START_TIMEMEASURE( NSTART, NEND )
92*cdf0e10cSrcweir         STOP_TIMEMEASURE( NSTART, NEND, NTIME )
93*cdf0e10cSrcweir 
94*cdf0e10cSrcweir         If you doesn't need a time measure above different classes ... you can try this macros!
95*cdf0e10cSrcweir         They initialize your given members with start end end time ... You can calculate differenz by himself.
96*cdf0e10cSrcweir     _____________________________________________________________________________________________________________*/
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir     #define START_TIMEMEASURE( NSTART, NEND )                                                                   \
99*cdf0e10cSrcweir                 sal_Int32   NSTART  = 0;                                                                        \
100*cdf0e10cSrcweir                 sal_Int32   NEND    = 0;                                                                        \
101*cdf0e10cSrcweir                 NSTART = osl_getGlobalTimer();
102*cdf0e10cSrcweir 
103*cdf0e10cSrcweir     #define STOP_TIMEMEASURE( NSTART, NEND, NTIME )                                                             \
104*cdf0e10cSrcweir                           NEND  = osl_getGlobalTimer();                                                         \
105*cdf0e10cSrcweir                 sal_Int32 NTIME = NEND-NSTART;
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir 	/*_____________________________________________________________________________________________________________
108*cdf0e10cSrcweir         LOG_TIMEMEASURE( SOPERATION, NSTART )
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir         Write measured time to logfile.
111*cdf0e10cSrcweir     _____________________________________________________________________________________________________________*/
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir     #define LOG_TIMEMEASURE( SOPERATION, NTIME )                                                                \
114*cdf0e10cSrcweir                 {                                                                                               \
115*cdf0e10cSrcweir                     ::rtl::OStringBuffer _sBuffer( 256 );                                                       \
116*cdf0e10cSrcweir                     _sBuffer.append( SOPERATION         );                                                      \
117*cdf0e10cSrcweir                     _sBuffer.append( "\t=\t"            );                                                      \
118*cdf0e10cSrcweir                     _sBuffer.append( (sal_Int32)(NTIME) );                                                      \
119*cdf0e10cSrcweir                     _sBuffer.append( " ms\n"            );                                                      \
120*cdf0e10cSrcweir                     WRITE_LOGFILE( LOGFILE_TIMEMEASURE, _sBuffer.makeStringAndClear().getStr() )                \
121*cdf0e10cSrcweir                 }
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir #else   // #ifdef ENABLE_TIMEMEASURE
124*cdf0e10cSrcweir 
125*cdf0e10cSrcweir 	/*_____________________________________________________________________________________________________________
126*cdf0e10cSrcweir 		If right testmode is'nt set - implements these macros empty!
127*cdf0e10cSrcweir 	_____________________________________________________________________________________________________________*/
128*cdf0e10cSrcweir 
129*cdf0e10cSrcweir     #undef  LOGFILE_TIMEMEASURE
130*cdf0e10cSrcweir     #define START_TIMEMEASURE( NSTART, NEND )
131*cdf0e10cSrcweir     #define STOP_TIMEMEASURE( NSTART, NEND, NTIME )
132*cdf0e10cSrcweir     #define LOG_TIMEMEASURE( SOPERATION, NTIME )
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir #endif  // #ifdef ENABLE_TIMEMEASURE
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir //*****************************************************************************************************************
137*cdf0e10cSrcweir //	end of file
138*cdf0e10cSrcweir //*****************************************************************************************************************
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir #endif  // #ifndef __FRAMEWORK_MACROS_DEBUG_TIMEMEASURE_HXX_
141