os/graphics/graphicstest/uibench/src/tdirectgdiperf.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 "tdirectgdiperf.h"
    23 #include <graphics/directgdidriver.h>
    24 #include <graphics/directgdicontext.h>
    25 #include <graphics/directgdiimagetarget.h>
    26 #ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
    27 #include <graphics/sgimage.h>
    28 
    29 // The number of iterations to perform for each test in this suite.
    30 const TInt KIterationsToTest = 1000;
    31 
    32 _LIT(KTileBitmap, "z:\\system\\data\\uibench_tile.mbm");
    33 #endif
    34 
    35 CTDirectGdiPerf::CTDirectGdiPerf()
    36 	{
    37 	SetTestStepName(KTDirectGdiPerfTest);
    38 	}
    39 
    40 CTDirectGdiPerf::~CTDirectGdiPerf()
    41 	{
    42 	}
    43 
    44 /**
    45 Override of base class pure virtual
    46 Our implementation only gets called if the base class doTestStepPreambleL() did
    47 not leave. That being the case, the current test result value will be EPass.
    48 
    49 @return - TVerdict code
    50 */
    51 TVerdict CTDirectGdiPerf::doTestStepL()
    52 	{
    53 #ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
    54     INFO_PRINTF1(_L("CTDirectGdiPerf can only be run with RSgImage legacy"));
    55     return TestStepResult();
    56 #else
    57 	iContext = CDirectGdiContext::NewL(*iDGdiDriver);
    58 	iDGdiImageTarget->Close();
    59 		
    60 	// for each display mode
    61 	for(TInt dispModeIndex = 0; dispModeIndex < iTargetPixelFormatArray.Count(); ++dispModeIndex)
    62 		{
    63 		iDisplayMode = TDisplayModeMapping::MapPixelFormatToDisplayMode(iTargetPixelFormatArray[dispModeIndex]);
    64 		
    65 		SetTestStepID(_L("GRAPHICS-UI-BENCH-0095"));
    66 		CreatingTargetsL();
    67 		RecordTestResultL();
    68 		SetTestStepID(_L("GRAPHICS-UI-BENCH-0096"));
    69 		MakeCurrentOnDifferentFormatTargetL();
    70 		RecordTestResultL();
    71 		SetTestStepID(_L("GRAPHICS-UI-BENCH-0097"));
    72 		MakeCurrentOnSameFormatTargetL();
    73 		RecordTestResultL();
    74 		}
    75 	
    76 	delete iContext;
    77 	iContext = NULL;
    78 	
    79     CloseTMSGraphicsStep();
    80 	return TestStepResult();
    81 #endif	
    82 	}
    83 
    84 #ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
    85 /**
    86 @SYMTestCaseID
    87 GRAPHICS-UI-BENCH-0095
    88 
    89 @SYMPREQ PREQ39
    90 
    91 @SYMREQ REQ9236 
    92 @SYMREQ REQ9237
    93 
    94 @SYMTestCaseDesc
    95 Tests how long it takes to create, activate and destroy a DirectGDI target.
    96 
    97 @SYMTestActions
    98 Setup an RSgImage for the target to be constructed from.
    99 For KIterationsToTest, create an image target, activate the context on it, and close the target.
   100 Cleanup.
   101 
   102 @SYMTestExpectedResults
   103 The time taken to perform the creation/destruction of the test to be logged.
   104 The driver should report no errors.
   105 */
   106 void CTDirectGdiPerf::CreatingTargetsL()
   107 	{
   108 	TInt result = KErrNone;
   109 	_LIT(KTestName, "CreatingTargets");
   110 	
   111 	RSgImage rsgImage;		
   112 	// Set the bitmap up...
   113 	TSgImageInfo imageInfo;
   114 	imageInfo.iSizeInPixels = TSize (320, 240);
   115 	imageInfo.iPixelFormat = TDisplayModeMapping::MapDisplayModeToPixelFormat(iDisplayMode);
   116 	imageInfo.iUsage = ESgUsageDirectGdiTarget;
   117 	result = rsgImage.Create(imageInfo, NULL,0);
   118 	TESTL(result == KErrNone);
   119 	CleanupClosePushL(rsgImage);
   120 	
   121 	iProfiler->InitResults();
   122 	for(TInt lc=KIterationsToTest; lc>0; --lc)
   123 		{		
   124 		RDirectGdiImageTarget dgdiImageTarget(*iDGdiDriver);
   125 		TESTNOERRORL(dgdiImageTarget.Create(rsgImage));
   126 		TESTNOERRORL(iContext->Activate(dgdiImageTarget));
   127 		
   128 		dgdiImageTarget.Close();
   129 		iProfiler->MarkResultSetL();
   130 		}
   131 	TESTNOERRORL(iDGdiDriver->GetError());
   132 	
   133 	CleanupStack::PopAndDestroy(1, &rsgImage);
   134 	
   135 	
   136 	iProfiler->ResultsAnalysis(KTestName, 0, iDisplayMode, iDisplayMode, KIterationsToTest);	
   137 	}
   138 
   139 /**
   140 @SYMTestCaseID
   141 GRAPHICS-UI-BENCH-0096
   142 
   143 @SYMPREQ PREQ39
   144 
   145 @SYMREQ REQ9236 
   146 @SYMREQ REQ9237
   147 
   148 @SYMTestCaseDesc
   149 Tests how long it takes to make a different target current on the context after performing
   150 some drawing on a previous target. The two targets have different pixel formats.
   151 
   152 @SYMTestActions
   153 Initialise the DirectGDI driver.
   154 Create a context.
   155 Setup an RSgImage for the target to be constructed from.
   156 For KIterationsToTest, create two targets, activate and draw to the first one,
   157 then start the timer and activate the second target.
   158 Cleanup.
   159 
   160 @SYMTestExpectedResults
   161 The time taken to perform the test should be logged.
   162 The driver should report no errors.
   163 */
   164 void CTDirectGdiPerf::MakeCurrentOnDifferentFormatTargetL()
   165 	{
   166 	_LIT(KTestName, "MakeCurrentOnDifferentTargets");
   167 	DoMakeCurrentTestL(KTestName(), EFalse);
   168 	}
   169 
   170 /**
   171 @SYMTestCaseID
   172 GRAPHICS-UI-BENCH-0097
   173 
   174 @SYMPREQ PREQ39
   175 
   176 @SYMREQ REQ9236 
   177 @SYMREQ REQ9237
   178 
   179 @SYMTestCaseDesc
   180 Tests how long it takes to make a different target current on the context after performing
   181 some drawing on a previous target. The targets have the same pixel formats.
   182 
   183 @SYMTestActions
   184 Setup an RSgImage for the target to be constructed from.
   185 For KIterationsToTest, create two targets, activate and draw to the first one,
   186 then start the timer and activate the second target.
   187 Cleanup.
   188 
   189 @SYMTestExpectedResults
   190 The time taken to perform the test should be logged.
   191 The driver should report no errors.
   192 */
   193 void CTDirectGdiPerf::MakeCurrentOnSameFormatTargetL()
   194 	{
   195 	_LIT(KTestName, "MakeCurrentOnSameFormatTarget");		
   196 	DoMakeCurrentTestL(KTestName(), ETrue);
   197 	}
   198 
   199 
   200 /**
   201 Helper function to share the common code for the MakeCurrent() tests.
   202 
   203 @param aTestName The name of the test being run, for logging.
   204 @param aMatchingFormats If ETrue, will only run the test when the source and target display modes are 
   205        the same. If EFalse, will only run the test if the source and target display modes are different.
   206 */
   207 void CTDirectGdiPerf::DoMakeCurrentTestL(TPtrC aTestName, TBool aMatchingFormats)
   208 	{
   209 	TInt result = KErrNone;
   210 	RSgImage rsgImage1;
   211 	RSgImage rsgImage2;
   212 	
   213 	// Use the other target display modes for the second pixel format. 
   214 	for(TInt dispModeIndex = 0; dispModeIndex < iTargetPixelFormatArray.Count(); ++dispModeIndex)
   215 		{
   216 		const TDisplayMode displayModeOther = TDisplayModeMapping::MapPixelFormatToDisplayMode(iTargetPixelFormatArray[dispModeIndex]);
   217 		if (aMatchingFormats && displayModeOther != iDisplayMode) continue;
   218 		if (!aMatchingFormats && displayModeOther == iDisplayMode) continue;
   219 	
   220 		// Set the bitmap up...
   221 		TSgImageInfo imageInfo;
   222 		imageInfo.iSizeInPixels = TSize (150, 150);
   223 		imageInfo.iPixelFormat = TDisplayModeMapping::MapDisplayModeToPixelFormat(displayModeOther);
   224 		imageInfo.iUsage = ESgUsageDirectGdiTarget;
   225 		result = rsgImage1.Create(imageInfo, NULL,0);
   226 		TESTL(result == KErrNone);
   227 		CleanupClosePushL(rsgImage1);
   228 	
   229 		imageInfo.iPixelFormat = TDisplayModeMapping::MapDisplayModeToPixelFormat(iDisplayMode);
   230 		result = rsgImage2.Create(imageInfo, NULL,0);
   231 		TESTL(result == KErrNone);
   232 		CleanupClosePushL(rsgImage2);
   233 		
   234 		CFbsBitmap* bitmap1 = LoadBitmapL(KTileBitmap, 0);	
   235 		CleanupStack::PushL(bitmap1);
   236 		CFbsBitmap* bitmap2 = LoadBitmapL(KTileBitmap, 0);		
   237 		CleanupStack::PushL(bitmap2);
   238 		
   239 		RDirectGdiImageTarget dgdiImageTarget1(*iDGdiDriver);
   240 		RDirectGdiImageTarget dgdiImageTarget2(*iDGdiDriver);
   241 		
   242 		iProfiler->InitResults();
   243 		for(TInt lc=KIterationsToTest; lc>0; --lc)
   244 			{			
   245 			result = dgdiImageTarget1.Create(rsgImage1);
   246 			TESTL(result == KErrNone);
   247 			CleanupClosePushL(dgdiImageTarget1);
   248 			result = dgdiImageTarget2.Create(rsgImage2);
   249 			TESTL(result == KErrNone);
   250 			CleanupClosePushL(dgdiImageTarget2);					
   251 	
   252 			result = iContext->Activate (dgdiImageTarget1);		
   253 			TESTL(result == KErrNone);
   254 			
   255 			iContext->Reset();
   256 			iContext->Clear();
   257 			iContext->BitBlt(TPoint(20, 20), *bitmap1);		
   258 			
   259 			iProfiler->StartTimer();
   260 			result = iContext->Activate (dgdiImageTarget2);
   261 			TESTL(result == KErrNone);
   262 			iProfiler->MarkResultSetL();
   263 			
   264 			iContext->Reset();
   265 			iContext->Clear();
   266 			iContext->BitBlt(TPoint(30, 30), *bitmap2);
   267 			
   268 			// Close the targets.
   269 			CleanupStack::PopAndDestroy(2, &dgdiImageTarget1);
   270 			}
   271 		TESTNOERRORL(iDGdiDriver->GetError());
   272 		
   273 		CleanupStack::PopAndDestroy(4, &rsgImage1);		
   274 		iProfiler->ResultsAnalysis(aTestName, 0, displayModeOther, iDisplayMode, KIterationsToTest);
   275 		}
   276 	}
   277 #endif