perfsrv/memspy/MemSpyClient/src/memspysession.cpp
changeset 55 f2950aff7424
parent 48 516af714ebb4
child 54 a151135b0cf9
--- a/perfsrv/memspy/MemSpyClient/src/memspysession.cpp	Fri Sep 17 08:38:31 2010 +0300
+++ b/perfsrv/memspy/MemSpyClient/src/memspysession.cpp	Mon Oct 04 02:45:59 2010 +0300
@@ -31,6 +31,8 @@
 #include <memspy/engine/memspyserverdata.h>
 // ECom
 #include <memspy/engine/memspyecomdata.h>
+// Window groups
+#include <memspy/engine/memspyenginehelperwindowserver.h>
 
 // IMPLEMENTATION
 
@@ -504,6 +506,29 @@
     CleanupStack::PopAndDestroy(buffer);
     }
 
+EXPORT_C void RMemSpySession::GetWindowGroupsL(RArray<CMemSpyApiWindowGroup*> &aGroups)
+    {
+    TPckgBuf<TInt> count;
+    User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetWindowGroupCount, TIpcArgs(&count)));
+    
+    TInt requestedCount = count();
+    HBufC8* buffer = HBufC8::NewLC(requestedCount * sizeof(TMemSpyEngineWindowGroupDetails));
+    TPtr8 bufferPtr(buffer->Des());
+    
+    User::LeaveIfError(SendReceive(EMemSpyClientServerOpGetWindowGroups, TIpcArgs(&count, &bufferPtr)));
+    aGroups.Reset();
+    
+    TInt receivedCount = Min(count(), requestedCount);
+    for(TInt i=0, offset = 0; i<requestedCount; i++, offset+=sizeof(TMemSpyEngineWindowGroupDetails))
+        {
+        TPckgBuf<TMemSpyEngineWindowGroupDetails> data;
+        data.Copy(bufferPtr.Ptr()+offset, sizeof(TMemSpyEngineWindowGroupDetails));
+        aGroups.AppendL(CMemSpyApiWindowGroup::NewLC(data()));
+        }
+    CleanupStack::Pop(aGroups.Count());
+    CleanupStack::PopAndDestroy(buffer);
+    }
+
 EXPORT_C void RMemSpySession::DumpKernelHeap()
 	{
 	SendReceive( EMemSpyClientServerOpDumpKernelHeap );