From 9a9e4a780448f9a2f7db1d1bf0e17bcfd1581bf8 Mon Sep 17 00:00:00 2001 From: Antonio Linares Date: Wed, 18 Jul 2001 09:46:42 +0000 Subject: [PATCH] Added (PRG level) __SetProfiler( On | Off ) --- harbour/source/vm/hvm.c | 48 ++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 6f7003849b..05b95ca05b 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -227,6 +227,8 @@ extern POBJSYMBOLS hb_firstsymbol, hb_lastsymbol; extern void * hb_mthRequested( void ); /* profiler from classes.c */ extern void hb_mthAddTime( void *, ULONG ); /* profiler from classes.c */ +BOOL hb_bProfiler = FALSE; /* profiler status is off */ + /* virtual machine state */ HB_SYMB hb_symEval = { "__EVAL", HB_FS_PUBLIC, hb_vmDoBlock, NULL }; /* symbol to evaluate codeblocks */ @@ -2952,11 +2954,15 @@ void hb_vmDo( USHORT uiParams ) PHB_ITEM pSelf; PHB_FUNC pFunc; BOOL bDebugPrevState; - ULONG ulClock = ( ULONG ) clock(); + ULONG ulClock; void * pMethod; + BOOL bProfiler = hb_bProfiler; /* because profiler state may change */ HB_TRACE(HB_TR_DEBUG, ("hb_vmDo(%hu)", uiParams)); + if( bProfiler ) + ulClock = ( ULONG ) clock(); + hb_inkeyPoll(); /* Poll the console keyboard */ pItem = hb_stackNewFrame( &sStackState, uiParams ); @@ -2998,8 +3004,11 @@ void hb_vmDo( USHORT uiParams ) if( pFunc ) { - pMethod = hb_mthRequested(); + if( bProfiler ) + pMethod = hb_mthRequested(); + pFunc(); + if (lPopSuper) { /* POP SuperClass handle */ @@ -3011,7 +3020,9 @@ void hb_vmDo( USHORT uiParams ) pSelfBase->puiClsTree = 0; } } - hb_mthAddTime( pMethod, clock() - ulClock ); + + if( bProfiler ) + hb_mthAddTime( pMethod, clock() - ulClock ); } else if( pSym->szName[ 0 ] == '_' ) { @@ -3034,7 +3045,7 @@ void hb_vmDo( USHORT uiParams ) { pFunc(); - if( pSym->pDynSym ) + if( bProfiler && pSym->pDynSym ) { pSym->pDynSym->ulCalls++; /* profiler support */ pSym->pDynSym->ulTime += clock() - ulClock; /* profiler support */ @@ -3066,11 +3077,15 @@ void hb_vmSend( USHORT uiParams ) PHB_ITEM pSelf; PHB_FUNC pFunc; BOOL bDebugPrevState; - ULONG ulClock = ( ULONG ) clock(); + ULONG ulClock; void * pMethod; + BOOL bProfiler = hb_bProfiler; /* because profiler state may change */ HB_TRACE(HB_TR_DEBUG, ("hb_vmSend(%hu)", uiParams)); + if( bProfiler ) + ulClock = ( ULONG ) clock(); + pItem = hb_stackNewFrame( &sStackState, uiParams ); /* procedure name */ pSym = pItem->item.asSymbol.value; pSelf = hb_stackSelfItem(); /* NIL, OBJECT or BLOCK */ @@ -3107,7 +3122,9 @@ void hb_vmSend( USHORT uiParams ) if( pFunc ) { - pMethod = hb_mthRequested(); + if( bProfiler ) + pMethod = hb_mthRequested(); + pFunc(); if (lPopSuper) @@ -3121,7 +3138,9 @@ void hb_vmSend( USHORT uiParams ) pSelfBase->puiClsTree = 0; } } - hb_mthAddTime( pMethod, clock() - ulClock ); + + if( bProfiler ) + hb_mthAddTime( pMethod, clock() - ulClock ); } else if( pSym->szName[ 0 ] == '_' ) { @@ -3194,7 +3213,7 @@ void hb_vmSend( USHORT uiParams ) { pFunc(); - if( pSym->pDynSym ) + if( bProfiler && pSym->pDynSym ) { pSym->pDynSym->ulCalls++; /* profiler support */ pSym->pDynSym->ulTime += clock() - ulClock; /* profiler support */ @@ -4584,3 +4603,16 @@ void hb_vmIsStaticRef( void ) /* statics are stored as an item of array type */ hb_gcItemRef( &s_aStatics ); } + +/* $Doc$ + * $FuncName$ __SETPROFILER( ) --> + * $Description$ Turns on | off the profiler activity + * $End$ */ +HB_FUNC( __SETPROFILER ) +{ + BOOL bOldValue = hb_bProfiler; + + hb_bProfiler = hb_parl( 1 ); + + hb_retl( bOldValue ); +}