os/graphics/windowing/windowserver/test/tauto/TOOMDRAW.CPP
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// Test out of memory redraws
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
/**
sl@0
    19
 @file
sl@0
    20
 @test
sl@0
    21
 @internalComponent - Internal Symbian test code
sl@0
    22
*/
sl@0
    23
sl@0
    24
#include "TOOMDRAW.H"
sl@0
    25
sl@0
    26
void DrawTestScreen(CWindowGc *aGc, const TSize &aSize)
sl@0
    27
	{
sl@0
    28
	aGc->SetPenSize(TSize(10,10));
sl@0
    29
	aGc->SetBrushStyle(CGraphicsContext::EVerticalHatchBrush);
sl@0
    30
	aGc->DrawRect(TRect(aSize));
sl@0
    31
	}
sl@0
    32
sl@0
    33
CTestWin::CTestWin()
sl@0
    34
	{
sl@0
    35
	}
sl@0
    36
sl@0
    37
void CTestWin::Draw()
sl@0
    38
	{
sl@0
    39
#if defined(FULLLOGGING)
sl@0
    40
	_LIT(KLog,"Drawing Test Win:%d  %d,%d");
sl@0
    41
	TLogMessageText buf;
sl@0
    42
	buf.Format(KLog,Size().iWidth>320?1:0,Size().iWidth,Size().iHeight);
sl@0
    43
	TheClient->LogMessage(buf);
sl@0
    44
#endif
sl@0
    45
	DrawTestScreen(iGc,Size());
sl@0
    46
	}
sl@0
    47
sl@0
    48
CBaseTestWin::CBaseTestWin() : CTBackedUpWin(EGray4)
sl@0
    49
	{}
sl@0
    50
sl@0
    51
void CBaseTestWin::Resized(const TSize &aNewSize)
sl@0
    52
	{
sl@0
    53
	TheGc->Activate(*DrawableWin());
sl@0
    54
	DrawTestScreen(TheGc,aNewSize);
sl@0
    55
	TheGc->Deactivate();
sl@0
    56
	}
sl@0
    57
sl@0
    58
CToomDraw::CToomDraw(CTestStep* aStep):
sl@0
    59
	CTWsGraphicsBase(aStep)
sl@0
    60
	{
sl@0
    61
	}
sl@0
    62
sl@0
    63
CToomDraw::~CToomDraw()
sl@0
    64
	{
sl@0
    65
	TheClient->iWs.HeapSetFail(RHeap::ENone,0);		//In case the test crashes and it hasn't been reset
sl@0
    66
	DeleteWindows();
sl@0
    67
	}
sl@0
    68
sl@0
    69
void CToomDraw::DeleteWindows()
sl@0
    70
	{
sl@0
    71
	delete iTestWin;
sl@0
    72
	iTestWin=NULL;
sl@0
    73
	delete iBaseWin;
sl@0
    74
	iBaseWin=NULL;
sl@0
    75
	delete iBackWin;
sl@0
    76
	iBackWin=NULL;
sl@0
    77
	delete iBlankWin;
sl@0
    78
	iBlankWin=NULL;
sl@0
    79
	}
sl@0
    80
sl@0
    81
void CToomDraw::ConstructL()
sl@0
    82
	{
sl@0
    83
	iScrSize=TheClient->iScreen->SizeInPixels();
sl@0
    84
	iBlankWin=new(ELeave) CTBlankWindow;
sl@0
    85
	iBlankWin->ConstructL(*TheClient->iGroup);
sl@0
    86
	iBlankWin->SetColor(TRgb::Gray4(2));		//Grey
sl@0
    87
	iBlankWin->Activate();
sl@0
    88
	iBackWin=new(ELeave) CTestWin();
sl@0
    89
	iBackWin->SetUpL(TPoint(0,iScrSize.iHeight/4), TSize(iScrSize.iWidth,iScrSize.iHeight/2), TheClient->iGroup, *TheClient->iGc);
sl@0
    90
	iBaseWin=new(ELeave) CBaseTestWin();
sl@0
    91
	iBaseWin->SetUpL(TPoint(iScrSize.iWidth*2/3,0), TSize(iScrSize.iWidth/3,iScrSize.iHeight), TheClient->iGroup, *TheClient->iGc);
sl@0
    92
	}
sl@0
    93
sl@0
    94
void CToomDraw::CreateTestWinL()
sl@0
    95
	{
sl@0
    96
	iTestWin=new(ELeave) CTestWin();
sl@0
    97
	iTestWin->ConstructL(*TheClient->iGroup);
sl@0
    98
	iTestWin->SetExtL(TPoint(0,0), TSize(iScrSize.iWidth/3,iScrSize.iHeight));
sl@0
    99
	iTestWin->AssignGC(*TheClient->iGc);
sl@0
   100
	iTestWin->BaseWin()->SetShadowHeight(2);
sl@0
   101
	}
sl@0
   102
sl@0
   103
void CToomDraw::TriggerOomDrawsL(TInt aCount)
sl@0
   104
	{
sl@0
   105
	if(iTestWin)
sl@0
   106
		{
sl@0
   107
		iTestWin->SetExtL(TPoint(),iScrSize);		
sl@0
   108
		}
sl@0
   109
	delete iTestWin;
sl@0
   110
	iTestWin=NULL;
sl@0
   111
	CreateTestWinL();
sl@0
   112
	TheClient->iWs.HeapSetFail(RHeap::EDeterministic,aCount);
sl@0
   113
	iTestWin->Activate();
sl@0
   114
	TheClient->iWs.Finish();
sl@0
   115
	}
sl@0
   116
sl@0
   117
TBool CToomDraw::CheckWindowsL()
sl@0
   118
	{
sl@0
   119
	TLogMessageText buf;
sl@0
   120
	TBool pass = DoCheckRect(iTestWin,iBaseWin);
sl@0
   121
	if (pass)
sl@0
   122
		{
sl@0
   123
		TEST(ETrue);		//Adds one to test count
sl@0
   124
	#if defined(FULLLOGGING)
sl@0
   125
		_LIT(KLog,"OOM Draw Test Pass, State=%d");
sl@0
   126
		buf.Format(KLog,iState);
sl@0
   127
	#endif
sl@0
   128
		iRetryCount=0;
sl@0
   129
		}
sl@0
   130
	else
sl@0
   131
		{
sl@0
   132
		if (iRetryCount==4)
sl@0
   133
			{
sl@0
   134
			if ((iTest->RedrawStoreTypeL()==EPartialRedraw_PreserveStoredCmds ||
sl@0
   135
			iTest->RedrawStoreTypeL()==EPartialRedraw_FullRedrawSupport) && (iState==19 || iState==30) ||
sl@0
   136
			((iState>=2 && iState<=6) && (iTest->RedrawStoreTypeL()==EPartialRedraw_None || iTest->RedrawStoreTypeL()==EPartialRedraw_FullRedrawSupport)))
sl@0
   137
				{
sl@0
   138
			#if defined(FULLLOGGING)
sl@0
   139
				_LIT(KLog,"OOM Draw Test Known F a i l, State=%d");
sl@0
   140
				buf.Format(KLog,iState);
sl@0
   141
			#endif
sl@0
   142
				pass=ETrue;
sl@0
   143
				}
sl@0
   144
			else
sl@0
   145
				{
sl@0
   146
				if (iFailAt==0)
sl@0
   147
					iFailAt=iState;
sl@0
   148
				++iFails; //mark this test as failed
sl@0
   149
			#if defined(LOGGING)
sl@0
   150
				_LIT(KLog,"OOM Draw Test FAIL, State=%d  <------- FAIL");
sl@0
   151
				buf.Format(KLog,iState);
sl@0
   152
			#endif
sl@0
   153
				++iState; //and advance to next test
sl@0
   154
				}
sl@0
   155
			iRetryCount=0;
sl@0
   156
			}
sl@0
   157
		else
sl@0
   158
			{
sl@0
   159
		#if defined(FULLLOGGING)
sl@0
   160
			_LIT(KLog,"OOM Draw Test F a i l, State=%d retrying");
sl@0
   161
			buf.Format(KLog,iState);
sl@0
   162
		#endif
sl@0
   163
			if (++iRetryCount%2==0)
sl@0
   164
				iBackWin->DrawNow();
sl@0
   165
			}
sl@0
   166
		}
sl@0
   167
	if (buf.Length()>0)
sl@0
   168
		TheClient->LogMessage(buf);
sl@0
   169
	return pass;
sl@0
   170
	}
sl@0
   171
sl@0
   172
void CToomDraw::RunTestCaseL(TInt aCurTestCase)
sl@0
   173
	{
sl@0
   174
	TBool testFinished = false;
sl@0
   175
	((CToomDrawStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
sl@0
   176
	switch(aCurTestCase)
sl@0
   177
		{
sl@0
   178
/**
sl@0
   179
@SYMTestCaseID		GRAPHICS-WSERV-0110
sl@0
   180
sl@0
   181
@SYMDEF             DEF081259
sl@0
   182
sl@0
   183
@SYMTestCaseDesc    Test trying to draw when out of memory
sl@0
   184
sl@0
   185
@SYMTestPriority    High
sl@0
   186
sl@0
   187
@SYMTestStatus      Implemented
sl@0
   188
sl@0
   189
@SYMTestActions     Set out of memory and try drawing
sl@0
   190
sl@0
   191
@SYMTestExpectedResults Out of memory drawing is handle correctly
sl@0
   192
*/
sl@0
   193
	case 1:
sl@0
   194
		((CToomDrawStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0110"));
sl@0
   195
		while (!testFinished)
sl@0
   196
			{
sl@0
   197
		if (iDoCheck)
sl@0
   198
			{
sl@0
   199
			TheClient->iWs.HeapSetFail(RHeap::ENone,0);
sl@0
   200
			TheClient->WaitForRedrawsToFinish();
sl@0
   201
			if (CheckWindowsL())
sl@0
   202
				{
sl@0
   203
				++iState;
sl@0
   204
				if (iState==EMaxOOMState)
sl@0
   205
					DeleteWindows();
sl@0
   206
				}
sl@0
   207
			iDoCheck=EFalse;
sl@0
   208
			TheClient->iWs.Finish();
sl@0
   209
			}
sl@0
   210
		else
sl@0
   211
			{
sl@0
   212
			if (iState==EMaxOOMState)
sl@0
   213
				{
sl@0
   214
				if (iFails>0)
sl@0
   215
					{
sl@0
   216
			#if defined(LOGING)
sl@0
   217
					_LIT(KLog,"OOM Draw Test Failed, First Fail At %d, Number of Fails %d");
sl@0
   218
					TLogMessageText buf;
sl@0
   219
					buf.Format(KLog,iFailAt,iFails);
sl@0
   220
					TheClient->LogMessage(buf);
sl@0
   221
			#endif
sl@0
   222
					TEST(iFails==0);
sl@0
   223
					}
sl@0
   224
				User::After(500000);	// Let the rest of the world catch up after OOM death
sl@0
   225
				testFinished = true;
sl@0
   226
				}
sl@0
   227
			else if (iState < 3 && iTest->IsFullRomL())
sl@0
   228
				testFinished = true;
sl@0
   229
			else
sl@0
   230
				TriggerOomDrawsL(iState);
sl@0
   231
			iDoCheck=ETrue;
sl@0
   232
			}
sl@0
   233
			}
sl@0
   234
		break;
sl@0
   235
	case 2:
sl@0
   236
		((CToomDrawStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
   237
		((CToomDrawStep*)iStep)->CloseTMSGraphicsStep();
sl@0
   238
		TestComplete();
sl@0
   239
		break;
sl@0
   240
		}
sl@0
   241
	((CToomDrawStep*)iStep)->RecordTestResultL();
sl@0
   242
	}
sl@0
   243
sl@0
   244
__WS_CONSTRUCT_STEP__(oomDraw)