diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/testdriver/siptester/src/TCmdGetMemoryUsage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/testdriver/siptester/src/TCmdGetMemoryUsage.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,111 @@ +/* +* Copyright (c) 2004 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: Implementation +* +*/ + + +#include +#include +#include "TCmdGetMemoryUsage.h" +#include "SIPConstants.h" + +/** + * INPUT: + * Headers: - + * Parameters: KParamProcess + * IDs: - + * + * OUTPUT: + * Parameters: KParamUsedMemory, KParamFreeMemory + * IDs: - + */ +void TCmdGetMemoryUsage::ExecuteL() + { + //This returns the used memory across the whole system, and not for the + //specified server + TInt totalMemory = 0; + User::LeaveIfError( HAL::Get( HALData::EMemoryRAM, totalMemory ) ); + TInt freeMemory = 0; + User::LeaveIfError( HAL::Get( HALData::EMemoryRAMFree, freeMemory ) ); + TInt usedMemory = totalMemory - freeMemory; + + + + //TODO: Obtaining the memory use of target process doesn't work yet +#if 0 + TPtrC8 serverParam = ExtractTextL( KParamProcess ); + HBufC16* server = CnvUtfConverter::ConvertToUnicodeFromUtf8L( serverParam ); + CleanupStack::PushL( server ); + + HBufC* matchPattern = HBufC::NewL( server->Size() + 2 ); + TPtr ptr = matchPattern->Des(); + _LIT( KProcessMatchFormat, "*%S*" ); + ptr.AppendFormat( KProcessMatchFormat, server ); + CleanupStack::PopAndDestroy( server ); + CleanupStack::PushL( matchPattern ); + +#if ( !defined( EKA2 ) && ( defined( __WINS__ ) || defined( __WINSCW__ ) ) ) + // Emulator doesn't have a concept of process (in EKA1) + RThread process; + TFindThread processFinder( *matchPattern ); +#else + RProcess process; + TFindProcess processFinder( *matchPattern ); +#endif + + // Find the process + TFullName processName; + if ( processFinder.Next( processName ) == KErrNone ) + { + User::InfoPrint( _L( "Found" ) ); + User::LeaveIfError( process.Open( processFinder ) ); + + TModuleMemoryInfo memInfo; + //Currently returns KErrNotSupported + TInt err = process.GetMemoryInfo( memInfo ); + //What does the value returned by memInfo.GetInitialisedDataSize() mean? + + + //User-functions AllocSize, Available, CountAllocCells act on the + //currently active process + + //User::SwitchHeap could be used to set the head of the target process + //as the default heap, and then use RHeap::AllocSize? But how to get + //RHeap from RProcess? + + //It is not allowed to use kernel code from user code + //(Kern::FreeRamInBytes etc) + + process.Close(); + } + + CleanupStack::PopAndDestroy( matchPattern ); +#endif // #if 0 + + // -- Response creation --------------------------------------------------- + + AddIntegerResponseL( KParamUsedMemory, usedMemory ); + AddIntegerResponseL( KParamFreeMemory, freeMemory ); + } + +TBool TCmdGetMemoryUsage::Match( const TTcIdentifier& aId ) + { + return TTcSIPCommandBase::Match( aId, _L8("GetMemoryUsage") ); + } + +TTcCommandBase* TCmdGetMemoryUsage::CreateL( MTcTestContext& aContext ) + { + return new( ELeave ) TCmdGetMemoryUsage( aContext ); + }