persistentstorage/centralrepository/test/testexecute/performance/src/TE_DefectTestStep.cpp
branchRCL_3
changeset 24 cc28652e0254
parent 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/centralrepository/test/testexecute/performance/src/TE_DefectTestStep.cpp	Wed Sep 01 12:39:58 2010 +0100
@@ -0,0 +1,287 @@
+// 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:
+//
+
+#include "TE_DefectTestStep.h"
+#include "TE_PerfTestUtilities.h"
+#include <centralrepository.h>
+#include "t_cenrep_helper.h"
+#include "srvdefs.h"
+#include "srvreqs.h"
+#include <bautils.h>
+#include "cachemgr.h"
+
+#ifdef __CENTREP_SERVER_CACHETEST__
+
+const TUid KUidLargeRepository          = { 0xCCCCCC01 };
+const TUid KUidRep1						= { 0x00000100 };
+const TUid KUidLargeCreRepository       = { 0xCCCCCC02 };
+
+const TUint32 KNewInt = 1000;
+const TInt KIntValue = 1234;
+
+const TInt KNumOfAttempts = 10;
+
+_LIT(KZRep1File, 				"z:\\private\\10202BE9\\00000100.txt");
+_LIT(KCRep1TxtFile,				"c:\\private\\10202BE9\\persists\\00000100.txt");
+_LIT(KCRep1CreFile,				"c:\\private\\10202BE9\\persists\\00000100.cre");
+#endif
+
+CPerfTestDefectStep057491::CPerfTestDefectStep057491()
+	{
+	SetTestStepName(KPerfTestDefectStepDEF057491);
+	}
+	
+TVerdict CPerfTestDefectStep057491::doTestStepL()
+	{
+#ifndef __CENTREP_SERVER_CACHETEST__
+	return EPass;
+#else	
+	SetTestStepResult(EFail);
+	
+	CRepository* rep;
+	TInt64 totalRomMs=0;
+	TInt64 totalCreMs=0;
+	TInt64 totalRepWriteMs=0;
+	
+   	TUint32 startFastCounter;	
+   	TUint64 fastCounterromOpenMicroseconds;
+   	TUint64 fastCounterrepWriteMicroseconds;
+   	TUint64 fastCountercreOpenMicroseconds;
+	
+	// Flush and disable cache for this test
+	TInt r;
+	r = SetGetParameters(TIpcArgs(EDisableCache));
+	TEST(r==KErrNone);
+
+	// Time opening and writing repository
+	for(TInt i=0; i<KNumOfAttempts;i++)
+		{
+		// Get start time for ROM file
+	    startFastCounter = User::FastCounter();
+		User::LeaveIfNull(rep = CRepository::NewLC(KUidLargeRepository));
+		
+		// Get finish time for ROM file
+		fastCounterromOpenMicroseconds = FastCountToMicrosecondsInInt(User::FastCounter() - startFastCounter);
+		totalRomMs+=fastCounterromOpenMicroseconds;
+		Logger().WriteFormat(_L("Time to open large repos from ROM      file = %lu microseconds\n"), fastCounterromOpenMicroseconds);
+		
+	    startFastCounter = User::FastCounter();
+		TInt r = rep->Create(KNewInt, KIntValue);
+		fastCounterrepWriteMicroseconds = FastCountToMicrosecondsInInt(User::FastCounter() - startFastCounter);
+		totalRepWriteMs+=fastCounterrepWriteMicroseconds;
+		Logger().WriteFormat(_L("Time to write large repos              file = %lu microseconds\n"), fastCounterrepWriteMicroseconds);
+
+		TEST(r==KErrNone);
+		
+		// Close repository
+		CleanupStack::PopAndDestroy(rep);
+		
+		// Get start time and ticks for .cre file
+	    startFastCounter = User::FastCounter();
+		
+		// Open repository 
+		User::LeaveIfNull(rep = CRepository::NewLC(KUidLargeRepository));
+		
+		// Get finish time and ticks for .cre file
+		fastCountercreOpenMicroseconds  = FastCountToMicrosecondsInInt(User::FastCounter() - startFastCounter);
+		totalCreMs+=fastCountercreOpenMicroseconds;
+		Logger().WriteFormat(_L("Time to open large repos from persists file = %lu microseconds\n"), fastCountercreOpenMicroseconds);
+
+#if !defined(__WINS__) && !defined(__WINSCW__)
+		TEST(fastCounterromOpenMicroseconds>fastCountercreOpenMicroseconds);
+#endif		
+		const TUint32 	KIntKey1 		= 8847616;
+		const TInt 		KIntKey1Value 	= 1;
+		const TUint32 	KIntKey2 		= 139068928;
+		const TInt 		KIntKey2Value 	= 30;
+		const TUint32 	KIntKey3 		= 2373975808UL;
+		const TInt 		KIntKey3Value 	= -1920991488;
+		
+		// Test 3 random int key values from repository
+		TInt keyValue;
+		r=rep->Get(KIntKey1, keyValue);
+		TEST(r == KErrNone);
+		TEST(keyValue == KIntKey1Value);
+
+		r=rep->Get(KIntKey2, keyValue);
+		TEST(r == KErrNone);
+		TEST(keyValue == KIntKey2Value);
+		
+		r=rep->Get(KIntKey3, keyValue);
+		TEST(r == KErrNone);
+		TEST(keyValue == KIntKey3Value);
+		
+		// Close repository
+		CleanupStack::PopAndDestroy(rep);
+
+		CleanupFileFromCDriveL(KUidLargeRepository);
+		}
+	
+	Logger().WriteFormat(_L("Average time to open large repos from ROM      file = %lu ms\n"), totalRomMs/KNumOfAttempts);
+	Logger().WriteFormat(_L("Average time to open large repos from persists file = %lu ms\n"), totalCreMs/KNumOfAttempts);		
+	Logger().WriteFormat(_L("Average time to write large repos to  persists file = %lu ms\n"), totalRepWriteMs/KNumOfAttempts);		
+
+	RFs fs;			
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	CFileMan* fm = CFileMan::NewL(fs);
+	CleanupStack::PushL(fm);
+	// Copy a repository txt file to the C:
+	User::LeaveIfError(fm->Copy(KZRep1File, KCPersistsDir));
+	// Reset read-only bit
+	User::LeaveIfError(fm->Attribs(KCRep1TxtFile,0,KEntryAttReadOnly,TTime(0)));
+	// Check it exists
+	TEST( BaflUtils::FileExists (fs, KCRep1TxtFile));	
+	
+	// Open repository
+	User::LeaveIfNull(rep = CRepository::NewLC(KUidRep1));
+	
+	// Create a setting
+	r = rep->Create(KNewInt, KIntValue);
+	TEST(r == KErrNone);
+	
+	// Check persists file exists
+	TEST(BaflUtils::FileExists (fs, KCRep1CreFile));	
+
+	// Check that .txt file is gone	
+	TEST(BaflUtils::FileExists (fs, KCRep1TxtFile) == EFalse);	
+
+	// Close the repository
+	CleanupStack::PopAndDestroy(rep);
+	
+	CleanupStack::PopAndDestroy(2);		// fm, fs
+
+	CleanupFileFromCDriveL(KUidRep1);
+
+	// Enable cache
+	r = SetGetParameters(TIpcArgs(EEnableCache, KDefaultEvictionTimeout, KDefaultCacheSize));
+	TEST(r==KErrNone);
+
+	SetTestStepResult(EPass);
+	
+	return TestStepResult();
+#endif
+	}
+
+CPerfTestDefectStep059633::CPerfTestDefectStep059633()
+	{
+	SetTestStepName(KPerfTestDefectStepDEF059633);
+	}
+
+TVerdict CPerfTestDefectStep059633::doTestStepL()
+	{
+#ifndef __CENTREP_SERVER_CACHETEST__
+	return EPass;
+#else	
+	SetTestStepResult(EFail);
+
+	// Flush and disable cache for this test
+	TInt r;
+	r = SetGetParameters(TIpcArgs(EDisableCache));
+	TEST(r==KErrNone);
+
+	CleanupFileFromCDriveL(KUidLargeRepository);
+	CleanupFileFromCDriveL(KUidLargeCreRepository);
+
+   	CRepository* rep; 
+   	
+   	TUint32 startFastCounter;
+   	TUint64 fastCountertimeToOpenLargeIniRep;
+   	TUint64 fastCountertimeToOpenLargeCreRep;
+   	TUint64 fastCountertimeToOpenXLargeInis;
+   	TUint64 fastCountertimeToOpenXLargeCres;
+    
+    //=========================================================================================
+   	//Single .ini - opening
+    startFastCounter = User::FastCounter();
+	User::LeaveIfNull(rep = CRepository::NewLC(KUidLargeRepository));
+	fastCountertimeToOpenLargeIniRep = FastCountToMicrosecondsInInt(User::FastCounter() - startFastCounter);
+	Logger().WriteFormat(_L("Time to open text based rep from ROM = %lu microseconds\n\n"), fastCountertimeToOpenLargeIniRep);
+	CleanupStack::PopAndDestroy(rep);
+	
+    //=========================================================================================
+	//KNumOfAttempts .ini
+	
+	startFastCounter = User::FastCounter();	
+	for (TInt i=0; i<KNumOfAttempts; i++)
+	    {
+	    User::LeaveIfNull(rep = CRepository::NewLC(KUidLargeRepository));
+	    CleanupStack::PopAndDestroy(rep);
+	    }
+	fastCountertimeToOpenXLargeInis = FastCountToMicrosecondsInInt(User::FastCounter() - startFastCounter);
+
+	//=========================================================================================
+	//single .cre
+	startFastCounter = User::FastCounter();	
+	User::LeaveIfNull(rep = CRepository::NewLC(KUidLargeCreRepository));
+	fastCountertimeToOpenLargeCreRep = FastCountToMicrosecondsInInt(User::FastCounter() - startFastCounter);
+	Logger().WriteFormat(_L("Time to open binary rep from ROM = %lu microseconds\n\n"), fastCountertimeToOpenLargeCreRep);
+	CleanupStack::PopAndDestroy(rep);
+	
+	//=========================================================================================
+	//KNumOfAttempts .cre
+	startFastCounter = User::FastCounter();	
+	for (TInt j=0; j<KNumOfAttempts; j++)
+	    {	    
+  	    User::LeaveIfNull(rep = CRepository::NewLC(KUidLargeCreRepository));
+  	    CleanupStack::PopAndDestroy(rep);
+	    }
+	fastCountertimeToOpenXLargeCres = FastCountToMicrosecondsInInt(User::FastCounter() - startFastCounter);
+
+    //=========================================================================================	    
+	//average 
+	TInt64 averageFastCounterTimeToOpenIni = fastCountertimeToOpenXLargeInis / KNumOfAttempts;
+	Logger().WriteFormat(_L("Average time to open text based rep from ROM = %lu  microseconds\n\n"), averageFastCounterTimeToOpenIni);
+	
+	TInt64 averageFastCounterTimeToOpenCre = fastCountertimeToOpenXLargeCres / KNumOfAttempts;
+	Logger().WriteFormat(_L("Average time to open binary rep from ROM = %lu  microseconds\n\n"), averageFastCounterTimeToOpenCre);
+  	
+  	//=========================================================================================
+    //prove that opening .ini is slower than opening .cre files 
+    // (even though the difference is now much less after the performance 
+    // improvements of PREQ 1192, the test is now much more precise by using fastcounter)
+#if !defined(__WINS__) && !defined(__WINSCW__)
+    TEST(fastCountertimeToOpenLargeIniRep > fastCountertimeToOpenLargeCreRep);
+    TEST(fastCountertimeToOpenXLargeInis > fastCountertimeToOpenXLargeCres);
+    TEST(averageFastCounterTimeToOpenIni > averageFastCounterTimeToOpenCre);
+#endif		
+
+    //==========================================================================================
+    //benchmarks - open
+	#if !defined(__WINS__) && !defined(__WINSCW__)
+	    #ifdef _DEBUG
+      	  	const TInt64 KOpenCreTime  = 150000; //armv5 debug
+	    #else
+      	   const TInt64 KOpenCreTime  = 75000;  //armv5 urel
+      	#endif
+	
+	TEST(averageFastCounterTimeToOpenCre < KOpenCreTime);      	
+	
+    #endif//!defined(__WINS__) && !defined(__WINSCW__)
+
+    //========================================================================
+
+	CleanupFileFromCDriveL(KUidLargeRepository);
+	CleanupFileFromCDriveL(KUidLargeCreRepository);
+
+	// Enable cache
+	r = SetGetParameters(TIpcArgs(EEnableCache, KDefaultEvictionTimeout, KDefaultCacheSize));
+	TEST(r==KErrNone);
+
+	SetTestStepResult(EPass);
+	
+	return TestStepResult();
+#endif
+	}