diff -r aa2539c91954 -r 1c2bb2fc7c87 perfsrv/memspy/MemSpyClient/src/memspysession.cpp --- a/perfsrv/memspy/MemSpyClient/src/memspysession.cpp Fri Oct 08 14:56:39 2010 +0300 +++ b/perfsrv/memspy/MemSpyClient/src/memspysession.cpp Tue Oct 26 16:20:32 2010 +0300 @@ -33,6 +33,10 @@ #include // Window groups #include +// Chunks +#include +// Code Segments +#include // IMPLEMENTATION @@ -110,6 +114,7 @@ User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetProcessCount, TIpcArgs(&count))); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyProcessData)); TPtr8 bufferPtr(buffer->Des()); @@ -117,7 +122,7 @@ aProcesses.Reset(); TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyProcessData)); @@ -136,7 +141,7 @@ return procId(); } -EXPORT_C TInt RMemSpySession::ProcessSystemPermanentOrCritical( TProcessId aId, TBool aValue ) +EXPORT_C TInt RMemSpySession::ProcessSystemPermanentOrCritical( TProcessId aId, TBool& aValue ) { TPckgBuf arg1( aId ); TPckgBuf arg2( aValue ); @@ -149,6 +154,17 @@ return error; } +EXPORT_C void RMemSpySession::NotifyEvent(TRequestStatus &aStatus) + { + SendReceive(EMemSpyClientServerOpNotifyEvent | KMemSpyOpFlagsAsyncOperation, + TIpcArgs(), aStatus); + } + +EXPORT_C void RMemSpySession::CancelEventNotificationL() + { + User::LeaveIfError(SendReceive(EMemSpyClientServerOpCancelEventNotification)); + } + EXPORT_C TInt RMemSpySession::EndProcessL( TProcessId aId, TMemSpyEndType aType ) { TPckgBuf arg1( aId ); @@ -179,6 +195,7 @@ User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetThreadCount, TIpcArgs(&count, &pid))); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyThreadData)); TPtr8 bufferPtr(buffer->Des()); @@ -186,7 +203,7 @@ aThreads.Reset(); TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyThreadData)); @@ -318,6 +335,7 @@ User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetKernelObjectCount, TIpcArgs(&count) )); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyKernelObjectData)); TPtr8 bufferPtr(buffer->Des()); @@ -326,7 +344,9 @@ aKernelObjects.Reset(); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyKernelObjectData)); @@ -350,6 +370,7 @@ User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetKernelObjectItemCount, TIpcArgs(&count, &type) )); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyDriverHandleInfoGeneric)); TPtr8 bufferPtr(buffer->Des()); @@ -357,8 +378,10 @@ User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetKernelObjectItems, args )); aKernelObjectItems.Reset(); + + TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyDriverHandleInfoGeneric)); @@ -380,6 +403,7 @@ User::LeaveIfError(SendReceive( EMemSpyClientServerOpGetMemoryTrackingCycleCount, TIpcArgs(&count) )); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyMemoryTrackingCycleData)); TPtr8 bufferPtr(buffer->Des()); @@ -388,7 +412,9 @@ aCycles.Reset(); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyMemoryTrackingCycleData)); @@ -408,9 +434,7 @@ //Heap specific operations EXPORT_C CMemSpyApiHeap* RMemSpySession::GetHeapL() - { - CMemSpyApiHeap* aHeap; - + { HBufC8* buffer = HBufC8::NewLC( sizeof(TMemSpyHeapData) ); TPtr8 bufferPtr(buffer->Des()); TIpcArgs args( &bufferPtr ); @@ -419,11 +443,11 @@ TPckgBuf data; data.Copy(bufferPtr.Ptr(), sizeof(TMemSpyHeapData)); - aHeap = CMemSpyApiHeap::NewL( data() ); + CMemSpyApiHeap* heap = CMemSpyApiHeap::NewL( data() ); CleanupStack::PopAndDestroy(buffer); - return aHeap; + return heap; } EXPORT_C CMemSpyApiHeap* RMemSpySession::GetHeap() @@ -441,6 +465,7 @@ User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComCategoryCount, TIpcArgs(&count))); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyEComCategoryData)); TPtr8 bufferPtr(buffer->Des()); @@ -448,7 +473,7 @@ aCategories.Reset(); TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEComCategoryData)); @@ -465,6 +490,7 @@ User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComInterfaceCount, TIpcArgs(&count, &category))); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyEComInterfaceData)); TPtr8 bufferPtr(buffer->Des()); @@ -472,7 +498,7 @@ aInterfaces.Reset(); TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEComInterfaceData)); @@ -489,6 +515,7 @@ User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetEComImplementationCount, TIpcArgs(&count, &interface))); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyEComImplementationData)); TPtr8 bufferPtr(buffer->Des()); @@ -496,7 +523,7 @@ aImplementations.Reset(); TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEComImplementationData)); @@ -512,6 +539,7 @@ User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetWindowGroupCount, TIpcArgs(&count))); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyEngineWindowGroupDetails)); TPtr8 bufferPtr(buffer->Des()); @@ -519,7 +547,7 @@ aGroups.Reset(); TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEngineWindowGroupDetails)); @@ -529,6 +557,13 @@ CleanupStack::PopAndDestroy(buffer); } +EXPORT_C void RMemSpySession::SwitchToWindowGroupL( TInt aId ) + { + TPckgBuf id( aId ); + TIpcArgs args(&id); + User::LeaveIfError(SendReceive(EMemSpyClientServerOpSwitchToWindowGroup, args)); + } + EXPORT_C void RMemSpySession::DumpKernelHeap() { SendReceive( EMemSpyClientServerOpDumpKernelHeap ); @@ -889,6 +924,10 @@ User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetServerCount, TIpcArgs(&count))); TInt requestedCount = count(); + + if( requestedCount < 0 ) + requestedCount = 0; + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyServerData)); TPtr8 bufferPtr(buffer->Des()); @@ -913,6 +952,7 @@ User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetServerCount, TIpcArgs(&count))); TInt requestedCount = count(); + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyServerData)); TPtr8 bufferPtr(buffer->Des()); @@ -920,7 +960,7 @@ aServers.Reset(); TInt receivedCount = Min(count(), requestedCount); - for(TInt i=0, offset = 0; i data; data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyServerData)); @@ -937,3 +977,88 @@ User::LeaveIfError( SendReceive( EMemSpyClientServerOpServerListOutputGeneric, args ) ); } +// Chunks + +EXPORT_C void RMemSpySession::GetChunksL(RArray &aChunks, TSortType aSortType) + { + TPckgBuf count; + TPckgBuf sort( aSortType ); + User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetChunksCount, TIpcArgs(&count))); + + TInt requestedCount = count(); + + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyChunkData)); + TPtr8 bufferPtr(buffer->Des()); + + User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetSortedChunks, TIpcArgs(&count, &bufferPtr, &sort))); + aChunks.Reset(); + + TInt receivedCount = Min(count(), requestedCount); + for(TInt i=0, offset = 0; i data; + data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyChunkData)); + aChunks.AppendL(CMemSpyApiChunk::NewLC(data())); + } + CleanupStack::Pop(aChunks.Count()); + CleanupStack::PopAndDestroy(buffer); + } + +EXPORT_C void RMemSpySession::ChunkListOutputL() + { + User::LeaveIfError(SendReceive(EMemSpyClientServerOpChunkListOutput)); + } + +// RAM info +EXPORT_C void RMemSpySession::IsAknIconCacheConfigurable( TBool& aValue ) + { + TPckgBuf arg( aValue ); + TIpcArgs args( &arg ); + + User::LeaveIfError(SendReceive( EMemSpyClientServerOpIsAknIconCacheConfigurable, args )); + + aValue = arg(); + } + +EXPORT_C void RMemSpySession::SetAknIconCacheStatusL( TBool aEnabled, TInt64& aValue ) + { + TPckgBuf arg1( aEnabled ); + TPckgBuf arg2( aValue ); + TIpcArgs args( &arg1, &arg2 ); + + User::LeaveIfError(SendReceive( EMemSpyClientServerOpSetAknIconCacheStatus, args )); + + aValue=arg2(); + } + +// Code Segments +EXPORT_C void RMemSpySession::GetCodeSegmentsL(RArray &aCodeSegments, TSortType aSortType) + { + TPckgBuf count; + TPckgBuf sort( aSortType ); + User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetCodeSegmentsCount, TIpcArgs(&count))); + + TInt requestedCount = count(); + + HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyCodeSegmentData)); + TPtr8 bufferPtr(buffer->Des()); + + User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetSortedCodeSegments, TIpcArgs(&count, &bufferPtr, &sort))); + aCodeSegments.Reset(); + + TInt receivedCount = Min(count(), requestedCount); + for(TInt i=0, offset = 0; i data; + data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyCodeSegmentData)); + aCodeSegments.AppendL(CMemSpyApiCodeSegment::NewLC(data())); + } + CleanupStack::Pop(aCodeSegments.Count()); + CleanupStack::PopAndDestroy(buffer); + } + +EXPORT_C void RMemSpySession::CodeSegmentsListOutputL() + { + User::LeaveIfError(SendReceive(EMemSpyClientServerOpCodeSegmentsOutput)); + } +