void StackInfo::PushFunction( FunctionInfo* pFunctionInfo ) { if(CAN_PROFILE_FOR_FUNCTIONS && IS_PROFILEDPROCESSFORFUNCTIONS) { try { if ( _sFunctionStack.size() > 0 ) { if(WANT_NO_FUNCTION_CALLEE_INFORMATION || ! WANT_FUNCTION_CALLEE_ID) { goto A; } FunctionInfo *_pFunctionInfo=_sFunctionStack.top().pFunctionInfo; CalleeFunctionInfo* pCalleeFunctionInfo=_pFunctionInfo->GetCalleeFunctionInfo( pFunctionInfo->fid); if(pCalleeFunctionInfo) { pCalleeFunctionInfo->nRecursiveCount++; pCalleeFunctionInfo->nCalls++; } } A: pFunctionInfo->nCalls++; pFunctionInfo->nRecursiveCount++; _sFunctionStack.push( StackEntryInfo( pFunctionInfo ) ); } catch(...) { } } else if(IS_PROFILEDPROCESSFOROBJECTS ) { if(WANT_OBJECT_ALLOCATION_DATA) { try { /*if ( _sFunctionStack.size() > 0 )*/ { pFunctionInfo->nCalls++; pFunctionInfo->nRecursiveCount++; if(pFunctionInfo->nRecursiveCount < 2) { _sFunctionStack.push( StackEntryInfo( pFunctionInfo ) ); } } } catch(...){} } } }
/** No descriptions */ void StackInfo::PushFunction( FunctionInfo* pFunctionInfo, INT64 llCycleCount ) { if ( _sFunctionStack.size() > 0 ) { // Increment the recursive count of this callee function info so we don't double-book entries FunctionInfo* pCallerFunctionInfo = _sFunctionStack.top().pFunctionInfo; FunctionID fidCallee = pFunctionInfo->fid; CalleeFunctionInfo* pCalleeFunctionInfo = pCallerFunctionInfo->GetCalleeFunctionInfo( fidCallee ); pCalleeFunctionInfo->nRecursiveCount++; pCalleeFunctionInfo->nCalls++; } // Increment the recursive count of this function info so we don't double-book entries pFunctionInfo->nRecursiveCount++; pFunctionInfo->nCalls++; _sFunctionStack.push( StackEntryInfo( pFunctionInfo, llCycleCount ) ); }