Пример #1
0
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(...){}
				}
		}
}
Пример #2
0
/** 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 ) );
}