windowing/windowserver/tauto/TOOMDRAW.CPP
author Faisal Memon <faisal.memon@nokia.com>
Thu, 06 May 2010 11:31:11 +0100
branchNewGraphicsArchitecture
changeset 47 48b924ae7197
parent 0 5d03bc08d59c
permissions -rw-r--r--
Applied patch 1, to provide a syborg specific minigui oby file. Need to compare this with the "stripped" version currently in the tree. This supplied version applies for Nokia builds, but need to repeat the test for SF builds to see if pruning is needed, or if the file needs to be device-specific.

// Copyright (c) 1996-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:
// Test out of memory redraws
// 
//

/**
 @file
 @test
 @internalComponent - Internal Symbian test code
*/

#include "TOOMDRAW.H"

void DrawTestScreen(CWindowGc *aGc, const TSize &aSize)
	{
	aGc->SetPenSize(TSize(10,10));
	aGc->SetBrushStyle(CGraphicsContext::EVerticalHatchBrush);
	aGc->DrawRect(TRect(aSize));
	}

CTestWin::CTestWin()
	{
	}

void CTestWin::Draw()
	{
#if defined(FULLLOGGING)
	_LIT(KLog,"Drawing Test Win:%d  %d,%d");
	TLogMessageText buf;
	buf.Format(KLog,Size().iWidth>320?1:0,Size().iWidth,Size().iHeight);
	TheClient->LogMessage(buf);
#endif
	DrawTestScreen(iGc,Size());
	}

CBaseTestWin::CBaseTestWin() : CTBackedUpWin(EGray4)
	{}

void CBaseTestWin::Resized(const TSize &aNewSize)
	{
	TheGc->Activate(*DrawableWin());
	DrawTestScreen(TheGc,aNewSize);
	TheGc->Deactivate();
	}

CToomDraw::CToomDraw(CTestStep* aStep):
	CTWsGraphicsBase(aStep)
	{
	}

CToomDraw::~CToomDraw()
	{
	TheClient->iWs.HeapSetFail(RHeap::ENone,0);		//In case the test crashes and it hasn't been reset
	DeleteWindows();
	}

void CToomDraw::DeleteWindows()
	{
	delete iTestWin;
	iTestWin=NULL;
	delete iBaseWin;
	iBaseWin=NULL;
	delete iBackWin;
	iBackWin=NULL;
	delete iBlankWin;
	iBlankWin=NULL;
	}

void CToomDraw::ConstructL()
	{
	iScrSize=TheClient->iScreen->SizeInPixels();
	iBlankWin=new(ELeave) CTBlankWindow;
	iBlankWin->ConstructL(*TheClient->iGroup);
	iBlankWin->SetColor(TRgb::Gray4(2));		//Grey
	iBlankWin->Activate();
	iBackWin=new(ELeave) CTestWin();
	iBackWin->SetUpL(TPoint(0,iScrSize.iHeight/4), TSize(iScrSize.iWidth,iScrSize.iHeight/2), TheClient->iGroup, *TheClient->iGc);
	iBaseWin=new(ELeave) CBaseTestWin();
	iBaseWin->SetUpL(TPoint(iScrSize.iWidth*2/3,0), TSize(iScrSize.iWidth/3,iScrSize.iHeight), TheClient->iGroup, *TheClient->iGc);
	}

void CToomDraw::CreateTestWinL()
	{
	iTestWin=new(ELeave) CTestWin();
	iTestWin->ConstructL(*TheClient->iGroup);
	iTestWin->SetExtL(TPoint(0,0), TSize(iScrSize.iWidth/3,iScrSize.iHeight));
	iTestWin->AssignGC(*TheClient->iGc);
	iTestWin->BaseWin()->SetShadowHeight(2);
	}

void CToomDraw::TriggerOomDrawsL(TInt aCount)
	{
	if(iTestWin)
		{
		iTestWin->SetExtL(TPoint(),iScrSize);		
		}
	delete iTestWin;
	iTestWin=NULL;
	CreateTestWinL();
	TheClient->iWs.HeapSetFail(RHeap::EDeterministic,aCount);
	iTestWin->Activate();
	TheClient->iWs.Finish();
	}

TBool CToomDraw::CheckWindowsL()
	{
	TLogMessageText buf;
	TBool pass = DoCheckRect(iTestWin,iBaseWin);
	if (pass)
		{
		TEST(ETrue);		//Adds one to test count
	#if defined(FULLLOGGING)
		_LIT(KLog,"OOM Draw Test Pass, State=%d");
		buf.Format(KLog,iState);
	#endif
		iRetryCount=0;
		}
	else
		{
		if (iRetryCount==4)
			{
			if ((iTest->RedrawStoreTypeL()==EPartialRedraw_PreserveStoredCmds ||
			iTest->RedrawStoreTypeL()==EPartialRedraw_FullRedrawSupport) && (iState==19 || iState==30) ||
			((iState>=2 && iState<=6) && (iTest->RedrawStoreTypeL()==EPartialRedraw_None || iTest->RedrawStoreTypeL()==EPartialRedraw_FullRedrawSupport)))
				{
			#if defined(FULLLOGGING)
				_LIT(KLog,"OOM Draw Test Known F a i l, State=%d");
				buf.Format(KLog,iState);
			#endif
				pass=ETrue;
				}
			else
				{
				if (iFailAt==0)
					iFailAt=iState;
				++iFails; //mark this test as failed
			#if defined(LOGGING)
				_LIT(KLog,"OOM Draw Test FAIL, State=%d  <------- FAIL");
				buf.Format(KLog,iState);
			#endif
				++iState; //and advance to next test
				}
			iRetryCount=0;
			}
		else
			{
		#if defined(FULLLOGGING)
			_LIT(KLog,"OOM Draw Test F a i l, State=%d retrying");
			buf.Format(KLog,iState);
		#endif
			if (++iRetryCount%2==0)
				iBackWin->DrawNow();
			}
		}
	if (buf.Length()>0)
		TheClient->LogMessage(buf);
	return pass;
	}

void CToomDraw::RunTestCaseL(TInt aCurTestCase)
	{
	TBool testFinished = false;
	((CToomDrawStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
	switch(aCurTestCase)
		{
/**
@SYMTestCaseID		GRAPHICS-WSERV-0110

@SYMDEF             DEF081259

@SYMTestCaseDesc    Test trying to draw when out of memory

@SYMTestPriority    High

@SYMTestStatus      Implemented

@SYMTestActions     Set out of memory and try drawing

@SYMTestExpectedResults Out of memory drawing is handle correctly
*/
	case 1:
		((CToomDrawStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0110"));
		while (!testFinished)
			{
		if (iDoCheck)
			{
			TheClient->iWs.HeapSetFail(RHeap::ENone,0);
			TheClient->WaitForRedrawsToFinish();
			if (CheckWindowsL())
				{
				++iState;
				if (iState==EMaxOOMState)
					DeleteWindows();
				}
			iDoCheck=EFalse;
			TheClient->iWs.Finish();
			}
		else
			{
			if (iState==EMaxOOMState)
				{
				if (iFails>0)
					{
			#if defined(LOGING)
					_LIT(KLog,"OOM Draw Test Failed, First Fail At %d, Number of Fails %d");
					TLogMessageText buf;
					buf.Format(KLog,iFailAt,iFails);
					TheClient->LogMessage(buf);
			#endif
					TEST(iFails==0);
					}
				User::After(500000);	// Let the rest of the world catch up after OOM death
				testFinished = true;
				}
			else if (iState < 3 && iTest->IsFullRomL())
				testFinished = true;
			else
				TriggerOomDrawsL(iState);
			iDoCheck=ETrue;
			}
			}
		break;
	case 2:
		((CToomDrawStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
		((CToomDrawStep*)iStep)->CloseTMSGraphicsStep();
		TestComplete();
		break;
		}
	((CToomDrawStep*)iStep)->RecordTestResultL();
	}

__WS_CONSTRUCT_STEP__(oomDraw)