diff -r 000000000000 -r 5d03bc08d59c graphicsdeviceinterface/screendriver/tsrc/TScdvTest.cpp --- /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 +#include +#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;iiSetAutoUpdate(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 + }