--- /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 );
+ }