graphicshwdrivers/surfacemgr/test/inc/tsmgmultprocessshared.h
author Matt Plumtree <matt.plumtree@nokia.com>
Fri, 06 Aug 2010 17:05:20 +0100
branchNewGraphicsArchitecture
changeset 143 3db46cb3f779
parent 0 5d03bc08d59c
permissions -rw-r--r--
Fix TRANSPARENCY_NONE composition for surfaces narrower than the context. Improve performance of point sample scaling with 8-bit samples, by using fixed point code Allow any non-zero value for the boolean attribute WFC_ELEMENT_SOURCE_FLIP Simplify RemoveElement code

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