graphicstest/uibench/src/tgraphicsresource.cpp
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/uibench/src/tgraphicsresource.cpp	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,309 @@
+// Copyright (c) 2005-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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code 
+*/
+
+#include "tgraphicsresource.h"
+#include "tdirectgditestbase.h"
+#ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+#include <graphics/sgimage_sw.h>
+#endif
+
+#ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+const TInt KIterationsToTest = 1000;
+#endif
+
+CTGraphicsResource::CTGraphicsResource()
+	{
+	SetTestStepName(KTGraphicsResource);
+	
+#ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+	iImageInfo.iCpuAccess = ESgCpuAccessReadWrite;
+	iImageInfo.iUsage = ESgUsageDirectGdiSource;
+	iImageInfo.iPixelFormat = EUidPixelFormatRGB_565;
+	iImageInfo.iShareable = ETrue;
+	
+	Mem::FillZ(iImageData, KMaxArraySize * sizeof(TUint16));
+	TEST(KErrNone == SgDriver::Open());
+#endif
+	}
+
+CTGraphicsResource::~CTGraphicsResource()
+	{	
+#ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+	TInt temp = SgDriver::ResourceCount();
+	SgDriver::Close();
+#endif
+	}
+
+/**
+Override of base class pure virtual
+Our implementation only gets called if the base class doTestStepPreambleL() did
+not leave. That being the case, the current test result value will be EPass.
+
+@return - TVerdict code
+*/
+TVerdict CTGraphicsResource::doTestStepL()
+	{
+#ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+    INFO_PRINTF1(_L("CTGraphicsResource can only be run with RSgImage legacy"));
+    return TestStepResult();
+#else
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0089"));
+	SmallImageCreationSimpleL();
+	RecordTestResultL();
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0090"));
+	LargeImageCreationSimpleL();
+	RecordTestResultL();
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0091"));
+	ImageDuplicateL();	
+	RecordTestResultL();
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0092"));
+	ImageDuplicateHandleL();
+	RecordTestResultL();
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0093"));
+	ImageMapL();
+	RecordTestResultL();
+    CloseTMSGraphicsStep();
+	return TestStepResult();
+#endif	
+	}
+
+#ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+/**
+Helper function.
+Creates and destroys images of the same size KIterationsToTest times.
+
+@param aWidth The width of the created bitmaps.
+@param aHeight  The height of the created bitmaps.
+@param aTestDescription The description of the test.
+*/
+void CTGraphicsResource::ImageCreationSimpleL(const TInt aWidth, const TInt aHeight, const TDesC& aTestDescription)
+	{
+	iImageInfo.iSizeInPixels = TSize(aWidth, aHeight);
+	TInt sizeInBytes = aWidth*aHeight*2;
+	RSgImage image;
+	
+	iProfiler->InitResults();	
+	for(TInt count=KIterationsToTest; count>=0; --count)
+		{
+		TInt err = image.Create(iImageInfo, NULL, 0);
+		TESTL(err == KErrNone);
+		MSgImage_Sw* data;
+		TESTNOERRORL(image.GetInterface(data));
+		Mem::Fill(data->DataAddress(), sizeInBytes, 0xFF);
+		image.Close();
+		iProfiler->MarkResultSetL();
+		}	
+	iProfiler->ResultsAnalysis(aTestDescription, TDisplayModeMapping::MapPixelFormatToDisplayMode(iImageInfo.iPixelFormat), 0, 0, KIterationsToTest);
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0089
+
+@SYMPREQ PREQ39
+
+@SYMREQ REQ9236 
+@SYMREQ REQ9237
+
+@SYMTestCaseDesc
+The test determines how long it takes to create and destroy small simple RSgImage objects.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to image construction and destruction code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per image
+*/
+void CTGraphicsResource::SmallImageCreationSimpleL()
+	{
+	ImageCreationSimpleL(32, 32, _L("Small-RSgImage-Create-64K-Simple"));
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0090
+
+@SYMPREQ PREQ39
+
+@SYMREQ REQ9236 
+@SYMREQ REQ9237
+
+@SYMTestCaseDesc
+The test determines how long it takes to create and destroy large simple RSgImage objects.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to image construction and destruction code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per image
+*/
+void CTGraphicsResource::LargeImageCreationSimpleL()
+	{
+	ImageCreationSimpleL(500, 500, _L("Large-RSgImage-Create-64K-Simple"));
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0091
+
+@SYMPREQ PREQ39
+
+@SYMREQ REQ9236 
+@SYMREQ REQ9237
+
+@SYMTestCaseDesc
+Tests how long it takes to duplicate an RSgImage.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to bitmap duplication code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per image.
+*/
+void CTGraphicsResource::ImageDuplicateL()
+	{
+	//prepare an image to duplicate
+	iImageInfo.iSizeInPixels = TSize(300, 300);
+	
+	RSgImage image;
+	TInt err = image.Create(iImageInfo, iImageData, KImageDataStride);
+	TESTL(err == KErrNone);
+	
+	iProfiler->InitResults();
+	for(TInt count=KIterationsToTest; count>=0; --count)
+		{
+		RSgImage image2;
+		err = image2.Create(iImageInfo, image);
+		TESTL(err == KErrNone);
+		image2.Close();
+		iProfiler->MarkResultSetL();
+		}	
+	iProfiler->ResultsAnalysis(_L("RSgImage-Duplicate           "), TDisplayModeMapping::MapPixelFormatToDisplayMode(iImageInfo.iPixelFormat), 0, 0, KIterationsToTest);	
+	
+	image.Close();
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0092
+
+@SYMPREQ PREQ39
+
+@SYMREQ REQ9236 
+@SYMREQ REQ9237
+
+@SYMTestCaseDesc
+Tests how long it takes to duplicate an image handle.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to image duplication code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per image.
+*/
+void CTGraphicsResource::ImageDuplicateHandleL()
+	{
+	//prepare an image to duplicate
+	iImageInfo.iSizeInPixels = TSize(300, 300);
+	
+	RSgImage image;
+	TInt err = image.Create(iImageInfo, iImageData, KImageDataStride);
+	TESTL(err == KErrNone);
+	TSgDrawableId id = image.Id();	
+	
+	iProfiler->InitResults();
+	for(TInt count=KIterationsToTest; count>=0; --count)
+		{
+		RSgImage image2;
+		err = image2.Open(id);
+		TESTL(KErrNone == err);
+		image2.Close();
+		iProfiler->MarkResultSetL();
+		}	
+	iProfiler->ResultsAnalysis(_L("RSgImage-Duplicate-Handle"), TDisplayModeMapping::MapPixelFormatToDisplayMode(iImageInfo.iPixelFormat), 0, 0, KIterationsToTest);	
+	
+	image.Close();
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0093
+
+@SYMPREQ PREQ39
+
+@SYMREQ REQ9236 
+@SYMREQ REQ9237
+
+@SYMTestCaseDesc
+Measure performance of Map() and Unmap() of an RSgImage.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to image mapping code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per image.
+*/
+void CTGraphicsResource::ImageMapL()
+	{
+	//prepare an image
+	iImageInfo.iSizeInPixels = TSize(300, 300);
+	
+	RSgImage image;
+	TInt err = image.Create(iImageInfo, iImageData, KImageDataStride);
+	TESTL(err == KErrNone);
+	
+	const TAny* dataAddressRead;
+	TAny* dataAddressWrite;
+	TInt dataStride;
+	
+	iProfiler->InitResults();
+	for(TInt count=KIterationsToTest; count>=0; --count)
+		{
+		err = image.MapReadOnly(dataAddressRead, dataStride);
+		TESTL(err == KErrNone);
+		image.Unmap();
+		iProfiler->MarkResultSetL();
+		}	
+	iProfiler->ResultsAnalysis(_L("RSgImage-MapReadOnly          "), TDisplayModeMapping::MapPixelFormatToDisplayMode(iImageInfo.iPixelFormat), 0, 0, KIterationsToTest);	
+	
+	iProfiler->InitResults();
+	for(TInt count=KIterationsToTest; count>=0; --count)
+		{
+		err = image.MapWriteOnly(dataAddressWrite, dataStride);
+		TESTL(err == KErrNone);
+		image.Unmap();
+		iProfiler->MarkResultSetL();
+		}	
+	iProfiler->ResultsAnalysis(_L("RSgImage-MapWriteOnly          "), TDisplayModeMapping::MapPixelFormatToDisplayMode(iImageInfo.iPixelFormat), 0, 0, KIterationsToTest);
+	
+	iProfiler->InitResults();
+	for(TInt count=KIterationsToTest; count>=0; --count)
+		{
+		err = image.MapReadWrite(dataAddressWrite, dataStride);
+		TESTL(err == KErrNone);
+		image.Unmap();
+		iProfiler->MarkResultSetL();
+		}	
+	iProfiler->ResultsAnalysis(_L("RSgImage-MapReadWrite              "), TDisplayModeMapping::MapPixelFormatToDisplayMode(iImageInfo.iPixelFormat), 0, 0, KIterationsToTest);
+	
+	image.Close();
+	}
+#endif