graphicshwdrivers/surfacemgr/test/inc/tsurfacemanagermultithread.h
author Faisal Memon <faisal.memon@nokia.com>
Fri, 13 Aug 2010 15:24:50 +0100
branchbug235_bringup_0
changeset 147 af143508cc47
parent 0 5d03bc08d59c
permissions -rwxr-xr-x
Prune down surface manager. Interface bit moved to surfacemanager_api. Implementation bit moved to graphics.nokia

// 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