diff -r e26895079d7c -r 7fdc9a71d314 analyzetool/commandlineengine/src/catallocs.cpp --- a/analyzetool/commandlineengine/src/catallocs.cpp Wed Sep 15 00:19:18 2010 +0300 +++ b/analyzetool/commandlineengine/src/catallocs.cpp Wed Sep 15 13:53:27 2010 +0300 @@ -36,14 +36,65 @@ } } -void CATAllocs::AllocH( const string& sAllocHString ) +void CATAllocs::AllocH( const string& sAllocHString, const string& aTimeString ) { LOG_LOW_FUNC_ENTRY("CATAllocs::AllocH"); string sAllocH( sAllocHString ); // Parse alloc & create new allocation. CATAlloc alloc; + alloc.m_sTime = aTimeString; string sAddress = GetStringUntilNextSpace( sAllocH, true ); - alloc.m_sTime = GetStringUntilNextSpace( sAllocH, true ); + alloc.m_sSize = GetStringUntilNextSpace( sAllocH, true ); + alloc.m_iThreadId = GetStringUntilNextSpace ( sAllocH, true ); + alloc.m_iCSCount = _httoi( string( GetStringUntilNextSpace( sAllocH, true ) ).c_str() ); + // Insert call stack fragment as "first" 1 because we are header. + if ( alloc.m_iCSCount > 0 ) + alloc.m_vCallStack.insert( pair( 0, sAllocH ) ); + // Add allocation + pair< map::iterator, bool> ret; + ret = m_vAllocs.insert( pair( sAddress, alloc ) ); + if( ret.second == false ) + { + // Allocation to this memory address was already added. + LOG_STRING( "CATAllocs: Allocating same address again, address: " << sAddress ); + } +} + +void CATAllocs::AllocF( const string& sAllocFString, const string& aTimeString ) +{ + LOG_LOW_FUNC_ENTRY("CATAllocs::AllocF"); + string sAllocF( sAllocFString ); + string sAddress = GetStringUntilNextSpace( sAllocF, true ); + string sTime = aTimeString; + unsigned long iNumber = _httoi( string( GetStringUntilNextSpace( sAllocF, true ) ).c_str() ); + string sCallSstack = sAllocF; + // Find correct allocation into which add call stack fragment. + map::iterator it; + it = m_vAllocs.find( sAddress ); + // TODO: If cannot find, create new in cache. + if ( it == m_vAllocs.end() ) + { + LOG_STRING( "CATAllocs: Allocate fragment without header: " << sAddress ); + return; + } + pair< map::iterator, bool> ret; + // Add call stack to it. + ret = it->second.m_vCallStack.insert( pair( iNumber, sCallSstack ) ); + if( ret.second == false ) + { + LOG_STRING( "CATAllocs: Same allocation fragment again: " << sAddress ); + } +} + +// ReallocH. +void CATAllocs::ReallocH( const string& sReallocHString, const string& aTimeString ) +{ + LOG_LOW_FUNC_ENTRY("CATAllocs::ReallocH"); + string sAllocH( sReallocHString ); + // Parse alloc & create new allocation. + CATAlloc alloc; + string sAddress = GetStringUntilNextSpace( sAllocH, true ); + alloc.m_sTime = aTimeString; alloc.m_sSize = GetStringUntilNextSpace( sAllocH, true ); alloc.m_iCSCount = _httoi( string( GetStringUntilNextSpace( sAllocH, true ) ).c_str() ); // Insert call stack fragment as "first" 1 because we are header. @@ -59,12 +110,13 @@ } } -void CATAllocs::AllocF( const string& sAllocFString ) +// ReallocF. +void CATAllocs::ReallocF( const string& sReallocFString, const string& aTimeString ) { - LOG_LOW_FUNC_ENTRY("CATAllocs::AllocF"); - string sAllocF( sAllocFString ); + LOG_LOW_FUNC_ENTRY("CATAllocs::ReallocF"); + string sAllocF( sReallocFString ); string sAddress = GetStringUntilNextSpace( sAllocF, true ); - string sTime = GetStringUntilNextSpace( sAllocF, true ); + string sTime = aTimeString; unsigned long iNumber = _httoi( string( GetStringUntilNextSpace( sAllocF, true ) ).c_str() ); string sCallSstack = sAllocF; // Find correct allocation into which add call stack fragment. @@ -104,7 +156,7 @@ } // FreeH. -void CATAllocs::FreeH( const string& sFreeH ) +void CATAllocs::FreeH( const string& sFreeH, const string& aTimeString ) { LOG_LOW_FUNC_ENTRY("CATAllocs::FreeH"); // Current implementation does not use call stack of @@ -112,6 +164,7 @@ string sFree( sFreeH ); string sKey = GetStringUntilNextSpace( sFree ); // Time stamp. (not used currently) + // Thread ID. (not used currently) // Call stack count. (not used currently) // Call stack data. (not used currently) @@ -128,7 +181,7 @@ } // FreeF. -void CATAllocs::FreeF( const string& /* sFreeF */ ) +void CATAllocs::FreeF( const string& /* sFreeF */, const string& /* aTimeString */ ) { LOG_LOW_FUNC_ENTRY("CATAllocs::FreeF"); // Fragments are currently ignored.