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