graphicshwdrivers/surfacemgr/test/inc/tsmgmultprocessshared.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicshwdrivers/surfacemgr/test/inc/tsmgmultprocessshared.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,153 @@
+// Copyright (c) 2007-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:
+// surface manager API
+// 
+//
+
+#ifndef __SHARED_H__
+#define __SHARED_H__
+
+#include <e32base.h>
+#include <e32cmn.h>
+#include <graphics/surface.h>
+#include <graphics/surfacemanager.h>
+#include <test/tgraphicsharness.h>
+
+struct TLeaveInfo
+	{
+	RSurfaceManager iSurfaceManager;
+	TSurfaceId iSurfaceId;
+	};
+
+static void CloseSurfaceWhenLeave(TAny* aInfo)
+	{
+	TInt err = ((TLeaveInfo*)aInfo)->iSurfaceManager.CloseSurface(((TLeaveInfo*)aInfo)->iSurfaceId);
+	if (err != KErrNone)
+		RDebug::Print(_L("Error closing surface = %d\n"),err);	
+	};
+ 
+
+/**
+Enum for the slots for inter-process communication
+*/
+enum TIPCSlot
+	{
+	EMultiProcessFirstSlot = 0,
+	EMultiProcessSecondSlot,
+	EMultiProcessThirdSlot,
+	EMultiProcessFourthSlot,
+	};
+
+/**
+Enums for passing between the test process and the second process used in testing,
+used to define which test should be run on the side of the second process.
+*/
+enum TMultiProcessTestCase
+	{
+	// Second process opcodes
+	ETestOpenReceivedSurface,
+	ETestInfoReceivedSurface,
+	ETestOpenSurfaceInvalidParams,
+	ECreateWaitKill,
+	EOpenClose,
+	EMapSurfaceInfoCantAccess,
+	EOpenWaitMap,
+	EReadFromBuffer,
+	ECheckHandle,
+	ESyncOperation,
+	ETestChannelMultiProcess1,
+	ETestChannelMultiProcess2,
+	EGetSurfaceHint,
+	ESetSurfaceHint,
+	EAddSurfaceHint,
+	ECheckOutofMemory,
+	// Third process opcodes
+	ECloseSurface = 0x00010000,
+	EOpenWaitCloseOpen,
+	EOpenSurface,
+	ESurfaceInfo
+	};
+
+/**
+Enums for panics between my testing process and my second process
+*/
+enum TCrossProcessPanics
+	{
+	EInvalidTestCase,
+	};
+
+/**
+Enums for the test results
+*/
+enum TTestResult
+	{
+	EFirstTestPassed = 0x00000001,
+	ESecondTestPassed = 0x00000002,
+	EThirdTestPassed = 0x00000004,
+	EFourthTestPassed = 0x00000008,
+	EFifthTestPassed = 0x00000010,
+	ESixthTestPassed = 0x00000020,
+	ESeventhTestPassed = 0x00000040,
+	EEighthTestPassed = 0x00000080,
+	ENinthTestPassed = 0x00000100,
+	ETenthTestPassed = 0x00000200,
+	};
+
+_LIT(KMultiProcessSemaphore, "Multi Process Semaphore");
+_LIT(KMultiProcessSemaphore2, "Multi Process Semaphore 2");
+_LIT(KMultiProcessSemaphore3, "Multi Process Semaphore 3");
+_LIT(KMultiProcessSemaphore4, "Multi Process Semaphore 4");
+_LIT(KSharedChunkName, "Surfaces test shared chunk");
+
+
+const TInt KSharedChunkSize = ((4 * sizeof(TUint32)) + (2 * sizeof(TInt)));
+	
+/**
+Wraps a shared chunk for communication between the processes
+*/
+class CChunkWrapper : public CBase
+	{
+public:
+	~CChunkWrapper();
+	static CChunkWrapper* CreateL(const TDesC& aName, TInt aSize, TInt aMaxSize);
+	void CreateConstructL(const TDesC& aName, TInt aSize, TInt aMaxSize);
+	static CChunkWrapper* OpenL(const TDesC& aName, TBool aIsReadOnly);
+	void OpenConstructL(const TDesC& aName, TBool aIsReadOnly);
+	void SetSecondProcessResults(TInt aResult);
+	TInt GetSecondProcessResults();
+	void SetThirdProcessResults(TInt aResult);
+	TInt GetThirdProcessResults();
+	void SetId(const TSurfaceId& aId);
+	TSurfaceId GetId();
+	void CloseD();
+private:	
+	CChunkWrapper();
+private:
+	RChunk iChunk;
+	};
+
+
+class CTestDriver : public CBase
+	{
+public:
+	CTestDriver();
+	virtual ~CTestDriver();
+	void ConstructL();
+protected:
+	RSurfaceManager iSurfaceManager;
+	CChunkWrapper* iChunkWrapper;
+	TInt iTestResult;
+	};
+
+#endif