fbs/fontandbitmapserver/tfbs/TRalc.cpp
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fbs/fontandbitmapserver/tfbs/TRalc.cpp	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,511 @@
+// Copyright (c) 1997-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:
+//
+
+#include "FbsRalc.h"
+#include "UTILS.H"
+#include "TRalc.h"
+#include "fbsmessage.h"
+#include "fbsdefs.h"
+
+_LIT(KMbmFileEikon, "z:\\System\\Data\\tfbs_file4.mbm");
+_LIT(KMbmFileTechview, "z:\\System\\Data\\tfbs_file5.mbm");
+_LIT(KMbmFileTechviewU,"Z:\\SYSTEM\\DATA\\TFBS_FILE5.MBM");
+_LIT(KMbmFileLafcurs, "z:\\System\\Data\\tfbs_file2.mbm");
+_LIT(KMbmFileShell, "z:\\System\\Data\\tfbs_file1.mbm");
+_LIT(KMbmFileShel, "z:\\System\\Data\\tfbs_file_.mbm");
+_LIT(KMbmFileTimew, "z:\\System\\Data\\tfbs_file3.mbm");
+
+_LIT(KMbmFileLafcursLong, "z:\\siuhsiughighifhgidfhguifhguidhfguifhghlarglaghghghghghkrjghszkjg\\System\\Data\\tfbs_file2.mbm");
+_LIT(KMbmFileShellLong, "z:\\siuhsiughighifhgidfhguifhguidhfguifhghlarglaghghghghghkrjghszkjg\\System\\Data\\tfbs_file1.mbm");
+
+// ============================================================================
+
+CTRalc::CTRalc(CTestStep* aStep):
+	CTGraphicsBase(aStep),
+	iHandle(0),
+	iFbs(NULL),
+	iResourceCount(0),
+	iAllocs(0)
+	{
+	}
+
+CTRalc::~CTRalc()
+	{
+	if(iShutdownFbs)
+		RFbsSession::GetSession()->SendCommand(EFbsMessShutdown);
+	RFbsSession::Disconnect();
+	}
+
+void CTRalc::ConstructL()
+	{
+	if(RFbsSession::Connect()==KErrNone)
+		{
+		iShutdownFbs = EFalse;
+		}
+	else
+		{
+		FbsStartup();
+		RFbsSession::Connect();
+		iShutdownFbs = ETrue;
+		}
+
+	iFbs = RFbsSession::GetSession();
+
+	TRAPD(err,ExpandCleanupStackL());
+	if (err != KErrNone)
+		User::Panic(_L("CleanupStack expansion failed"),err);
+
+	INFO_PRINTF1(_L("FBS Client RALC testing"));
+	}
+
+void CTRalc::ExpandCleanupStackL()
+	{
+	TInt count=0;
+	for(;count<10;count++)
+		CleanupStack::PushL((TUint32*)0x1);
+	CleanupStack::Pop(count);
+	}
+
+/**
+	@SYMTestCaseID
+	GRAPHICS-FBSERV-0604
+
+	@SYMTestCaseDesc
+	Tests the creation of CFbsRalCacheEl objects.
+
+	@SYMTestActions
+	1. Test the API on a default built element object.
+	2. Test a New'd element object followed by delete.
+	3. Test a New'd element object followed by destroy & free.
+	4. Test matching of an element object.	
+	
+	@SYMTestExpectedResults
+	Test should pass
+*/
+void CTRalc::TestRALCEntryClass()
+	{
+	INFO_PRINTF1(_L("Test of CFbsRalCacheEl API"));
+
+	// Test the API on a defaultly built element object
+		{
+		CFbsRalCacheEl elOne;
+		TEST(elOne.iAddress == 0);
+		TEST(elOne.iFilename == 0);
+	
+		// Test matching method
+		TBool r1 = EFalse;
+		r1 = elOne.MatchKey (KMbmFileEikon);
+		TEST(r1 == EFalse);
+
+		// Test destruction
+		}
+
+	// Test a New'd element object followed by delete
+		{
+		CFbsRalCacheEl *elTwo = 0;
+		elTwo = CFbsRalCacheEl::New(KMbmFileTimew, (TAny*)0x58001000);
+		TEST(elTwo != 0);
+		TEST(elTwo->iFilename->CompareF(KMbmFileTimew) == 0);
+		TEST(elTwo->iAddress == (TAny*)0x58001000);
+
+		delete elTwo;
+		}
+	
+	// Test a New'd element object followed by destroy & free
+		{
+		CFbsRalCacheEl *elThree = 0;
+		elThree = CFbsRalCacheEl::New(KMbmFileLafcursLong,  (TAny*)0x58002000);
+		TEST(elThree != 0);
+		TEST(elThree->iFilename->CompareF(KMbmFileLafcursLong) == 0);
+		TEST(elThree->iAddress == (TAny*)0x58002000);
+
+		elThree->~CFbsRalCacheEl();
+		TEST(elThree->iFilename == 0);
+		CFbsRalCacheEl::FreeOnly(elThree);
+		TEST(elThree == 0);
+		}
+
+	// Test matching of an element object
+		{
+		CFbsRalCacheEl *elFour = 0;
+		elFour = CFbsRalCacheEl::New(KMbmFileTechview,  (TAny*)0x58003000);
+		TEST(elFour != 0);
+
+		TBool r2 = EFalse;
+		r2 = elFour->MatchKey (KMbmFileEikon);
+		TEST(r2 == EFalse);
+
+		r2 = elFour->MatchKey (KMbmFileTechview);
+		TEST(r2);
+
+		r2 = elFour->MatchKey(KMbmFileTechviewU);
+		TEST(r2);
+
+		delete elFour;
+		}
+	}
+
+/**
+	@SYMTestCaseID
+	GRAPHICS-FBSERV-0605
+
+	@SYMTestCaseDesc
+	Tests the RALC Cache class.
+
+	@SYMTestActions
+	Connect to the file server. Creates a CFbsRalCache
+	object on the heap. Deletes the object.
+	Test the lookup facility of the cache with overflow.
+	
+	@SYMTestExpectedResults
+	Test should pass
+*/
+void CTRalc::TestRALCCacheClass()
+	{
+	RFs fileServer;
+	TInt ret;
+
+	ret = fileServer.Connect();
+	TEST(ret==KErrNone);
+
+	INFO_PRINTF1(_L("Test of CFbsRalCache API"));
+
+	// Test the construction/destruction API
+		{
+		CFbsRalCache* cache1 = CFbsRalCache::New(0, fileServer);
+		TEST(cache1 == 0);
+
+		cache1 = CFbsRalCache::New(5, fileServer);
+		TEST(cache1 != 0);
+		TEST(cache1->Count() == 0);
+		TEST(cache1->Length() == 5);
+
+		delete cache1;
+		}
+
+	// Test the lookup facility of the cache with overflow
+		{
+		CFbsRalCache* cache2 = CFbsRalCache::New(2, fileServer);
+
+		TAny* p1;
+		p1 = cache2->Lookup(KMbmFileLafcurs);
+		TEST(p1 != 0);
+		TEST(cache2->Count() == 1);
+
+		p1 = cache2->Lookup(KMbmFileShel);
+		TEST(p1 == 0);
+		TEST(cache2->Count() == 1);
+
+		p1 = cache2->Lookup(KMbmFileShell);
+		TEST(p1 != 0);
+		TEST(cache2->Count() == 2);
+
+		p1 = cache2->Lookup(KMbmFileEikon);
+		TEST(p1 != 0);
+		TEST(cache2->Count() == 2);
+
+		delete cache2;
+		}
+
+	fileServer.Close();
+	}
+
+/**
+	@SYMTestCaseID
+	GRAPHICS-FBSERV-0606
+
+	@SYMTestCaseDesc
+	Tests Out Of Memory conditions for the CFbsRalCache class.
+
+	@SYMTestActions
+	Connects to the file server. Sets a macro
+	that makes heap allocation fail after a certain
+	number of heap allocations. Creates a CFbsRalCache
+	object on the heap. Deletes the object. Closes the file
+	server handle.
+	
+	@SYMTestExpectedResults
+	Test should pass
+*/
+void CTRalc::TestOOMCondition()
+	{
+	RFs fileServer;
+	TInt ret;
+	ret = fileServer.Connect();
+	TEST(ret==KErrNone);
+
+	INFO_PRINTF1(_L("Test of CFbsRalCache and OOM"));
+
+	for (TInt count = 1; ; count++)
+        {
+        __UHEAP_SETFAIL(RHeap::EDeterministic,count);
+        __UHEAP_MARK;
+
+		CFbsRalCache* cache = 0;
+		cache = CFbsRalCache::New(4, fileServer);
+
+		if (cache == 0)
+            {
+            __UHEAP_MARKEND;
+            }
+        else 
+            {
+            delete cache;
+            __UHEAP_MARKEND;
+        	__UHEAP_SETFAIL(RHeap::ENone,count);
+            break;
+            }
+        }
+	
+	fileServer.Close();
+	}
+
+/**
+	@SYMTestCaseID
+	GRAPHICS-FBSERV-0607
+
+	@SYMTestCaseDesc
+	Intended to measure performance of bitmap loading.
+
+	@SYMTestActions
+	Creates to CFbsBitmap objects on the stack and
+	loads a bitmap file in to objects in a loop.
+	Test case is not complete.
+	
+	@SYMTestExpectedResults
+	No test result is given in the function.
+*/
+void CTRalc::MeasurePerformanceWith2()
+	{
+	TInt loopI;
+	CFbsBitmap bitmap1;
+	CFbsBitmap bitmap2;
+
+	INFO_PRINTF1(_L("Performance Test with 2 Lookups"));
+
+	for (loopI=0; loopI<2700; loopI++)
+		bitmap1.Load(KMbmFileLafcurs, 0, EFalse);	
+
+	for (loopI=0; loopI<600; loopI++)
+		bitmap2.Load(KMbmFileShell, 0, EFalse);	
+
+/*	RDebug::ProfileEnd(10);
+	TProfile profile;
+    RDebug::ProfileResult(&profile,10,1);
+	RDebug::Print(_L("Performance test end %d.%d s\n"),profile.iTime/1000000,(profile.iTime/1000)%1000); */
+	}
+
+/**
+	@SYMTestCaseID
+	GRAPHICS-FBSERV-0609
+
+	@SYMTestCaseDesc
+	Intended to measure performance of bitmap loading.
+
+	@SYMTestActions
+	Creates to CFbsBitmap objects on the stack and
+	loads a bitmap file in to objects in a loop.
+	Test case is not complete.
+	
+	@SYMTestExpectedResults
+	No test result is given in the function.
+*/
+void CTRalc::MeasurePerformanceWith2Long()
+	{
+	TInt loopI;
+	CFbsBitmap bitmap1;
+	CFbsBitmap bitmap2;
+
+	INFO_PRINTF1(_L("Performance Test with 2 LONG Lookups"));
+//	RDebug::ProfileReset(10, 1);
+//	RDebug::ProfileStart(10);
+
+	for (loopI=0; loopI<2700; loopI++)
+		(void)bitmap1.Load(KMbmFileLafcursLong, 0, EFalse);	
+
+	for (loopI=0; loopI<600; loopI++)
+		(void)bitmap2.Load(KMbmFileShellLong, 0, EFalse);	
+
+/*	RDebug::ProfileEnd(10);
+	TProfile profile;
+    RDebug::ProfileResult(&profile,10,1);
+	RDebug::Print(_L("Performance test end %d.%d s\n"),profile.iTime/1000000,(profile.iTime/1000)%1000); */
+	}
+	
+/**
+	@SYMTestCaseID
+	GRAPHICS-FBSERV-0608
+
+	@SYMTestCaseDesc
+	Intended to measure performance of bitmap loading.
+
+	@SYMTestActions
+	Creates five CFbsBitmap objects on the stack and
+	loads different bitmap files in to the objects in a loop.
+	
+	@SYMTestExpectedResults
+	No test result is given in the function.
+*/
+void CTRalc::MeasurePerformanceWith5()
+	{
+	TInt loopI;
+	CFbsBitmap bitmap1;
+	CFbsBitmap bitmap2;
+	CFbsBitmap bitmap3;
+	CFbsBitmap bitmap4;
+	CFbsBitmap bitmap5;
+
+	INFO_PRINTF1(_L("Performance Test with 5 Lookups"));
+//	RDebug::ProfileReset(10, 1);
+//	RDebug::ProfileStart(10);
+
+	for (loopI=0; loopI<500; loopI++)
+		bitmap1.Load(KMbmFileEikon, 0, EFalse);
+
+	for (loopI=0; loopI<200; loopI++)
+		bitmap2.Load(KMbmFileTechview, 0, EFalse);	
+
+	for (loopI=0; loopI<2700; loopI++)
+		bitmap3.Load(KMbmFileLafcurs, 0, EFalse);	
+
+	for (loopI=0; loopI<600; loopI++)
+		bitmap4.Load(KMbmFileShell, 0, EFalse);	
+
+	for (loopI=0; loopI<1100; loopI++)
+		bitmap5.Load(KMbmFileTimew, 0, EFalse);	
+
+/*	RDebug::ProfileEnd(10);
+	TProfile profile;
+    RDebug::ProfileResult(&profile,10,1);
+	RDebug::Print(_L("Performance test end %d.%d s\n"),profile.iTime/1000000,(profile.iTime/1000)%1000); */
+	}
+
+/**
+	@SYMTestCaseID
+	GRAPHICS-FBSERV-0610
+
+	@SYMTestCaseDesc
+	Intended to measure performance of bitmap loading.
+
+	@SYMTestActions
+	Creates five CFbsBitmap objects on the stack and
+	loads different bitmap files in to the objects in a loop.
+	
+	@SYMTestExpectedResults
+	No test result is given in the function.
+*/
+void CTRalc::MeasurePerformanceWith23Mix()
+	{
+	TInt loopI;
+	CFbsBitmap bitmap1;
+	CFbsBitmap bitmap2;
+	CFbsBitmap bitmap3;
+	CFbsBitmap bitmap4;
+	CFbsBitmap bitmap5;
+
+	INFO_PRINTF1(_L("Performance Test with 2/3 Mix of Lookups"));
+//	RDebug::ProfileReset(10, 1);
+//	RDebug::ProfileStart(10);
+
+	for (loopI=0; loopI<500; loopI++)
+		bitmap1.Load(KMbmFileEikon, 0, EFalse);
+
+	for (loopI=0; loopI<200; loopI++)
+		bitmap2.Load(KMbmFileTechview, 0, EFalse);	
+
+	for (loopI=0; loopI<2700; loopI++)
+		bitmap3.Load(KMbmFileLafcursLong, 0, EFalse);	
+
+	for (loopI=0; loopI<600; loopI++)
+		bitmap4.Load(KMbmFileShellLong, 0, EFalse);	
+
+	for (loopI=0; loopI<1100; loopI++)
+		bitmap5.Load(KMbmFileTimew, 0, EFalse);	
+
+/*	RDebug::ProfileEnd(10);
+	TProfile profile;
+    RDebug::ProfileResult(&profile,10,1);
+	RDebug::Print(_L("Performance test end %d.%d s\n"),profile.iTime/1000000,(profile.iTime/1000)%1000);*/
+	}
+
+void CTRalc::RunTestCaseL(TInt aCurTestCase)
+	{
+	TUint32* romAddress = NULL;
+	if(!CFbsBitmap::IsFileInRom(KMbmFileEikon, romAddress)) //check any rom bitmap
+		{
+		INFO_PRINTF2(_L("Skipping CFbsRalCache tests since file \"%S\" is reported to not be a ROM bitmap."),
+				&KMbmFileEikon);
+		INFO_PRINTF1(_L("This should only occur on non-XIP ROMs, e.g. NAND ROMs, where ROM bitmaps aren't supported."));
+		TestComplete();
+		}
+	else
+		{
+		((CTRalcStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+		switch(aCurTestCase)
+			{
+		case 1:
+			((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0604"));
+			TestRALCEntryClass();
+			break;
+		case 2:
+			((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0605"));
+			TestRALCCacheClass();
+			break;
+		case 3:
+			((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0606"));
+			TestOOMCondition();
+			break;
+		case 4:
+			((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0607"));
+			MeasurePerformanceWith2();
+			break;
+		case 5:
+			((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0608"));
+			MeasurePerformanceWith5();
+			break;
+		case 6:
+			((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0609"));
+			MeasurePerformanceWith2Long();
+			break;
+		case 7:
+			((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0610"));
+			MeasurePerformanceWith23Mix();
+			break;
+		case 8:
+			((CTRalcStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+			((CTRalcStep*)iStep)->CloseTMSGraphicsStep();
+			TestComplete();
+			break;
+			}
+		((CTRalcStep*)iStep)->RecordTestResultL();
+		}
+	}
+
+//--------------
+__CONSTRUCT_STEP__(Ralc)
+
+void CTRalcStep::TestSetupL()
+	{
+	// Leaking thread handles
+	iThread.HandleCount(iStartProcessHandleCount, iStartThreadHandleCount);
+	}
+	
+void CTRalcStep::TestClose()
+	{
+	// Check for open handles
+	iThread.HandleCount(iEndProcessHandleCount, iEndThreadHandleCount);
+	if(iStartThreadHandleCount != iEndThreadHandleCount)
+		{__DEBUGGER()}							// Oops leaked some handles
+	}