persistentstorage/centralrepository/test/testexecute/performance/src/TE_DefectTestStep.cpp
--- /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
+ }