diff -r 185201be11b0 -r 516af714ebb4 analyzetool/commandlineengine/src/catallocs.cpp --- a/analyzetool/commandlineengine/src/catallocs.cpp Thu Sep 02 22:05:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ -#include "../inc/ATCommonDefines.h" -#include "../inc/catallocs.h" - -void CATAllocs::Alloc( const string& sAllocString ) -{ - LOG_LOW_FUNC_ENTRY("CATAllocs::Alloc"); - string sAlloc( sAllocString ); - CATAlloc alloc; - string sAddress = GetStringUntilNextSpace( sAlloc, true ); - alloc.m_sTime = GetStringUntilNextSpace( sAlloc, true ); - alloc.m_sSize = GetStringUntilNextSpace( sAlloc, true ); - alloc.m_vCallStack.insert( pair(1, sAlloc) ); - // 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::AllocH( const string& sAllocHString ) -{ - LOG_LOW_FUNC_ENTRY("CATAllocs::AllocH"); - string sAllocH( sAllocHString ); - // Parse alloc & create new allocation. - CATAlloc alloc; - string sAddress = GetStringUntilNextSpace( sAllocH, true ); - alloc.m_sTime = GetStringUntilNextSpace( sAllocH, true ); - 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. - 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 ) -{ - LOG_LOW_FUNC_ENTRY("CATAllocs::AllocF"); - string sAllocF( sAllocFString ); - string sAddress = GetStringUntilNextSpace( sAllocF, true ); - string sTime = GetStringUntilNextSpace( sAllocF, true ); - 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 ); - } -} - -// Free message. -void CATAllocs::Free( const string& sFreeString ) -{ - LOG_LOW_FUNC_ENTRY("CATAllocs::Free"); - string sFree( sFreeString ); - string sKey = GetStringUntilNextSpace( sFree ); - // Find related allocation. - map::iterator it; - it = m_vAllocs.find( sKey ); - if ( it == m_vAllocs.end() ) - { - LOG_STRING( "CATAllocs: Free message which has no alloc pair: " << sKey ); - return; - } - // Delete it. - m_vAllocs.erase( it ); -} - -// FreeH. -void CATAllocs::FreeH( const string& sFreeH ) -{ - LOG_LOW_FUNC_ENTRY("CATAllocs::FreeH"); - // Current implementation does not use call stack of - // free message to anything. - string sFree( sFreeH ); - string sKey = GetStringUntilNextSpace( sFree ); - // Time stamp. (not used currently) - // Call stack count. (not used currently) - // Call stack data. (not used currently) - - // Find related allocation. - map::iterator it; - it = m_vAllocs.find( sKey ); - if ( it == m_vAllocs.end() ) - { - LOG_STRING( "CATAllocs: FreeH message which has no alloc pair: " << sKey ); - return; - } - // Delete it. - m_vAllocs.erase( it ); -} - -// FreeF. -void CATAllocs::FreeF( const string& /* sFreeF */ ) -{ - LOG_LOW_FUNC_ENTRY("CATAllocs::FreeF"); - // Fragments are currently ignored. - // Memory address. (not used currently) - // Time stamp. (not used currently) - // Packet number. (not used currently) - // Call stack data. (not used currently) -} - -// Get "leak" list ordered by allocation time. -void CATAllocs::GetLeakList( vector& vLeakList ) -{ - LOG_LOW_FUNC_ENTRY("CATAllocs::GetLeakList"); - - // Create multimap where key is timestamp. - // Add allocations there so they will go ascending order. - multimap mmap; - multimap::iterator itMmap; - - map::iterator it; - for( it = m_vAllocs.begin(); it != m_vAllocs.end() ; it++ ) - { - string sTime = it->second.m_sTime; - - string sLine = it->first; - sLine.append(" "); - sLine.append( it->second.GetAllocString() ); - - mmap.insert( pair( sTime, sLine ) ); - } - - // Iterate list to parameter vector. - vLeakList.clear(); - for ( itMmap = mmap.begin(); itMmap != mmap.end(); itMmap++ ) - vLeakList.push_back( itMmap->second ); -} - -// Clear alloc data. -void CATAllocs::ClearAllocs( void ) -{ - LOG_LOW_FUNC_ENTRY("CATAllocs::ClearAllocs"); - m_vAllocs.clear(); -} - -//EOF