graphicsdeviceinterface/screendriver/tsrc/TScdvTest.cpp
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/screendriver/tsrc/TScdvTest.cpp	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,206 @@
+// Copyright (c) 2004-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:
+//
+
+#include <hal.h>
+#include <bitdraw.h>
+#include "TScdvTest.h"
+
+GLREF_C TInt ByteSize(TDisplayMode aDisplayMode,TInt aWidth);
+
+//===================================================================
+//In order to test multiple screens creation process on the Emulator, 
+//you have to extend your epoc.ini file with the following lines
+//_NewScreen_
+//ScreenWidth 200
+//ScreenHeight 300
+//===================================================================
+
+CTScdv::CTScdv(CTestStep* aStep) :
+	CTGraphicsBase(aStep)
+	{
+	
+	}
+
+//The method calculates the memory (in bytes) needed for a screen 
+//device with aSize size and aDisplayMode mode.
+inline TInt CTScdv::ByteSize(const TSize& aSize, TDisplayMode aDisplayMode)
+	{
+	return ::ByteSize(aDisplayMode,aSize.iWidth) * aSize.iHeight;
+	}
+
+//The method creates a screen device for aScreenNo screen number .
+//Possible leaving error codes: KErrNoMemory.
+//Return result: ETrue - the device was created successfully, EFalse - not supported.
+//Successfully created device will be pushed on the cleanup stack.
+TBool CTScdv::CreateScreenDeviceLC(TInt aScreenNo, 
+								  TDisplayMode aDisplayMode,
+								  CFbsDrawDevice*& aScreenDevice)
+	{
+	__ASSERT_ALWAYS(aScreenDevice == NULL, User::Invariant());
+	TBool res = EFalse;
+	TRAPD(err, aScreenDevice = CFbsDrawDevice::NewScreenDeviceL(aScreenNo, aDisplayMode));
+	if(err == KErrNone)
+		{
+		CleanupStack::PushL(aScreenDevice);
+		res = ETrue;
+		}
+	else
+		{
+		if(err != KErrNotSupported)
+			{
+			User::LeaveIfError(err);
+			}
+		}
+	return res;
+	}
+
+//The method initializes aScreenDevice screen device and allocates.
+//a block of memory for it.
+//Possible leaving error codes: KErrNoMemory.
+//The allocated bock of memory will be pushed on the cleanup stack.
+TAny* CTScdv::InitScreenDeviceLC(CFbsDrawDevice* aScreenDevice,
+							   TDisplayMode aDisplayMode)
+	{
+	__ASSERT_ALWAYS(aScreenDevice != NULL, User::Invariant());
+
+	TSize size = aScreenDevice->SizeInPixels();
+	TInt bytesToAllocate=ByteSize(size, aDisplayMode);
+	const TInt bytesRequire=bytesToAllocate;
+	TUint8* devMemory = new TUint8[bytesToAllocate];
+	if (!devMemory)
+		{
+		do	{
+			bytesToAllocate/=2;
+			devMemory=new TUint8[bytesToAllocate];
+			} while (devMemory==NULL && bytesToAllocate>0);
+		if (devMemory)
+			{
+			_LIT(KLog1,"Not enought memory!!  Allocated %d (0x%x) bytes when %d (0x%x) bytes required.");
+			INFO_PRINTF5(KLog1,bytesToAllocate,bytesToAllocate,bytesRequire,bytesRequire);
+			_LIT(KLog2,"Display Mode: %S,  Screen Size: %d,%d");
+			INFO_PRINTF4(KLog2,&ColorModeName(aDisplayMode),size.iWidth,size.iHeight);
+			}
+		else
+			{
+			_LIT(KLog,"Failed to Allocate memory!!  %d (0x%x) bytes required,  Display Mode: %S,  Screen Size: %d,%d");
+			INFO_PRINTF6(KLog,bytesRequire,bytesRequire,&ColorModeName(aDisplayMode),size.iWidth,size.iHeight);
+			User::Leave(KErrNoMemory);
+			}
+		}
+	CleanupStack::PushL(devMemory);
+
+	aScreenDevice->SetUserDisplayMode(aDisplayMode);
+	aScreenDevice->SetAutoUpdate(EFalse);
+	aScreenDevice->SetBits(devMemory);
+	return devMemory;
+	}
+
+//Mutltiple screen devices creation test
+void CTScdv::TestScreenDeviceCreationL()
+	{
+	TDisplayMode mode[] = {	EColor256, EColor4K, EColor64K, EColor16,
+							EColor16MU,	EColor16MA,	EColor16MAP	};
+
+	const TInt KTestedDevCnt = 2;
+
+	for(TInt ii=0;ii<TInt(sizeof(mode)/sizeof(mode[0]));++ii)
+		{
+		//create
+		CFbsDrawDevice* dev[KTestedDevCnt];
+		Mem::FillZ(dev, sizeof(dev));
+		TInt cnt = 0;
+		for(cnt=0;cnt<KTestedDevCnt;++cnt)
+			{
+			TBool res = CreateScreenDeviceLC(cnt, mode[ii], dev[cnt]);
+			if(res)
+				{
+				InitScreenDeviceLC(dev[cnt], mode[ii]);
+				_LIT(KLog,"Created Screen Device with mode %S on screen %d");
+				INFO_PRINTF3(KLog,&ColorModeName(mode[ii]),cnt);
+				//destroy
+				CleanupStack::PopAndDestroy(2,dev[cnt]);
+				}
+			else
+				{
+				_LIT(KLog,"No support for display mode %S on screen %d");
+				const TDesC* name=&ColorModeName(mode[ii]);
+				INFO_PRINTF3(KLog, name, cnt);
+				RDebug::Print(KLog, name, cnt);
+				break;
+				}
+			}
+		}
+	}
+
+//Bitmap device creation test
+void CTScdv::TestBitmapDeviceCreationL()
+	{
+	TDisplayMode mode[] = {EColor256, EColor4K, EColor16M, EColor16MU, EColor16MA, EColor16MAP, EColor64K, 
+						   EGray256, EGray16, EGray4, EGray2, EColor16};
+	for(TInt ii=0;ii<TInt(sizeof(mode)/sizeof(mode[0]));++ii)
+		{
+		//create
+		TSize size(10, 20);
+		TUint8* bitmapMem = new (ELeave) TUint8[ByteSize(size, mode[ii])];
+		CleanupStack::PushL(bitmapMem);
+		CFbsDrawDevice* bitmapDev = CFbsDrawDevice::NewBitmapDeviceL(size, mode[ii], ByteSize(size, mode[ii]) / size.iHeight);
+		CleanupStack::PushL(bitmapDev);
+		//initialize
+		bitmapDev->SetAutoUpdate(EFalse);
+		bitmapDev->SetBits(bitmapMem);
+		//destroy
+		CleanupStack::PopAndDestroy(2);//bitmapMem, bitmapDev
+		}
+	}
+
+void CTScdv::RunTestCaseL(TInt aCurTestCase)
+	{
+    ((CTScdvStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+	switch(aCurTestCase)
+		{
+	case 1:
+		INFO_PRINTF1(_L("Mutiple screen devices creation test"));
+/**
+	@SYMTestCaseID GRAPHICS-SCREENDRIVER-0033
+*/
+		((CTScdvStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0033"));
+		TestScreenDeviceCreationL();
+		break;
+	case 2:
+		INFO_PRINTF1(_L("Bitmap device creation test"));
+/**
+	@SYMTestCaseID GRAPHICS-SCREENDRIVER-0034
+*/
+		((CTScdvStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0034"));
+		TestBitmapDeviceCreationL();
+		break;
+	case 3:
+		((CTScdvStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+		((CTScdvStep*)iStep)->CloseTMSGraphicsStep();
+ 		TestComplete();
+ 		break;
+		}
+	((CTScdvStep*)iStep)->RecordTestResultL();
+	}
+
+//--------------
+__CONSTRUCT_STEP__(Scdv)
+
+
+void CTScdvStep::TestSetupL()
+	{
+	TInt temp = 0;
+	HAL::Get(HALData::EDisplayColors, temp);//force HAL memory allocation
+	}