graphicstest/uibench/src/tfbsbitmaphandleperf.cpp
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/uibench/src/tfbsbitmaphandleperf.cpp	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,286 @@
+// 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 "tfbsbitmaphandleperf.h"
+
+const TInt KIterationsToTest = 1000;
+const TInt KMaxNumSmallTestBitmaps = 40;
+const TInt KMaxNumLargeTestBitmaps = 4;
+const TInt KNumTestBitmapSizes = 8;
+const TDisplayMode KTestDisplayMode = EColor256;
+const TDisplayMode KTestDisplayMode2 = EColor64K;
+
+
+CTFbsBitmapHandlePerf::CTFbsBitmapHandlePerf()
+	{
+	SetTestStepName(KTFbsBitmapHandlePerfName);
+	} 
+
+CTFbsBitmapHandlePerf::~CTFbsBitmapHandlePerf()
+	{
+	iTestBitmaps.ResetAndDestroy();
+	}
+
+/**
+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 CTFbsBitmapHandlePerf::doTestStepL()
+	{
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0074"));
+	SmallBitmapCreationL(KTestDisplayMode, _L("Small Bitmap-Create")); //8 bit
+	RecordTestResultL();
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0006"));
+	LargeBitmapCreationL(KTestDisplayMode, _L("Large Bitmap-Create"));
+	RecordTestResultL();
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0087"));
+	SmallBitmapCreationSimpleL();
+	RecordTestResultL();
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0088"));
+	LargeBitmapCreationSimpleL();
+	RecordTestResultL();
+	SetTestStepID(_L("GRAPHICS-UI-BENCH-0007"));
+	BitmapDuplicateL();		
+	RecordTestResultL();
+	return TestStepResult();
+	}
+
+/**
+Creates and destroys bitmaps KIterationsToTest times with various sizes
+using a pseudo-random sequence to try to simulate real usage patterns.
+
+@param aSizes Array of KNumTestBitmapSizes sizes to create bitmaps with.
+@param aMaxNumBitmaps Maximum number of created but not yet deleted bitmaps at any given time.
+@param aDisplayMode The display mode to create bitmaps with.
+*/
+void CTFbsBitmapHandlePerf::BitmapCreationL(const TSize aSizes[], TInt aMaxNumBitmaps, const TDisplayMode aDisplayMode)
+	{
+	TInt64 seed = 0;
+	iProfiler->InitResults();
+	for (TInt count = KIterationsToTest; count > 0; --count)
+		{
+		CFbsBitmap* bitmap = new(ELeave) CFbsBitmap;
+		CleanupStack::PushL(bitmap);
+		TInt err = bitmap->Create(aSizes[count % KNumTestBitmapSizes], aDisplayMode);
+		User::LeaveIfError(err);
+		iTestBitmaps.AppendL(bitmap);
+		CleanupStack::Pop(bitmap);
+		if (iTestBitmaps.Count() >= aMaxNumBitmaps)
+			{
+			TInt i = Math::Rand(seed) % aMaxNumBitmaps;
+			delete iTestBitmaps[i];
+			iTestBitmaps.Remove(i);
+			}
+		iProfiler->MarkResultSetL();
+		}
+	iTestBitmaps.ResetAndDestroy();
+	}
+
+/**
+Creates and destroys bitmaps of the same size KIterationsToTest times.
+
+@param aWidth The width of the created bitmaps.
+@param aHeight  The height of the created bitmaps.
+@param aDisplayMode The display mode to create bitmaps with.
+@param aTestDescription The description of the test.
+*/
+void CTFbsBitmapHandlePerf::BitmapCreationSimpleL(const TInt aWidth, const TInt aHeight, const TDisplayMode aDisplayMode, const TDesC& aTestDescription)
+	{
+	iProfiler->InitResults();
+	for (TInt count = KIterationsToTest; count > 0; --count)
+		{
+		CFbsBitmap bitmap;
+		TInt err = bitmap.Create(TSize(aWidth, aHeight), aDisplayMode);
+		User::LeaveIfError(err);
+		iProfiler->MarkResultSetL();
+		}
+	iProfiler->ResultsAnalysis(aTestDescription, aDisplayMode, 0, 0, KIterationsToTest);
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0074
+
+@SYMTestCaseDesc
+The test determines how long it takes to create and destroy small bitmap objects.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to bitmap construction and destruction code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per bitmap
+
+@param aDisplayMode The display mode to create bitmaps with.
+@param aTestDescription The description of the test.
+*/
+void CTFbsBitmapHandlePerf::SmallBitmapCreationL(const TDisplayMode aDisplayMode, const TDesC& aTestDescription)
+	{
+	// width X height X bytes per pixel < KMaxLargeBitmapAlloc (16KB as of writing)
+	const TSize KSmallSizes[KNumTestBitmapSizes] =
+		{
+		TSize(20, 20), // 1st
+		TSize(22, 22), // 2nd
+		TSize(24, 24), // 3rd
+		TSize(28, 28), // 4th
+		TSize(32, 32), // 5th
+		TSize(40, 40), // 6th
+		TSize(48, 48), // 7th
+		TSize(60, 60)  // 8th
+		};
+	BitmapCreationL(KSmallSizes, KMaxNumSmallTestBitmaps, aDisplayMode);
+	iProfiler->ResultsAnalysis(aTestDescription, aDisplayMode, 0, 0, KIterationsToTest);
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0006
+
+@SYMTestCaseDesc
+The test determines how long it takes to create and destroy large bitmap objects.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to bitmap construction and destruction code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per bitmap
+
+@param aDisplayMode The display mode to create bitmaps with.
+@param aTestDescription The description of the test.
+*/
+void CTFbsBitmapHandlePerf::LargeBitmapCreationL(const TDisplayMode aDisplayMode, const TDesC& aTestDescription)
+	{
+	// width X height X bytes per pixel > KMaxLargeBitmapAlloc (16KB as of writing)
+	const TSize KLargeSizes[KNumTestBitmapSizes] =
+		{
+		TSize(200, 200), // 1st
+		TSize(220, 220), // 2nd
+		TSize(240, 240), // 3rd
+		TSize(280, 280), // 4th
+		TSize(320, 320), // 5th
+		TSize(400, 400), // 6th
+		TSize(480, 480), // 7th
+		TSize(600, 600)  // 8th
+		};
+	BitmapCreationL(KLargeSizes, KMaxNumLargeTestBitmaps, aDisplayMode);
+	iProfiler->ResultsAnalysis(aTestDescription, aDisplayMode, 0, 0, KIterationsToTest);
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0007
+
+@SYMTestCaseDesc
+Tests how long it takes to duplicate a bitmap
+
+@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 bitmap
+*/
+void CTFbsBitmapHandlePerf::BitmapDuplicateL()
+	{
+	
+	TSize size(200,200);
+	TInt err;
+	
+	RArray<TInt> handles;
+	RPointerArray<CFbsBitmap> bitmapArray;
+	CleanupClosePushL(bitmapArray);
+	
+	// Create bitmaps for each display mode and store in array
+	for(TInt count=KNumValidBitmapModes-1; count>=0; --count)
+		{
+		CFbsBitmap* bitmap=new(ELeave) CFbsBitmap;
+		CleanupStack::PushL(bitmap);
+		TDisplayMode mode = KValidBitmapModes[count];
+		err = bitmap->Create(size, mode);
+		User::LeaveIfError(err);
+		User::LeaveIfError(bitmapArray.Append(bitmap));
+		CleanupStack::Pop(bitmap);
+		User::LeaveIfError(handles.Append(bitmap->Handle()));		
+		}
+	
+	// Duplicate each bitmap in the array and measure performance
+	iProfiler->InitResults();
+	for(TInt count=KIterationsToTest; count>=0; --count)
+		{
+		CFbsBitmap* duplicateBitmap=new (ELeave) CFbsBitmap;
+		CleanupStack::PushL(duplicateBitmap);
+		TInt hn=count%KNumValidBitmapModes;
+		TInt handle=handles[hn];
+		err=duplicateBitmap->Duplicate(handle);
+		User::LeaveIfError(err);
+		CleanupStack::PopAndDestroy(duplicateBitmap);
+		iProfiler->MarkResultSetL();
+		}	
+	iProfiler->ResultsAnalysis(_L("Bitmap-Duplicate"), 0, 0, 0, KIterationsToTest);	
+	
+	handles.Reset();
+	
+	bitmapArray.ResetAndDestroy();	
+	CleanupStack::PopAndDestroy(&bitmapArray);
+	}
+
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0087
+
+@SYMTestCaseDesc
+The test determines how long it takes to create and destroy small simple bitmap objects.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to bitmap construction and destruction code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per bitmap
+
+@param aDisplayMode The display mode to create bitmaps with.
+@param aTestDescription The description of the test.
+*/
+void CTFbsBitmapHandlePerf::SmallBitmapCreationSimpleL()
+	{
+	BitmapCreationSimpleL(32, 32, KTestDisplayMode2, _L("Small Bitmap-Create-64K-Simple"));
+	}
+	
+/**
+@SYMTestCaseID
+GRAPHICS-UI-BENCH-0088
+
+@SYMTestCaseDesc
+The test determines how long it takes to create and destroy large simple bitmap objects.
+
+@SYMTestActions
+Compare the results over time, and before and after changes to bitmap construction and destruction code.
+
+@SYMTestExpectedResults
+Test should pass and display total test time and time per bitmap
+
+@param aDisplayMode The display mode to create bitmaps with.
+@param aTestDescription The description of the test.
+*/
+void CTFbsBitmapHandlePerf::LargeBitmapCreationSimpleL()
+	{
+	BitmapCreationSimpleL(500, 500, KTestDisplayMode2, _L("Large Bitmap-Create-64K-Simple"));
+	}