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