graphicstest/uibench/src/te_graphicsperformanceSuiteStepBase.h
author Gareth Stockwell <gareth.stockwell@accenture.com>
Fri, 05 Nov 2010 17:31:20 +0000
branchbug235_bringup_0
changeset 215 097e92a68d68
parent 0 5d03bc08d59c
permissions -rw-r--r--
Added GLES 1.x spinning cube-rendering code to eglbringuptest The coordinate, color and index data are uploaded to server-side buffers by the CGLES1Cube::KhrSetup function. CGLES1Cube::KhrPaint just sets the view matrix and issues a draw command. Which demo to display can be selected by passing its name on the command line, e.g. eglbringuptest vgline eglbringuptest gles1cube If no name is provided, the application defaults to vgline.

// Copyright (c) 2005-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 
*/

#ifndef __TE_GRAPHICSPERFORMANCE_STEP_BASE__
#define __TE_GRAPHICSPERFORMANCE_STEP_BASE__

#include <e32math.h>
#include <bitdev.h>
#include <test/tprofiler.h>
#include <test/testexecutestepbase.h>
#include <test/ttmsgraphicsstep.h>
#include "te_graphicsperformanceSuiteDefs.h"
#include "tdisplaymode_mapping.h"

TSize GetPixmapSizeInPixels();

// Define TRgb constants to be used in test cases
#define TRANSPARENT_BLACK TRgb(0,0,0,0)
#define BLACK_SEMI_TRANSPARENT TRgb(0,0,0,0x40)
#define RED_SEMI_TRANSPARENT TRgb(0xff,0,0,0x40)
#define GREEN_SEMI_TRANSPARENT TRgb(0,0xff,0,0x40)
#define BLUE_SEMI_TRANSPARENT TRgb(0,0,0xff,0x40)
#define YELLOW_SEMI_TRANSPARENT TRgb(0xff,0xff,0,0x40)

/**
Creates a virtual bitmap device if a real screen device of the specified display mode is not supported by the hardware
*/
class CVirtualBitmapDevice : public CBase
	{
public:
	virtual ~CVirtualBitmapDevice();
	static CVirtualBitmapDevice* NewL(TDisplayMode aDisplayMode, TBool aForceOffscreen);
	void Update();
	CBitmapDevice& BitmapDevice();
	CFbsBitmap& Bitmap();
	virtual int CreateContext(CGraphicsContext *&aGc);
	virtual TSize SizeInPixels() const;
	TInt isScreenDevice();
private:
	void ConstructL(TDisplayMode aDisplayMode, TBool aForceOffscreen);
	
private:
	CBitmapDevice* iBitmapDevice;	// The virtual or real screen device
	CFbsBitmap* iBitmap;			// Virtual bitmap
	TBool iIsScreenDevice; 			// ETrue if the hardware supports the screen device at the specified display mode	
	};
	
/**
Creates a virtual bitmap device if a real screen device of the specified display mode is not supported by the hardware.
It is similar to CVirtualBitmapDevice but it uses CFbsDrawDevice directly.
*/
class CVirtualDrawDevice : public CBase
	{
public:
	virtual ~CVirtualDrawDevice();
	static CVirtualDrawDevice* NewL(TDisplayMode aDisplayMode);
	CFbsDrawDevice& DrawDevice();
	TBool IsDrawDevice();
private:
	void ConstructL(TDisplayMode aDisplayMode);
	TInt ByteSize(const TSize& aSize, TDisplayMode aDisplayMode);
	
private:
	CFbsDrawDevice* iDrawDevice;	// The virtual or real screen device
	TUint8* iDeviceMemory;			// Used for virtual draw device
	TSize	iSize;					// Used for Clear
	TBool iIsDrawDevice;		    // ETrue if the hardware supports the screen device at the specified display mode	
	};

/****************************************************************************
* The reason to have a new step base is that it is very much possible
* that the all individual test steps have project related common variables 
* and members 
* and this is the place to define these common variable and members.
* 
****************************************************************************/
class CTe_graphicsperformanceSuiteStepBase : public CTTMSGraphicsStep
	{
public:
	static const TDesC& ColorModeName(TDisplayMode aMode);
	virtual ~CTe_graphicsperformanceSuiteStepBase();
	CTe_graphicsperformanceSuiteStepBase();
	CVirtualBitmapDevice* ScreenDevice();

	void SetScreenModeL(TDisplayMode aScreenMode, TBool aForceUseOffscreen=EFalse);
	CFbsBitmap* CreateSoftwareBitmapLC(const TSize& aSize, TDisplayMode aMode);
	void CopyBitmapL(CFbsBitmap* aDst, CFbsBitmap* aSrc);
	CFbsBitmap* CopyIntoNewBitmapL(CFbsBitmap* aSrc, TDisplayMode aDisplayMode);
	CFbsBitmap* LoadBitmapL(const TDesC& aName, TInt aIndex);
	static TRgb InterpolateColour(TRgb aLo, TRgb aHi, TInt aX, TInt aN);
	static void VerticalGradientAlphaL(CFbsBitmap* aBitmap, TRgb aLo, TRgb aHi);
	void SetDrawDeviceModeL(TDisplayMode aScreenMode);
	TInt GetDrawDeviceInterfaceL(TInt aInterfaceId, TAny *&aInterface);
	void ClearDrawDeviceL(TRgb aColor);
	CFbsBitmap* CreateCheckedBoardL(TDisplayMode aDisplayMode, TSize aSize, TSize aChecksPerAxis) const;
	virtual CFbsBitmap* GetTargetAsBitmapL();
	TInt WriteTargetOutput(TPtrC aName);
	static void ExtractListL(TPtrC aList, RArray<TPtrC>& aListItems);

protected:
	// From CTestStep
	virtual TVerdict doTestStepPreambleL(); 
	virtual TVerdict doTestStepPostambleL();	
	TUint32 TimeMax();
	TUint32 TimeMin();
	
private:
	//TBool IsFoundScreenMode(TDisplayMode aScreenMode);

protected:
	CVirtualBitmapDevice * iScreenDevice;	
	CFbsBitGc* iGc;
	CVirtualDrawDevice* iDrawDevice;
    CTProfiler*         iProfiler;
		
private:
	TSize 				iScreenSize;
	TInt 				iDoProfiling;
	TInt				iCPUSpeed;
	CActiveScheduler* 	iScheduler;
	
	// Sanity checking flag as read in from the ini file. If ETrue, WriteTargetOutput() will generate
	// a bitmap of the target, otherwise it will perform no operation.
	TBool iShowBitmaps;
	__PROFILERMEMBERS
	};

	// Define 16 RGB colors
#define KRgbBlack		TRgb(0x000000)
#define KRgbDarkGray	TRgb(0x555555)
#define KRgbDarkRed		TRgb(0x000080)
#define KRgbDarkGreen	TRgb(0x008000)
#define KRgbDarkYellow	TRgb(0x008080)
#define KRgbDarkBlue	TRgb(0x800000)
#define KRgbDarkMagenta	TRgb(0x800080)
#define KRgbDarkCyan	TRgb(0x808000)
#define KRgbRed			TRgb(0x0000ff)
#define KRgbGreen		TRgb(0x00ff00)
#define KRgbYellow		TRgb(0x00ffff)
#define KRgbBlue		TRgb(0xff0000)
#define KRgbMagenta		TRgb(0xff00ff)
#define KRgbCyan		TRgb(0xffff00)
#define KRgbGray		TRgb(0xaaaaaa)
#define KRgbWhite		TRgb(0xffffff)

// A 16 RGB color table
const TRgb KColor16Table[] = 
	{		
	KRgbWhite,		
	KRgbGray,		
	KRgbCyan,		
	KRgbMagenta,		
	KRgbBlue,		
	KRgbYellow,		
	KRgbGreen,		
	KRgbRed,			
	KRgbDarkCyan,	
	KRgbDarkMagenta,	
	KRgbDarkBlue,	
	KRgbDarkYellow,	
	KRgbDarkGreen,	
	KRgbDarkRed,	
	KRgbDarkGray,	
	KRgbBlack,					
	};

#endif