graphicshwdrivers/surfacemgr/test/inc/tsurfacemanagermultithread.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicshwdrivers/surfacemgr/test/inc/tsurfacemanagermultithread.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,162 @@
+// 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#if !defined(__TSURFACEMANAGERMULTITHREAD_H__)
+#define __TSURFACEMANAGERMULTITHREAD_H__
+
+#include <test/tgraphicsharness.h>
+#include <graphics/surface.h>
+#include <graphics/surfacemanager.h>
+#include "tsmgmultprocessshared.h"
+
+/**
+Enums for passing between the multi-threads within the testing process, 
+used to define which tests should be run on the sides of other threads.
+*/
+enum TThreadTestCase
+	{
+	ECreateSurfaceMapInfo,
+	ECreateSurfaceClose,
+	EOpenCloseSurface,
+	EOpenKillSurface,
+	ECreateKillSurface,
+	EOpenCloseSurfaceMultiThread,
+	EOpenMapSurfaceInfoMultiThread,
+	EMapSurfaceInfo,
+	ECloseSurfaces,
+	EOpenCloseMapSurfaceInfoMultiThread,
+	EOpenCloseOpenMultiThread,
+	ECloseBothSurfaces,
+	ENoTestCase
+	};
+	
+/**
+Enums for single test results e.g. OpenSurface
+*/	
+enum TSingleTestResult
+	{
+	EAllZero = 0x00000000,
+	EOpenSurfaceTestPassed = 0x00000001,
+	ECloseSurfaceTestPassed = 0x00000010,
+	EMapSurfaceTestPassed = 0x00000100,
+	ESurfaceInfoTestPassed = 0x00001000,
+	ESurfaceInfoTestPassed2 = 0x00004000,
+	ECreateSurfaceTestPassed = 0x00010000,
+	EOpenSurfaceTestFailed = 0x00000002,
+	ECloseSurfaceTestFailed = 0x00000020,
+	EMapSurfaceTestFailed = 0x00000200,
+	ESurfaceInfoTestFailed = 0x00002000,
+	ESurfaceInfoTestFailed2 = 0x00008000,
+	ECreateSurfaceTestFailed = 0x00020000,
+	};
+
+_LIT(KTSurfaceManagerMultiThreadStep,"TSurfaceManagerMultiThread");
+
+
+/**
+A class to wrap up the execution in the other threads
+*/
+class CChildThreadWrapper : public CBase
+	{
+public:
+	CChildThreadWrapper(TAny* aInfo);
+	CChildThreadWrapper();
+	~CChildThreadWrapper();
+	void CreateSurfaceThread();
+	void MapSurfaceInfo();
+	void CloseSurface();
+	void OpenSurface();
+	void CloseBothSurfaces();
+public:
+	RSurfaceManager& iSurfaceManager;
+	TSurfaceId& iSurfaceId;
+	TSurfaceId iSurfaceIdNew;
+	TThreadTestCase iThreadTestCase;
+	};
+class CTSurfaceManagerMultiThread : public CTGraphicsBase
+	{
+public:
+	CTSurfaceManagerMultiThread(CTestStep* aStep);
+	~CTSurfaceManagerMultiThread();
+	
+	friend class CChildThreadWrapper;
+protected:
+//from 	CTGraphicsStep
+	virtual void RunTestCaseL(TInt aCurTestCase);
+private:
+	void TestAccessSurfaceWithoutOpeningL();
+	void TestCloseSurfaceWithoutOpeningL();
+	void TestAccessSurfaceClosedThreadL();
+	void TestCloseSurfaceClosedThreadL();
+	void TestAccessSurfaceOpenedClosedThreadL();
+	void TestCloseSurfaceOpenedClosedThreadL();
+	void TestAccessSurfaceOpenedKilledThreadL();
+	void TestCloseSurfaceOpenedKilledThreadL();
+	void TestAccessSurfaceCreateKilledThreadL();
+	void TestCloseSurfaceCreateKilledThreadL();
+	void TestAccessSurfaceThreeThreadsL();
+	void TestAccessSurfaceDieCloseOtherThreadsL();
+	void TestOpenSurfaceDieCloseOtherThreadsL();
+	void TestAccessSurfaceInExistingSharedChunkL();
+	void TestCloseSurfaceExistingSharedChunkL();
+	
+	static void CloseSurfaceWhenLeave(TAny* aSurfaceId) ;
+public:
+/**
+Information to be passed into the rendering threads
+*/
+struct TInfo
+	{
+	RSurfaceManager iSurfaceManager;
+	TSurfaceId iSurfaceId;
+	TSurfaceId iSurfaceIdNew;
+	TThreadTestCase iThreadTestCase;
+	};
+	
+	static TInt ThreadSecondStart(TAny* aInfo);
+	static TInt ThreadThirdStart(TAny* aInfo);
+
+private:
+	RSurfaceManager iSurfaceManager;
+	TSurfaceId iSurfaceId;
+	TSurfaceId iSurfaceIdNew;
+	TInfo iInfo;
+	TInfo iInfo2;
+	
+	};
+
+	
+class CTSurfaceManagerMultiThreadStep : public CTGraphicsStep
+	{
+public:
+	CTSurfaceManagerMultiThreadStep();
+protected:	
+	//from CTGraphicsStep
+	virtual CTGraphicsBase* CreateTestL();
+	virtual void TestSetupL();
+	virtual void TestClose();
+	};
+
+
+_LIT(KMultiThreadSemaphore, "Multi Thread Semaphore");
+_LIT(KMainThreadSemaphore, "Main Thread Semaphore");
+
+#endif