perfsrv/memspy/MemSpyClient/src/memspysession.cpp
changeset 62 1c2bb2fc7c87
parent 54 a151135b0cf9
--- 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 <memspy/engine/memspyecomdata.h>
 // Window groups
 #include <memspy/engine/memspyenginehelperwindowserver.h>
+// Chunks
+#include <memspy/engine/memspychunkdata.h>
+// Code Segments
+#include <memspy/engine/memspycodesegmentdata.h>
 
 // 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<requestedCount; i++, offset+=sizeof(TMemSpyProcessData))
+	for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyProcessData))
 		{
 		TPckgBuf<TMemSpyProcessData> 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<TProcessId> arg1( aId );
 	TPckgBuf<TBool> 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<TProcessId> 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<requestedCount; i++, offset+=sizeof(TMemSpyThreadData))
+	for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyThreadData))
 		{
 		TPckgBuf<TMemSpyThreadData> 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<requestedCount; i++, offset+=sizeof(TMemSpyKernelObjectData))
+	TInt receivedCount = Min(count(), requestedCount);
+
+	for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyKernelObjectData))
 		{
 		TPckgBuf<TMemSpyKernelObjectData> 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<requestedCount; i++, offset+=sizeof(TMemSpyDriverHandleInfoGeneric))
+	for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyDriverHandleInfoGeneric))
 		{
 		TPckgBuf<TMemSpyDriverHandleInfoGeneric> 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<requestedCount; i++, offset+=sizeof(TMemSpyMemoryTrackingCycleData))
+	TInt receivedCount = Min(count(), requestedCount);
+
+	for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyMemoryTrackingCycleData))
 		{
 		TPckgBuf<TMemSpyMemoryTrackingCycleData> 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<TMemSpyHeapData> 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<requestedCount; i++, offset+=sizeof(TMemSpyEComCategoryData))
+    for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyEComCategoryData))
         {
         TPckgBuf<TMemSpyEComCategoryData> 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<requestedCount; i++, offset+=sizeof(TMemSpyEComInterfaceData))
+    for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyEComInterfaceData))
         {
         TPckgBuf<TMemSpyEComInterfaceData> 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<requestedCount; i++, offset+=sizeof(TMemSpyEComImplementationData))
+    for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyEComImplementationData))
         {
         TPckgBuf<TMemSpyEComImplementationData> 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<requestedCount; i++, offset+=sizeof(TMemSpyEngineWindowGroupDetails))
+    for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyEngineWindowGroupDetails))
         {
         TPckgBuf<TMemSpyEngineWindowGroupDetails> data;
         data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEngineWindowGroupDetails));
@@ -529,6 +557,13 @@
     CleanupStack::PopAndDestroy(buffer);
     }
 
+EXPORT_C void RMemSpySession::SwitchToWindowGroupL( TInt aId )
+	{
+    TPckgBuf<TInt> 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<requestedCount; i++, offset+=sizeof(TMemSpyServerData))
+	for(TInt i=0, offset = 0; i<receivedCount; i++, offset+=sizeof(TMemSpyServerData))
 		{
 		TPckgBuf<TMemSpyServerData> data;
 		data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyServerData));
@@ -937,3 +977,88 @@
 	User::LeaveIfError( SendReceive( EMemSpyClientServerOpServerListOutputGeneric, args ) );
 	}
 
+// Chunks
+
+EXPORT_C void RMemSpySession::GetChunksL(RArray<CMemSpyApiChunk*> &aChunks, TSortType aSortType)
+    {
+    TPckgBuf<TInt> count;
+    TPckgBuf<TSortType> 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<receivedCount; i++, offset+=sizeof(TMemSpyChunkData))
+        {
+        TPckgBuf<TMemSpyChunkData> 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<TBool> arg( aValue );
+	TIpcArgs args( &arg );
+			
+	User::LeaveIfError(SendReceive( EMemSpyClientServerOpIsAknIconCacheConfigurable, args ));
+		
+	aValue = arg();
+	}
+
+EXPORT_C void RMemSpySession::SetAknIconCacheStatusL( TBool aEnabled, TInt64& aValue )
+	{
+	TPckgBuf<TBool> arg1( aEnabled );
+	TPckgBuf<TInt64> arg2( aValue );
+	TIpcArgs args( &arg1, &arg2 );
+	
+	User::LeaveIfError(SendReceive( EMemSpyClientServerOpSetAknIconCacheStatus, args ));
+	
+	aValue=arg2();
+	}
+
+// Code Segments
+EXPORT_C void RMemSpySession::GetCodeSegmentsL(RArray<CMemSpyApiCodeSegment*> &aCodeSegments, TSortType aSortType)
+	{
+    TPckgBuf<TInt> count;
+    TPckgBuf<TSortType> 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<receivedCount; i++, offset+=sizeof(TMemSpyCodeSegmentData))
+        {
+        TPckgBuf<TMemSpyCodeSegmentData> 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));
+	}
+