diff -r 7fdc9a71d314 -r 8ad140f3dd41 memspy/MemSpyClient/src/memspysession.cpp --- a/memspy/MemSpyClient/src/memspysession.cpp Wed Sep 15 13:53:27 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,908 +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 "memspysession.h" - -#include -// API -#include -#include -#include -#include -#include -//KernelObjects -#include -// Servers -#include -// ECom -#include - -// IMPLEMENTATION - -EXPORT_C RMemSpySession::RMemSpySession() - { - } - - -EXPORT_C TInt RMemSpySession::Connect() - { - TInt error(KErrNone); - - for (TInt i=0; i<2; i++) // Two retries max - { - TInt error = CreateSession(KMemSpyServerName, TVersion(KMemSpyVersion, 0, 0)); - - if (error != KErrNotFound && error != KErrServerTerminated) - return error; - - error = StartServer(); - - if (error != KErrNone && error != KErrAlreadyExists) - return error; - } - - return error; - } - -TInt RMemSpySession::StartServer() - { - RProcess server; - _LIT(KCommand, "start"); - const TUid KServerUid3 = {0xE5883BC2}; - TInt error = server.Create(KMemSpyServerName, KCommand);//, KServerUid3); - - if (error != KErrNone) - return error; - - TRequestStatus startStatus, stopStatus; - server.Logon(stopStatus); - if (stopStatus != KRequestPending) - { - User::WaitForRequest(stopStatus); - server.Kill(0); - server.Close(); - return stopStatus.Int(); - } - - server.Rendezvous(startStatus); - server.Resume(); - User::WaitForRequest(startStatus, stopStatus); - if (startStatus == KRequestPending) - { - // not started yet, i.e. stopStatus was signaled - server.Close(); - return stopStatus.Int(); - } - - // Rendezvous was called - the server is ready - - // We first need to cancel Logon - server.LogonCancel(stopStatus); - // We don't need this anymore - server.Close(); - // Wait for LogonCancel to complete - User::WaitForRequest(stopStatus); - - // Everything went OK - return KErrNone; - } - -EXPORT_C void RMemSpySession::GetProcessesL(RArray &aProcesses, TSortType aSortType) - { - TPckgBuf count; - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetProcessCount, TIpcArgs(&count))); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyProcessData)); - TPtr8 bufferPtr(buffer->Des()); - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetProcesses, TIpcArgs(&count, &bufferPtr))); - aProcesses.Reset(); - - TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyProcessData)); - aProcesses.AppendL(CMemSpyApiProcess::NewLC(data())); - } - CleanupStack::Pop(aProcesses.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C TProcessId RMemSpySession::GetProcessIdByNameL(const TDesC& aProcessName) - { - TPckgBuf procId; - User::LeaveIfError(SendReceive(EMemSpyClienServerOpGetProcessIdByName, - TIpcArgs(&aProcessName, &procId))); - - return procId(); - } - -EXPORT_C TInt RMemSpySession::ProcessSystemPermanentOrCritical( TProcessId aId, TBool aValue ) - { - TPckgBuf arg1( aId ); - TPckgBuf arg2( aValue ); - TIpcArgs args( &arg1, &arg2 ); - - TInt error = SendReceive( EMemSpyClientServerOpProcessSystemPermanentOrCritical, args ); - - aValue = arg2(); - - return error; - } - -EXPORT_C TInt RMemSpySession::EndProcessL( TProcessId aId, TMemSpyEndType aType ) - { - TPckgBuf arg1( aId ); - TPckgBuf arg2( aType ); - TIpcArgs args( &arg1, &arg2 ); - - TInt error = SendReceive( EMemSpyClientServerOpEndProcess, args ); - - return error; - } - -EXPORT_C TInt RMemSpySession::SwitchToProcess( TProcessId aId, TBool aBrought ) - { - TPckgBuf arg1( aId ); - TPckgBuf arg2( aBrought ); - TIpcArgs args( &arg1, &arg2 ); - - TInt error = SendReceive( EMemSpyClientServerOpSwitchToProcess, args ); - - return error; - } - -// Threads related methods -EXPORT_C void RMemSpySession::GetThreadsL(TProcessId aProcessId, RArray &aThreads, TSortType aSortType) - { - TPckgBuf count; - TPckgBuf pid(aProcessId); - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetThreadCount, TIpcArgs(&count, &pid))); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyThreadData)); - TPtr8 bufferPtr(buffer->Des()); - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetThreads, TIpcArgs(&count, &bufferPtr, &pid))); - aThreads.Reset(); - - TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyThreadData)); - aThreads.AppendL(CMemSpyApiThread::NewLC(data())); - } - CleanupStack::Pop(aThreads.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C void RMemSpySession::SetThreadPriorityL(TThreadId aId, TInt aPriority) - { - TPckgBuf arg1( aId ); - TPckgBuf arg2( aPriority ); - - User::LeaveIfError(SendReceive( EMemSpyClientServerOpSetThreadPriority, TIpcArgs(&arg1, &arg2))); - } - -EXPORT_C TInt RMemSpySession::ThreadSystemPermanentOrCritical( TThreadId aId, TBool aValue ) - { - TPckgBuf arg1( aId ); - TPckgBuf arg2( aValue ); - TIpcArgs args( &arg1, &arg2 ); - - TInt error = SendReceive( EMemSpyClientServerOpThreadSystemPermanentOrCritical, args ); - - aValue = arg2(); - - return error; - } - -EXPORT_C TInt RMemSpySession::EndThreadL( TThreadId aId, TMemSpyEndType aType ) - { - TPckgBuf arg1( aId ); - TPckgBuf arg2( aType ); - TIpcArgs args( &arg1, &arg2 ); - - TInt error = SendReceive( EMemSpyClientServerOpEndThread, args ); - - return error; - } - -EXPORT_C TInt RMemSpySession::SwitchToThread( TThreadId aId, TBool aBrought ) - { - TPckgBuf arg1( aId ); - TPckgBuf arg2( aBrought ); - TIpcArgs args( &arg1, &arg2 ); - - TInt error = SendReceive( EMemSpyClientServerOpSwitchToThread, args ); - - return error; - } - -EXPORT_C TInt RMemSpySession::GetInfoItemType( TInt aIndex, TThreadId aId, TMemSpyThreadInfoItemType &aType ) - { - TPckgBuf arg1( aIndex ); - TPckgBuf arg2( aId ); - TPckgBuf arg3; - TIpcArgs args( &arg1, &arg2, &arg3 ); - - TInt error = SendReceive( EMemSpyClientServerOpGetInfoItemType, args ); - - aType = arg3(); - - return error; - } - -EXPORT_C void RMemSpySession::GetThreadInfoItemsL( RArray &aInfoItems, TThreadId aId, TMemSpyThreadInfoItemType aType ) - { - TPckgBuf id( aId ); - TPckgBuf type( aType ); - TPckgBuf count; - - TInt error = SendReceive( EMemSpyClientServerOpGetThreadInfoItemsCount, TIpcArgs( &id, &type, &count ) ); - TInt itemCount = count(); - - if( error == KErrNone ) - { - if( itemCount == 0 ) - { - aInfoItems.Reset(); - } - else - { - HBufC8* buffer = HBufC8::NewLC( itemCount * sizeof(TMemSpyThreadInfoItemData) ); - TPtr8 bufferPtr(buffer->Des()); - - TPckgBuf requestedCount( itemCount ); - - TIpcArgs args( &requestedCount, &id, &type, &bufferPtr ); - TInt error = SendReceive( EMemSpyClientServerOpGetThreadInfoItems, args ); // TODO check error - - aInfoItems.Reset(); - - for(TInt i=0, offset = 0; i < itemCount; i++, offset+=sizeof(TMemSpyThreadInfoItemData)) - { - TPckgBuf data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyThreadInfoItemData)); - aInfoItems.AppendL(CMemSpyApiThreadInfoItem::NewLC(data())); - } - - CleanupStack::Pop(aInfoItems.Count()); - CleanupStack::PopAndDestroy(buffer); - } - } - - User::LeaveIfError(error); - } - -EXPORT_C TInt RMemSpySession::GetThreadInfoItems( RArray &aInfoItems, TThreadId aId, TMemSpyThreadInfoItemType aType ) - { - TRAPD(error, GetThreadInfoItemsL(aInfoItems, aId, aType)); - return error; - } - -EXPORT_C void RMemSpySession::GetProcessIdByThreadId( TProcessId& aPID, TThreadId aTID ) - { - TPckgBuf pid(aPID); - TPckgBuf tid(aTID); - - TIpcArgs args( &pid, &tid ); - User::LeaveIfError( SendReceive( EMemSpyClientServerOpGetProcessIdByThreadId, args ) ); - aPID = pid(); - } - -//Kernel Objects specific operations -EXPORT_C void RMemSpySession::GetKernelObjectsL( RArray &aKernelObjects ) - { - TPckgBuf count; - User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetKernelObjectCount, TIpcArgs(&count) )); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyKernelObjectData)); - TPtr8 bufferPtr(buffer->Des()); - - TIpcArgs args( &count, &bufferPtr ); - User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetKernelObjects, args )); - - aKernelObjects.Reset(); - - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyKernelObjectData)); - aKernelObjects.AppendL(CMemSpyApiKernelObject::NewLC(data())); - } - - CleanupStack::Pop(aKernelObjects.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C TInt RMemSpySession::GetKernelObjects( RArray &aKernelObjects ) - { - TRAPD(error, GetKernelObjectsL(aKernelObjects)); - return error; - } - -EXPORT_C void RMemSpySession::GetKernelObjectItemsL( RArray &aKernelObjectItems, TMemSpyDriverContainerType aForContainer ) - { - TPckgBuf count; - TPckgBuf type(aForContainer); - User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetKernelObjectItemCount, TIpcArgs(&count, &type) )); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyDriverHandleInfoGeneric)); - TPtr8 bufferPtr(buffer->Des()); - - TIpcArgs args( &count, &type, &bufferPtr ); - User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetKernelObjectItems, args )); - - aKernelObjectItems.Reset(); - - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyDriverHandleInfoGeneric)); - aKernelObjectItems.AppendL( CMemSpyApiKernelObjectItem::NewLC( data() ) ); - } - CleanupStack::Pop(aKernelObjectItems.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C TInt RMemSpySession::GetKernelObjectItems( RArray &aKernelObjectItems, TMemSpyDriverContainerType aForContainer ) - { - TRAPD(error, GetKernelObjectItemsL(aKernelObjectItems, aForContainer)); - return error; - } - -EXPORT_C void RMemSpySession::GetMemoryTrackingCyclesL(RArray& aCycles) - { - TPckgBuf count; - User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetMemoryTrackingCycleCount, TIpcArgs(&count) )); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyMemoryTrackingCycleData)); - TPtr8 bufferPtr(buffer->Des()); - - TIpcArgs args( &count, &bufferPtr ); - User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetMemoryTrackingCycles, args )); - - aCycles.Reset(); - - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyMemoryTrackingCycleData)); - aCycles.AppendL(CMemSpyApiMemoryTrackingCycle::NewLC(data())); - } - - CleanupStack::Pop(aCycles.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C void RMemSpySession::OutputAllContainerContents() - { - SendReceive( EMemSpyClientServerOpOutputAllContainerContents ); - } - - -//Heap specific operations - -EXPORT_C CMemSpyApiHeap* RMemSpySession::GetHeapL() - { - CMemSpyApiHeap* aHeap; - - HBufC8* buffer = HBufC8::NewLC( sizeof(TMemSpyHeapData) ); - TPtr8 bufferPtr(buffer->Des()); - TIpcArgs args( &bufferPtr ); - - User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetHeap, args )); - - TPckgBuf data; - data.Copy(bufferPtr.Ptr(), sizeof(TMemSpyHeapData)); - aHeap = CMemSpyApiHeap::NewL( data() ); - - CleanupStack::PopAndDestroy(buffer); - - return aHeap; - } - -EXPORT_C CMemSpyApiHeap* RMemSpySession::GetHeap() - { - CMemSpyApiHeap *result = NULL; - TRAPD(error, result = GetHeapL()); - return error == KErrNone ? result : NULL; - } - - - -EXPORT_C void RMemSpySession::GetEComCategoriesL(RArray &aCategories) - { - TPckgBuf count; - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComCategoryCount, TIpcArgs(&count))); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyEComCategoryData)); - TPtr8 bufferPtr(buffer->Des()); - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComCategories, TIpcArgs(&count, &bufferPtr))); - aCategories.Reset(); - - TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEComCategoryData)); - aCategories.AppendL(CMemSpyApiEComCategory::NewLC(data())); - } - CleanupStack::Pop(aCategories.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C void RMemSpySession::GetEComInterfacesL(TUid aCategory, RArray &aInterfaces) - { - TPckgBuf count; - TPckgBuf category(aCategory); - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComInterfaceCount, TIpcArgs(&count, &category))); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyEComInterfaceData)); - TPtr8 bufferPtr(buffer->Des()); - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComInterfaces, TIpcArgs(&count, &category, &bufferPtr))); - aInterfaces.Reset(); - - TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEComInterfaceData)); - aInterfaces.AppendL(CMemSpyApiEComInterface::NewLC(data())); - } - CleanupStack::Pop(aInterfaces.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C void RMemSpySession::GetEComImplementationsL(TUid aInterface, RArray &aImplementations) - { - TPckgBuf count; - TPckgBuf interface(aInterface); - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComImplementationCount, TIpcArgs(&count, &interface))); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyEComImplementationData)); - TPtr8 bufferPtr(buffer->Des()); - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComImplementations, TIpcArgs(&count, &interface, &bufferPtr))); - aImplementations.Reset(); - - TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEComImplementationData)); - aImplementations.AppendL(CMemSpyApiEComImplementation::NewLC(data())); - } - CleanupStack::Pop(aImplementations.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C void RMemSpySession::DumpKernelHeap() - { - SendReceive( EMemSpyClientServerOpDumpKernelHeap ); - } - -EXPORT_C void RMemSpySession::OutputKernelHeapDataL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpHeapData | KMemSpyOpFlagsIncludesThreadId, - TIpcArgs(KMemSpyClientServerThreadIdKernel))); - - } - -EXPORT_C void RMemSpySession::OutputKernelHeapData(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpHeapData, - TIpcArgs(KMemSpyClientServerThreadIdKernel), - aStatus); - } - -EXPORT_C void RMemSpySession::OutputThreadHeapDataL( TThreadId aThreadId) - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpHeapData | KMemSpyOpFlagsIncludesThreadId, - TIpcArgs(aThreadId))); - } - -EXPORT_C void RMemSpySession::OutputThreadHeapDataL(const TDesC& aThreadName) - { - const TIpcArgs args( &aThreadName ); - - User::LeaveIfError( SendReceive( EMemSpyClientServerOpHeapData | KMemSpyOpFlagsIncludesThreadName, args )); - } - -EXPORT_C void RMemSpySession::OutputThreadCellListL(TThreadId aThreadId) - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpHeapCellListing | KMemSpyOpFlagsIncludesThreadId, - TIpcArgs(aThreadId))); - } - -EXPORT_C void RMemSpySession::OutputHeapInfoUserL(TThreadId aThreadId) - { - User::LeaveIfError(SendReceive( EMemSpyClientServerOpHeapInfo | KMemSpyOpFlagsIncludesThreadId, - TIpcArgs(aThreadId))); - } - -EXPORT_C void RMemSpySession::SwitchOutputSinkL( TMemSpySinkType aType ) - { - TInt op; - if( aType == ESinkTypeFile ) - op = EMemSpyClientServerOpSwitchOutputSinkFile; - else - op = EMemSpyClientServerOpSwitchOutputSinkTrace; - - User::LeaveIfError(SendReceive( op )); - } - -EXPORT_C void RMemSpySession::SwitchOutputToTraceL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSwitchOutputSinkTrace)); - } - -EXPORT_C void RMemSpySession::SwitchOutputToFileL(const TDesC& aRootFolder) - { - TIpcArgs args; - if (aRootFolder.Length()) - { - args.Set(0, &aRootFolder); - } - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSwitchOutputSinkFile, args)); - } - -EXPORT_C void RMemSpySession::OutputStackInfoL(TThreadId aThreadId) - { - User::LeaveIfError(SendReceive( EMemSpyClientServerOpStackInfo | KMemSpyOpFlagsIncludesThreadId, - TIpcArgs(aThreadId))); - } - -EXPORT_C void RMemSpySession::OutputStackDataL(TThreadId aThreadId, TMemSpyDriverDomainType aType ) - { - TInt op; - if( aType == EMemSpyDriverDomainUser ) - op = EMemSpyClientServerOpStackDataUser; - else - op = EMemSpyClientServerOpStackDataKernel; - - User::LeaveIfError(SendReceive( op | KMemSpyOpFlagsIncludesThreadId, - TIpcArgs(aThreadId, aType))); - - } - -EXPORT_C void RMemSpySession::OutputThreadInfoHandlesL(TThreadId aThreadId) - { - TPckgBuf id(aThreadId); - User::LeaveIfError(SendReceive(EMemSpyClientServerOpOutputInfoHandles, TIpcArgs( &id ))); - } - -EXPORT_C void RMemSpySession::OutputAOListL(TThreadId aId, TMemSpyThreadInfoItemType aType) - { - TPckgBuf id(aId); - TPckgBuf type(aType); - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpOutputAOList, TIpcArgs( &id, &type ))); - } - -EXPORT_C void RMemSpySession::OutputKernelObjectsL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpEnumerateKernelContainerAll)); - } - -EXPORT_C void RMemSpySession::OutputCompactStackInfoL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpStackInfoCompact)); - } - -EXPORT_C void RMemSpySession::OutputCompactHeapInfoL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpHeapInfoCompact)); - } -// Asynchronous operations -EXPORT_C void RMemSpySession::OutputPhoneInfo(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpSummaryInfo | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -EXPORT_C void RMemSpySession::OutputDetailedPhoneInfo(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpSummaryInfoDetailed | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -EXPORT_C void RMemSpySession::OutputHeapInfo(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpHeapInfo | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -EXPORT_C void RMemSpySession::OutputCompactHeapInfo(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpHeapInfoCompact | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -EXPORT_C void RMemSpySession::OutputHeapCellListing(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpHeapCellListing | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -EXPORT_C void RMemSpySession::OutputHeapData(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpHeapData | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -// synchronous version of the operation - for CLI -EXPORT_C void RMemSpySession::OutputHeapData() - { - SendReceive(EMemSpyClientServerOpHeapData); - } - -EXPORT_C void RMemSpySession::OutputStackInfo(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpStackInfo | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -EXPORT_C void RMemSpySession::OutputCompactStackInfo(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpStackInfoCompact | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -EXPORT_C void RMemSpySession::OutputUserStackData(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpStackDataUser | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -EXPORT_C void RMemSpySession::OutputKernelStackData(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpStackDataKernel | KMemSpyOpFlagsAsyncOperation, TIpcArgs(), aStatus); - } - -// Synchronous operations -EXPORT_C void RMemSpySession::OutputPhoneInfo() - { - SendReceive( EMemSpyClientServerOpSummaryInfo , TIpcArgs() ); - } - -EXPORT_C TInt RMemSpySession::GetSwmtCyclesCount() - { - TPckgBuf count; - TIpcArgs args( &count ); - - User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetMemoryTrackingCycleCount, args )); - - return count(); - } - -EXPORT_C void RMemSpySession::SetSwmtAutoStartProcessList( CArrayFixFlat* aList ) - { - TInt count = aList->Count(); - TIpcArgs args( &aList, &count ); - - SendReceive( EMemSpyClientServerOpSetSwmtAutoStartProcessList, args ); - } - -EXPORT_C void RMemSpySession::SwmtResetTracking() - { - SendReceive( EMemSpyClientServerOpSystemWideMemoryTrackingReset ); - } - -EXPORT_C void RMemSpySession::GetOutputSink( TMemSpySinkType& aType ) - { - TPckgBuf type( aType ); - TIpcArgs args( &type ); - - SendReceive( EMemSpyClientServerOpGetOutputSink, args ); - - aType = type(); - } - -EXPORT_C void RMemSpySession::NotifyDeviceWideOperationProgress(TMemSpyDeviceWideOperationProgress &aProgress, TRequestStatus &aStatus) - { - SendReceive(EMemSpyClientServerOpNotifyDeviceWideOperationProgress | KMemSpyOpFlagsAsyncOperation, - TIpcArgs(&aProgress.iProgress, &aProgress.iDescription), - aStatus); - } - -EXPORT_C void RMemSpySession::CancelDeviceWideOperationL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpCancelDeviceWideOperation)); - } - -// SWMT operations -EXPORT_C void RMemSpySession::SetSwmtCategoriesL(TInt aCategories) - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingCategoriesSet, - TIpcArgs(aCategories))); - } - -EXPORT_C void RMemSpySession::SetSwmtHeapDumpsEnabledL(TBool aEnabled) - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingHeapDumpSet, - TIpcArgs(aEnabled))); - } - -EXPORT_C void RMemSpySession::SetSwmtMode(TMemSpyEngineHelperSysMemTrackerConfig::TMemSpyEngineSysMemTrackerMode aMode) - { - TPckgBuf mode( aMode ); - TIpcArgs args(&mode); - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingModeSet, args)); - } - -EXPORT_C TBool RMemSpySession::IsSwmtRunningL() - { - TPckgBuf ret; - User::LeaveIfError(SendReceive(EMemSpyClientServerOpIsSwmtRunning, TIpcArgs(&ret))); - - return ret(); - } - -EXPORT_C void RMemSpySession::StartSwmtTimerL(TInt aPeriod) - { - SetSwmtTimerIntervalL(aPeriod); - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingTimerStart)); - } - -EXPORT_C void RMemSpySession::StartSwmtTimerL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingTimerStart)); - } - -EXPORT_C void RMemSpySession::SetSwmtTimerIntervalL(TInt aPeriod) - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingTimerPeriodSet, - TIpcArgs(aPeriod))); - } - -EXPORT_C void RMemSpySession::StopSwmtTimerL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingTimerStop)); - } - - -EXPORT_C void RMemSpySession::ForceSwmtUpdateL() - { - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingForceUpdate)); - } - -EXPORT_C void RMemSpySession::ForceSwmtUpdate(TRequestStatus& aStatus) - { - SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingForceUpdate, - TIpcArgs(), - aStatus); - } - -EXPORT_C void RMemSpySession::SetSwmtFilter( const TDesC& aFilter ) - { - TIpcArgs args( &aFilter ); - User::LeaveIfError( SendReceive( EMemSpyClientServerOpSystemWideMemoryTrackingThreadNameFilterSet, args ) ); - } - -EXPORT_C void RMemSpySession::GetSwmtFilter( TName& aFilter ) - { - TPckgBuf name; - TIpcArgs args( &name ); - User::LeaveIfError( SendReceive( EMemSpyClientServerOpSystemWideMemoryTrackingThreadNameFilterGet, args ) ); - aFilter = name(); - } - -EXPORT_C void RMemSpySession::GetSwmtCategoriesL(TInt& aCategories) - { - TPckgBuf cat; - TIpcArgs args( &cat ); - User::LeaveIfError( SendReceive( EMemSpyClientServerOpSystemWideMemoryTrackingCategoriesGet, args ) ); - aCategories = cat(); - } - -EXPORT_C void RMemSpySession::GetSwmtHeapDumpsEnabledL(TBool& aEnabled) - { - TPckgBuf enabled; - TIpcArgs args( &enabled ); - User::LeaveIfError( SendReceive( EMemSpyClientServerOpSystemWideMemoryTrackingHeapDumpGet, args ) ); - - aEnabled = enabled(); - } - -EXPORT_C void RMemSpySession::GetSwmtMode(TMemSpyEngineHelperSysMemTrackerConfig::TMemSpyEngineSysMemTrackerMode& aMode) - { - TPckgBuf mode; - TIpcArgs args( &mode ); - User::LeaveIfError( SendReceive( EMemSpyClientServerOpSystemWideMemoryTrackingModeGet, args ) ); - aMode = mode(); - } - -EXPORT_C void RMemSpySession::GetSwmtTimerIntervalL(TInt& aPeriod) - { - TPckgBuf time; - TIpcArgs args( &time ); - User::LeaveIfError(SendReceive(EMemSpyClientServerOpSystemWideMemoryTrackingTimerPeriodGet, - args)); - aPeriod = time(); - } - -EXPORT_C TInt TMemSpyDeviceWideOperationProgress::Progress() const - { - return iProgress(); - } - -EXPORT_C const TDesC& TMemSpyDeviceWideOperationProgress::Description() const - { - return iDescription; - } - -// Servers -EXPORT_C void RMemSpySession::GetServersL(RArray &aServers) - { - TPckgBuf count; - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetServerCount, TIpcArgs(&count))); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyServerData)); - TPtr8 bufferPtr(buffer->Des()); - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetServers, TIpcArgs(&count, &bufferPtr))); - aServers.Reset(); - - TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyServerData)); - aServers.AppendL(CMemSpyApiServer::NewLC(data())); - } - CleanupStack::Pop(aServers.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C void RMemSpySession::GetServersL(RArray &aServers, TSortType aSortType) - { - TPckgBuf count; - TPckgBuf sort( aSortType ); - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetServerCount, TIpcArgs(&count))); - - TInt requestedCount = count(); - HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyServerData)); - TPtr8 bufferPtr(buffer->Des()); - - User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetSortedServers, TIpcArgs(&count, &bufferPtr, &sort))); - aServers.Reset(); - - TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; - data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyServerData)); - aServers.AppendL(CMemSpyApiServer::NewLC(data())); - } - CleanupStack::Pop(aServers.Count()); - CleanupStack::PopAndDestroy(buffer); - } - -EXPORT_C void RMemSpySession::ServerListOutputGenericL( TBool aDetailed ) - { - TPckgBuf detailed( aDetailed ); - TIpcArgs args( &detailed ); - User::LeaveIfError( SendReceive( EMemSpyClientServerOpServerListOutputGeneric, args ) ); - } -