kerneltest/e32test/mmu/t_shbuf_perfserver.h
author Tom Cosgrove <tom.cosgrove@nokia.com>
Fri, 28 May 2010 16:29:07 +0100
changeset 137 8aab599e3476
parent 0 a41df078684a
permissions -rw-r--r--
Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h) Have multiple extension sections in the bld.inf, one for each version of the compiler. The RVCT version building the tools will build the runtime libraries for its version, but make sure we extract all the other versions from zip archives. Also add the archive for RVCT4.

// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "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:
// e32test/mmu/t_shbuf_perfserver.h
//
//

#ifndef _T_SHBUF_PERFSERVER_H_
#define _T_SHBUF_PERFSERVER_H_

/**
 *  @file
 * 
 *  Test server used for Performance Testing of shared buffers.
 */

#include <e32base.h>
#include <e32shbuf.h>

#include "d_shbuf.h"

class RShBuf;

/**
 *  Name of the server. The '!' means it is a protected server.
 */
_LIT(KRShBufTestServerName, "!RShBufServer");


/**
 *  Server IPC requests.
 */
enum TShBufServerRequest
	{
	EShBufServerSendBuffer,
	EShBufServerReceiveBuffer,
	EShBufServerSendAndReceiveBuffer,
	EShBufServerSendSharedBuffer,
	EShBufServerReceiveSharedBuffer,
	EShBufServerSendAndReceiveSharedBuffer,
	EShBufServerShutdownServer,
	EShBufServerFromTPtr8ProcessAndReturn,
	EShBufServerFromTPtr8ProcessAndRelease,
	EShBufServerOpenRShBufPool,
	EShBufServerCloseRShBufPool,
	EShBufServerFromRShBufProcessAndReturn,
	EShBufServerFromRShBufProcessAndRelease,
	EShBufServerDbgMarkHeap,
	EShBufServerDbgCheckHeap,
	EShBufServerDbgMarkEnd,
	EShBufServerDbgFailNext
	};


class CShBufTestServerSession;


/**
 *  The RShBuf test server class.
 *
 *  The class provides all the services required by class CShBufTestServerSession.
 */
class CShBufTestServer : public CServer2
	{
public:
	static CShBufTestServer* NewL();

	void AddSessionL(CShBufTestServerSession* aSession);
	void DropSession(CShBufTestServerSession* aSession);

	TInt FromTPtr8ProcessAndReturn(TDes8& aBuf, TUint aBufSize);
	TInt FromTPtr8ProcessAndRelease(TDes8& aBuf);

	TInt OpenRShBufPool(TInt aHandle, const TShPoolInfo& aPoolInfo);
	TInt CloseRShBufPool();
	TInt FromRShBufProcessAndReturn(RShBuf& aShBuf, TUint aBufSize);
	TInt FromRShBufProcessAndRelease(RShBuf& aShBuf);

	TInt DbgMarkHeap() const;
	TInt DbgCheckHeap(TInt aCount) const;
	TInt DbgMarkEnd(TInt aCount) const;
	TInt DbgFailNext(TInt aCount) const;

	TInt ShutdownServer();

private:
	CShBufTestServer();
	~CShBufTestServer();

	void ConstructL();

	CSession2* NewSessionL(const TVersion& aVersion,const RMessage2&/*aMessage*/) const;
	TInt RunError(TInt aError);

	RPointerArray<CShBufTestServerSession>  iSessionArray;

	//
	// Variables to control shutdown of the server...
	//
	TBool  iShouldShutdownServer;

	//
	// Handle to the driver...
	//
	RShBufTestChannel  iShBufLdd;
	TUint8  iClearCache[32768];
	};


/**
 *  This is the Phonebook Sync Server side session class and is responsible
 *  for handling the client (RPhoneBookSession) requests, encoding/decoding
 *  the parameters and Contacts Item phonebook data across the API.
 *  Once the parameters are decoded the request is sent to the server where
 *  it will either be handled directly or forwarded to the Background Sync
 *  Engine. Once the request is completed, any return parameters are written
 *  back to the client if neccessary.
 */
class CShBufTestServerSession : public CSession2
	{
public:
	void CreateL();
	void CompleteRequest(const RMessage2& aMessage, TInt aResult) const;

	inline CShBufTestServer& Server();

private:
	~CShBufTestServerSession();

	void ServiceL(const RMessage2& aMessage);

	void ShutdownServerL(const RMessage2& aMessage);

	void FromTPtr8ProcessAndReturnL(const RMessage2& aMessage);
	void FromTPtr8ProcessAndReleaseL(const RMessage2& aMessage);

	void OpenRShBufPoolL(const RMessage2& aMessage);
	void CloseRShBufPoolL(const RMessage2& aMessage);
	void FromRShBufProcessAndReturnL(const RMessage2& aMessage);
	void FromRShBufProcessAndReleaseL(const RMessage2& aMessage);

	void DbgMarkHeapL(const RMessage2& aMessage);
	void DbgCheckHeapL(const RMessage2& aMessage);
	void DbgMarkEndL(const RMessage2& aMessage);
	void DbgFailNextL(const RMessage2& aMessage);

private:
	TUint8  iSessionTempBuffer[8192];
	};


/**
 *  Returns a reference to the CPhoneBookServer class.
 */
inline CShBufTestServer& CShBufTestServerSession::Server()
	{
	return *static_cast<CShBufTestServer*>(const_cast<CServer2*>(CSession2::Server()));
	} // CShBufTestServerSession::Server


#ifndef CAN_TRANSFER_SHBUF_TO_ANOTHER_PROCESS
TInt RShBufTestServerThread(TAny* aPtr);
#endif


#endif // _T_SHBUF_PERFSERVER_H_