os/graphics/graphicstest/uibench/src/toutlineshadowdrawing.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2006-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 //
    15 
    16 /**
    17  @file
    18  @test
    19  @internalComponent - Internal Symbian test code 
    20 */
    21 
    22 #include "toutlineshadowdrawing.h"
    23 #include <hal.h>
    24 // When enabled allows testing with a variable windows size rather than fixed size
    25 #define _TESTWITHVARIABLEWINDOWSIZE
    26 
    27 _LIT(KTextPhrase, "$%() ShAdOW OLine 1234");
    28 _LIT(KFontTypeface, "fontTypeFace");
    29 
    30 const TInt KIterationsToTest = 50; 		// Number of iterations to run tests
    31 const TInt KHeight = 60;
    32 const TInt KTempLength = 60; // Used for temp buffer in side function
    33 const TInt KLengthOfTestCase = 256;
    34 _LIT(KTestCaseFormat, "%S_%S_ORIENT_%d");
    35 
    36 /**
    37 Auxilary function called to generate test case name based on input parameters
    38 @param aTestDesc holds the test case description (eg. GET_FONT_MAX_HEIGHT)
    39 @param aIsShadowOn holds bool value of shadow effects (eg. ETrue or EFalse)
    40 @param aIsOutlineOn holds bool value of outline effects (eg. ETrue or EFalse)
    41 @param aOrientation holds int value of orientation (eg. 0, 1, 2)
    42 @param aPenColor holds pen color used to extract alpha value.
    43 */
    44 HBufC* CTOutlineShadowDrawing::GenerateTestCaseLC(const TDesC& aTestDesc, TBool aIsShadowOn, TBool aIsOutlineOn, TInt aOrientation, const TRgb& aPenColor)
    45 	{
    46 	TBuf<KLengthOfTestCase> tempBuffer;
    47 	TBuf<KTempLength> temp;
    48 	if(aIsShadowOn && aIsOutlineOn)
    49 		{
    50 		temp.Format(_L("WITH BOTH OUTLINE & SHADOW ON_"));
    51 		}
    52 	else if(aIsOutlineOn)
    53 		{
    54 		temp.Format(_L("WITH OUTLINE ONLY ON_"));
    55 		}
    56 	else if(aIsShadowOn)
    57 		{
    58 		temp.Format(_L("WITH SHADOW ONLY ON_"));
    59 		}
    60 	else 
    61 		{
    62 		temp.Format(_L("WITH BOTH OUTLINE & SHADOW OFF_"));
    63 		}
    64 		temp.AppendNum(aPenColor.Alpha());
    65 	
    66 	tempBuffer.Format(KTestCaseFormat, &aTestDesc, &temp, aOrientation);
    67 	return tempBuffer.AllocLC();
    68 	}
    69 
    70 /**
    71 	@SYMTestCaseID GRAPHICS-UI-BENCH-0147
    72 
    73 	@SYMPREQ PREQ1543
    74 
    75 	@SYMTestCaseDesc Tests how long it takes to run GetNearestFontToDesignHeightInTwips API 
    76 	and calculate time with different screen modes with outline and shadow effects.
    77 	Also with Screen Rotation
    78 
    79 	@param aFontFace is the fontface which is used to set to fontspec
    80 	@param aRotation is the rotation index which is passed to ResultAnalysis
    81 	@param aIsShadowOn holds shadow status (True or False)
    82 	@param aIsOutlineOn holds outline status (True or False)
    83 
    84 	@SYMTestPriority High
    85 
    86 	@SYMTestStatus Implemented
    87 
    88 	@SYMTestActions Compare the results over time, GetNearestFontToDesignHeightInPixels() code.
    89 	Time Calculated with different Screen Modes and with Screen Rotation.
    90 	API Calls:
    91 	CFbsBitGc::GetNearestFontToDesignHeightInPixels()
    92 	TFontStyle::SetEffects()
    93 
    94 	@SYMTestExpectedResults Test should pass and display total test time and time per display mode
    95 */
    96 void CTOutlineShadowDrawing::DoGetAPIsOutlineandShadowFontsL(const TDesC& aFontFace, TInt aRotation, TBool aIsShadowOn, TBool aIsOutlineOn)
    97 	{
    98 	TFontSpec fsp;
    99 	iGc->Clear();
   100 	iGc->Reset();
   101 	fsp.iFontStyle.SetEffects(FontEffect::EDropShadow, aIsShadowOn);
   102 	fsp.iFontStyle.SetEffects(FontEffect::EOutline, aIsOutlineOn);
   103 	fsp.iTypeface.iName = aFontFace;
   104 	fsp.iHeight = KHeight;
   105 	TRgb outlinePenColor = iGc->PenColor();
   106 	
   107 	_LIT(KTestName1, "GET_FONT_MAX_HEIGHT");
   108 	HBufC* testCase1 = GenerateTestCaseLC(KTestName1, aIsShadowOn, aIsOutlineOn, aRotation, outlinePenColor);
   109 	CFbsFont* font = NULL;
   110 	iProfiler->InitResults();
   111 	TInt iteration = 0;
   112 	for(iteration=0; iteration<=KIterationsToTest; iteration++)
   113 		{
   114 		TEST(iDev->GetNearestFontToMaxHeightInPixels((CFont*&)font,fsp,fsp.iHeight) == KErrNone);
   115 		iProfiler->MarkResultSetL();
   116 		iDev->ReleaseFont(font);
   117 		font = NULL;
   118 		}
   119 	iProfiler->ResultsAnalysis(*testCase1, aRotation, 0, iDev->DisplayMode(), KIterationsToTest);
   120 	CleanupStack::PopAndDestroy(testCase1);
   121 
   122 	_LIT(KTestName2, "GET_FONT");
   123 	HBufC* testCase2 = GenerateTestCaseLC(KTestName2, aIsShadowOn, aIsOutlineOn, aRotation, outlinePenColor);
   124 	// Tests performance for GetNearestFontInPixels API
   125 	iProfiler->InitResults();
   126 	for(iteration=0; iteration<=KIterationsToTest; iteration++)
   127 		{
   128 		TEST(iDev->GetNearestFontInPixels((CFont*&)font,fsp) == KErrNone);
   129 		iProfiler->MarkResultSetL();
   130 		iDev->ReleaseFont(font);
   131 		font = NULL;
   132 		}
   133 	iProfiler->ResultsAnalysis(*testCase2, aRotation, 0, iDev->DisplayMode(), KIterationsToTest);
   134 	CleanupStack::PopAndDestroy(testCase2);
   135 
   136 	_LIT(KTestName3, "GET_FONT_DESIGN_HEIGHT");
   137 	HBufC* testCase3 = GenerateTestCaseLC(KTestName3, aIsShadowOn, aIsOutlineOn, aRotation, outlinePenColor);
   138 	// Tests performance for GetNearestFontToDesignHeightInPixels API
   139 	iProfiler->InitResults();
   140 	for(iteration=0; iteration<=KIterationsToTest; iteration++)
   141 		{
   142 		TEST(iDev->GetNearestFontToDesignHeightInPixels((CFont*&)font,fsp) == KErrNone);
   143 		iProfiler->MarkResultSetL();
   144 		iDev->ReleaseFont(font);
   145 		font = NULL;
   146 		}
   147 	iProfiler->ResultsAnalysis(*testCase3, aRotation, 0, iDev->DisplayMode(), KIterationsToTest);
   148 	CleanupStack::PopAndDestroy(testCase3);
   149 	}
   150 
   151 /**
   152 	@SYMTestCaseID GRAPHICS-UI-BENCH-0148
   153 
   154 	@SYMPREQ PREQ1543
   155 
   156 	@SYMTestCaseDesc Tests how long it takes to run DrawText API
   157 	and calculate time with different screen modes with and outline and shadow effects
   158 
   159 	@param aFontFace is the fontface which is used to set to fontspec
   160 	@param aRotation is the rotation index which is passed to ResultAnalysis
   161 	@param aBitmapType is the bitmap type (Here it is AntiAliased)
   162 	@param aOutlinePenColor is the pen color
   163 	@param aIsShadowOn holds shadow status (True or False)
   164 	@param aIsOutlineOn holds outline status (True or False)
   165 	@param aDispModeIndex is the display mode index used for displaying in log
   166 
   167 	@SYMTestPriority High 
   168 
   169 	@SYMTestStatus Implemented
   170 
   171 	@SYMTestActions Compare the results over time, DrawText with and without Outline & Shadow and
   172 	Time calculated with different Screen Modes and with Screen Rotation DrawText().
   173 	API Calls:
   174 	CFbsBitGc::DrawText()
   175 	TFontStyle::SetEffects()
   176 
   177 	@SYMTestExpectedResults Test should pass and display total test time and time per display mode
   178 */	
   179 void CTOutlineShadowDrawing::DoDrawTextOutlineShadowL(const TDesC& aFontFace, TInt aRotation, const TRgb& aOutlinePenColor, TBool aIsShadowOn, TBool aIsOutlineOn, TInt aDispModeIndex)
   180 	{
   181 	TFontSpec fsp;
   182 	iGc->Clear();
   183 	iGc->Reset();
   184 	fsp.iTypeface.iName = aFontFace;
   185 	fsp.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
   186 
   187 	_LIT(KTestName1, "DRAWTEXT_DISPLAYINDEX_%d");
   188 
   189 	TBuf<KTempLength> temp;
   190 	fsp.iHeight = KHeight;
   191 	fsp.iFontStyle.SetEffects(FontEffect::EDropShadow, aIsShadowOn);
   192 	fsp.iFontStyle.SetEffects(FontEffect::EOutline, aIsOutlineOn);
   193 	iGc->SetPenColor(aOutlinePenColor);
   194 	CFont* font = NULL;
   195 	User::LeaveIfError(iDev->GetNearestFontToDesignHeightInPixels((CFont*&)font,fsp));
   196 	iGc->UseFont(font);
   197 	
   198 	temp.Format(KTestName1, aDispModeIndex);
   199 	HBufC* testCase1 = GenerateTestCaseLC(temp, aIsShadowOn, aIsOutlineOn, aRotation, aOutlinePenColor);
   200 	iProfiler->InitResults();
   201 	for(TInt i = 0; i <= KIterationsToTest; i++)
   202 		{
   203 		iGc->DrawText(KTextPhrase,TPoint(10,100));
   204 		iProfiler->MarkResultSetL();
   205 		}
   206 	iProfiler->ResultsAnalysis(*testCase1, aRotation, 0, iDev->DisplayMode(), KIterationsToTest);
   207 	CleanupStack::PopAndDestroy(testCase1);
   208 	iGc->DiscardFont();
   209 	iDev->ReleaseFont(font);
   210 	}
   211 
   212 /**
   213 	@SYMTestCaseID GRAPHICS-UI-BENCH-0149
   214 	
   215 	@SYMPREQ PREQ1543
   216 
   217 	@SYMTestCaseDesc Tests how long it takes to run DrawTextVertical API
   218 	and calculate time with different screen modes with and outline and shadow effects
   219 
   220 	@param aFontFace is the fontface which is used to set to fontspec
   221 	@param aRotation is the rotation index which is passed to ResultAnalysis
   222 	@param aBitmapType is the bitmap type (Here it is AntiAliased)
   223 	@param aOutlinePenColor is the pen color
   224 	@param aIsShadowOn holds shadow status (True or False)
   225 	@param aIsOutlineOn holds outline status (True or False)
   226 	@param aDispModeIndex is the display mode index used for displaying in log
   227 
   228 	@SYMTestPriority High 
   229 
   230 	@SYMTestStatus Implemented
   231 
   232 	@SYMTestActions Compare the results over time, with DrawTextVertical with and without Outline & Shadow and
   233 	Time calculated with different Screen Modes and with Screen Rotation with DrawTextVertical
   234 	API Calls:
   235 	CFbsBitGc::DrawTextVertical()
   236 	TFontStyle::SetEffects()
   237 
   238 	@SYMTestExpectedResults Test should pass and display total test time and time per display mode
   239 */
   240 void CTOutlineShadowDrawing::DoDrawVerticalTextOutlineShadowL(const TDesC& aFontFace, TInt aRotation, const TRgb& aOutlinePenColor, TBool aIsShadowOn, TBool aIsOutlineOn, TInt aDispModeIndex)
   241 	{
   242 	TFontSpec fsp;
   243 	CFont* font = NULL;
   244 	iGc->Clear();
   245 	iGc->Reset();
   246 	TInt alpha = aOutlinePenColor.Alpha();
   247 	fsp.iTypeface.iName = aFontFace;
   248 	fsp.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
   249 
   250 	_LIT(KTestName1, "DRAWTEXTVERTICAL_DISPLAYINDEX_%d");
   251 
   252 	TBuf<KTempLength> temp;	
   253 	temp.Format(KTestName1, aDispModeIndex);
   254 	HBufC* testCase1 = GenerateTestCaseLC(temp, aIsShadowOn, aIsOutlineOn, aRotation, aOutlinePenColor);
   255 	fsp.iHeight = KHeight;
   256 	fsp.iFontStyle.SetEffects(FontEffect::EDropShadow, aIsShadowOn);
   257 	fsp.iFontStyle.SetEffects(FontEffect::EOutline, aIsOutlineOn);
   258 
   259 	iGc->SetPenColor(aOutlinePenColor);
   260 	User::LeaveIfError(iDev->GetNearestFontToDesignHeightInPixels((CFont*&)font,fsp));
   261 	iGc->UseFont(font);
   262 	iProfiler->InitResults();
   263 	for(TInt i=0; i<=KIterationsToTest; i++)
   264 		{
   265 		iGc->DrawTextVertical(KTextPhrase,TPoint(10,10),EFalse);
   266 		iProfiler->MarkResultSetL();
   267 		}
   268 	iProfiler->ResultsAnalysis(*testCase1, aRotation, 0, iDev->DisplayMode(), KIterationsToTest);
   269 	CleanupStack::PopAndDestroy(testCase1);
   270 	iGc->DiscardFont();
   271 	iDev->ReleaseFont(font);
   272 	}
   273 
   274 CTOutlineShadowDrawing::~CTOutlineShadowDrawing()
   275 	{
   276 	}
   277 
   278 CTOutlineShadowDrawing::CTOutlineShadowDrawing()
   279 	{
   280 	SetTestStepName(KTOutlineShadowDrawing);
   281 	}
   282 
   283 /** 
   284 Override of base class pure virtual
   285 Our implementation only gets called if the base class doTestStepPreambleL() did
   286 not leave. That being the case, the current test result value will be EPass.
   287 
   288 Takes Font Face from uibench.ini file and pass that value to functions.
   289 It also Rotates the screen before calling test functions.
   290 
   291 @return TVerdict code
   292 */	
   293 TVerdict CTOutlineShadowDrawing::doTestStepL()
   294 	{	
   295 	TPtrC fontface;
   296 
   297 	TBool returnValue1 = GetStringFromConfig(ConfigSection(), KFontTypeface, fontface);
   298 	if(returnValue1)
   299 		{
   300 		INFO_PRINTF1(_L("OutlineShadowDrawing"));
   301 		iGc->Reset();
   302 		TBool orientation[4];
   303 		SetTestStepID(_L("GRAPHICS-UI-BENCH-0147"));
   304 		DoGetAPIsOutlineandShadowFontsL(fontface, 0, ETrue, ETrue);
   305 		DoGetAPIsOutlineandShadowFontsL(fontface, 0, ETrue, EFalse);
   306 		DoGetAPIsOutlineandShadowFontsL(fontface, 0, EFalse, ETrue);
   307 		DoGetAPIsOutlineandShadowFontsL(fontface, 0, EFalse, EFalse);
   308 		RecordTestResultL();
   309 
   310 		for(TInt dispModeIndex = 0; dispModeIndex < KNumValidDisplayModes; dispModeIndex++)
   311 			{
   312 			SetScreenModeL(KValidDisplayModes[dispModeIndex]);
   313 			iDev = &iScreenDevice->BitmapDevice();
   314 			iGc->OrientationsAvailable(orientation);
   315 			for (TInt orient = CFbsBitGc::EGraphicsOrientationNormal; orient <= CFbsBitGc::EGraphicsOrientationRotated270; orient++)
   316 				{
   317 				iGc->SetOrientation((CFbsBitGc::TGraphicsOrientation)orient);
   318 				// Draw Text - without transperency
   319 				SetTestStepID(_L("GRAPHICS-UI-BENCH-0148"));
   320 				DoDrawTextOutlineShadowL(fontface, orient, KRgbGreen, ETrue, ETrue, dispModeIndex);
   321 				DoDrawTextOutlineShadowL(fontface, orient, KRgbGreen, EFalse, ETrue, dispModeIndex);
   322 				DoDrawTextOutlineShadowL(fontface, orient, KRgbGreen, ETrue, EFalse, dispModeIndex);
   323 				DoDrawTextOutlineShadowL(fontface, orient, KRgbGreen, EFalse, EFalse, dispModeIndex);
   324 				RecordTestResultL();
   325 				// Draw Vertical Text - without transperency
   326 				SetTestStepID(_L("GRAPHICS-UI-BENCH-0149"));
   327 				DoDrawVerticalTextOutlineShadowL(fontface, orient, KRgbRed, ETrue, ETrue, dispModeIndex);
   328 				DoDrawVerticalTextOutlineShadowL(fontface, orient, KRgbRed, ETrue, EFalse, dispModeIndex);
   329 				DoDrawVerticalTextOutlineShadowL(fontface, orient, KRgbRed, EFalse, ETrue, dispModeIndex);
   330 				DoDrawVerticalTextOutlineShadowL(fontface, orient, KRgbRed, EFalse, EFalse, dispModeIndex);
   331 				RecordTestResultL();
   332 				// Transperency tests - Draw Text
   333 				SetTestStepID(_L("GRAPHICS-UI-BENCH-0148"));
   334 				DoDrawTextOutlineShadowL(fontface, orient, TRgb(128, 128, 128, 120), ETrue, ETrue, dispModeIndex);
   335 				DoDrawTextOutlineShadowL(fontface, orient, TRgb(128, 128, 128, 120), EFalse, ETrue, dispModeIndex);
   336 				DoDrawTextOutlineShadowL(fontface, orient, TRgb(128, 128, 128, 120), ETrue, EFalse, dispModeIndex);
   337 				DoDrawTextOutlineShadowL(fontface, orient, TRgb(128, 128, 128, 120), EFalse, EFalse, dispModeIndex);
   338 				RecordTestResultL();
   339 				// Transperency tests - Draw Vertical Text
   340 				SetTestStepID(_L("GRAPHICS-UI-BENCH-0149"));
   341 				DoDrawVerticalTextOutlineShadowL(fontface, orient, TRgb(128, 128, 0, 20), ETrue, ETrue, dispModeIndex);
   342 				DoDrawVerticalTextOutlineShadowL(fontface, orient, TRgb(128, 128, 0, 20), ETrue, EFalse, dispModeIndex);
   343 				DoDrawVerticalTextOutlineShadowL(fontface, orient, TRgb(128, 128, 0, 20), EFalse, ETrue, dispModeIndex);
   344 				DoDrawVerticalTextOutlineShadowL(fontface, orient, TRgb(128, 128, 0, 20), EFalse, EFalse, dispModeIndex);					
   345 				RecordTestResultL();
   346 				}
   347 			iGc->SetOrientation(CFbsBitGc::EGraphicsOrientationNormal);
   348 			}
   349 		}
   350 	else
   351 		{
   352 		INFO_PRINTF1(_L("ERROR WHILE READING CONFIG FILE"));
   353 		User::Leave(returnValue1);
   354 		}
   355 	return TestStepResult();
   356 	}
   357 
   358 /**
   359 Override of base class pure virtual
   360 
   361 @return - TVerdict code
   362 */
   363 TVerdict CTOutlineShadowDrawing::doTestStepPreambleL()
   364 	{
   365 	CTe_graphicsperformanceSuiteStepBase::doTestStepPreambleL();
   366 	SetScreenModeL(EColor16MU);
   367 	iDev = &iScreenDevice->BitmapDevice();
   368 	return TestStepResult();
   369 	}