multimediacommsengine/tsrc/testdriver/siptester/src/TCmdGetMemoryUsage.cpp
changeset 0 1bce908db942
--- /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 <utf.h>
+#include <hal.h>
+#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 );
+	}