diff -r 000000000000 -r 5d03bc08d59c graphicstest/uibench/src/tgraphicsresource.cpp --- /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 +#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