diff -r 28839de615b4 -r 26645d81f48d persistentstorage/centralrepository/test/testexecute/performance/src/TE_PerfTestStep.cpp --- a/persistentstorage/centralrepository/test/testexecute/performance/src/TE_PerfTestStep.cpp Thu Aug 19 11:36:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,432 +0,0 @@ -// 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 -#include -#include "t_cenrep_helper.h" -#include -#include -#include "srvPerf.h" -#include "srvreqs.h" -#include "TE_PerfTestStep.h" - -#ifdef __CENTREP_SERVER_PERFTEST__ - -// Function DecodeEventAndData -// Extract the high 8-bit event Id and the low 24-bit data -// from the 32 bit integer. -// -// param aEntry - the 32 bit integer to decode -// param aEventId - return the EventId Id. -// param aData - return the 24-bit data value -inline -void DecodeEventAndData(TUint32 aEntry, TUint& aEventId, TUint32& aData) - { - aEventId = (aEntry >> KEventIdShiftBits) & KEventIdMask; - aData = aEntry & KDataMask; - } - -// Function FindRepUid -// Search for the given Repository UID in aArray. -// -// param aArray - the RArray containing a number of repositories. -// param aRepUid - the rep UID to search for. -// Return - if aRepUid is in the array, return its index in array, -// else return KErrNotFound. -TInt FindRepUid(const RArray& aArray, TUint32 aRepUid) - { - for (TInt i = 0; i < aArray.Count(); i++) - { - if (aArray[i].MatchUid(aRepUid)) - return i; - } - return KErrNotFound; - } - -// Function GetFuncCodeName -// Map CentRep function code to string. -// -// param aFunc - the function code to map to string. -// Return - textual representation of the function code. -_LIT(KEInitialise, "Open"); -_LIT(KECreateInt, "ECreateInt"); -_LIT(KECreateReal, "ECreateReal"); -_LIT(KECreateString, "ECreateString"); -_LIT(KEDelete, "EDelete"); -_LIT(KEGetInt, "EGetInt"); -_LIT(KESetInt, "ESetInt"); -_LIT(KEGetReal, "EGetReal"); -_LIT(KESetReal, "ESetReal"); -_LIT(KEGetString, "EGetString"); -_LIT(KESetString, "ESetString"); -_LIT(KEFind, "EFind"); -_LIT(KEFindEqInt, "EFindEqInt"); -_LIT(KEFindEqReal, "EFindEqReal"); -_LIT(KEFindEqString, "EFindEqString"); -_LIT(KEFindNeqInt, "EFindNeqInt"); -_LIT(KEFindNeqReal, "EFindNeqReal"); -_LIT(KEFindNeqString, "EFindNeqString"); -_LIT(KEGetFindResult, "EGetFindResult"); -_LIT(KENotifyRequestCheck, "ENotifyRequestCheck"); -_LIT(KENotifyRequest, "ENotifyRequest"); -_LIT(KENotifyCancel, "ENotifyCancel"); -_LIT(KENotifyCancelAll, "ENotifyCancelAll"); -_LIT(KEGroupNotifyRequest, "EGroupNotifyRequest"); -_LIT(KEGroupNotifyCancel, "EGroupNotifyCancel"); -_LIT(KEReset, "EReset"); -_LIT(KEResetAll, "EResetAll"); -_LIT(KETransactionStart, "ETransactionStart"); -_LIT(KETransactionCommit, "ETransactionCommit"); -_LIT(KETransactionCancel, "ETransactionCancel"); -_LIT(KEMove, "EMove"); -_LIT(KETransactionState, "ETransactionState"); -_LIT(KETransactionFail, "ETransactionFail"); -_LIT(KEDeleteRange, "EDeleteRange"); -_LIT(KEGetSetParameters, "EGetSetParameters"); -_LIT(KEClose, "EClose"); -_LIT(KEEvict, "Evict"); -_LIT(KUnknownFunction, "UnknownCode"); - -const TDesC* GetFuncCodeName(TUint aFunc) - { - switch (aFunc) - { - case EInitialise: return(&KEInitialise); - case ECreateInt: return(&KECreateInt); - case ECreateReal: return(&KECreateReal); - case ECreateString: return(&KECreateString); - case EDelete: return(&KEDelete); - case EGetInt: return(&KEGetInt); - case ESetInt: return(&KESetInt); - case EGetReal: return(&KEGetReal); - case ESetReal: return(&KESetReal); - case EGetString: return(&KEGetString); - case ESetString: return(&KESetString); - case EFind: return(&KEFind); - case EFindEqInt: return(&KEFindEqInt); - case EFindEqReal: return(&KEFindEqReal); - case EFindEqString: return(&KEFindEqString); - case EFindNeqInt: return(&KEFindNeqInt); - case EFindNeqReal: return(&KEFindNeqReal); - case EFindNeqString: return(&KEFindNeqString); - case EGetFindResult: return(&KEGetFindResult); - case ENotifyRequestCheck: return(&KENotifyRequestCheck); - case ENotifyRequest: return(&KENotifyRequest); - case ENotifyCancel: return(&KENotifyCancel); - case ENotifyCancelAll: return(&KENotifyCancelAll); - case EGroupNotifyRequest: return(&KEGroupNotifyRequest); - case EGroupNotifyCancel: return(&KEGroupNotifyCancel); - case EReset: return(&KEReset); - case EResetAll: return(&KEResetAll); - case ETransactionStart: return(&KETransactionStart); - case ETransactionCommit: return(&KETransactionCommit); - case ETransactionCancel: return(&KETransactionCancel); - case EMove: return(&KEMove); - case ETransactionState: return(&KETransactionState); - case ETransactionFail: return(&KETransactionFail); - case EDeleteRange: return(&KEDeleteRange); - case EGetSetParameters: return (&KEGetSetParameters); - case EClose: return(&KEClose); - case EEvict: return (&KEEvict); - } - return &KUnknownFunction; - } -#endif //__CENTREP_SERVER_PERFTEST__ - -//-------------------- -// class CPerfTestStep -//-------------------- - -// doTestStepL -// Implement the pure virtual function. -// This test fetches the performance data collected by -// CentRep server, sums the CPU time spent in servicing -// each type of request and time spent in opening each -// repository, and prints out the total. -TVerdict CPerfTestStep::doTestStepL() - { -#ifdef __CENTREP_SERVER_PERFTEST__ - - TBuf sharedString; - - TPtrC resultSection; - TInt testMode; - TInt bRet; - // get test mode from ini file - bRet = GetIntFromConfig(ConfigSection(), KIniTestMode, testMode); - TESTL(bRet==1); - - _LIT(KBlankLine, "\n"); - Logger().WriteFormat(KBlankLine); - - if (testMode == ETiming) - { - bRet = GetStringFromConfig(ConfigSection(), KResultsSection, resultSection); - TESTL(bRet==1); - } - - if (testMode == EBoot) - { - _LIT(KDoTestStepDisclaimer1, "For this test boot-up is considered to be finished when CommsDat repository is loaded 9 times."); - Logger().WriteFormat(KDoTestStepDisclaimer1); - _LIT(KDoTestStepDisclaimer2, "This is when the watcher thread is used to make re-attempts to connect to the network."); - Logger().WriteFormat(KDoTestStepDisclaimer2); - } - - // Setup IPC args to retreive performance data from server. - TUint bufSize = KCentRepPerfTestArraySize * sizeof(TUint32); - TAny* buf = User::AllocL(bufSize); - TPtr8 bufDesc(static_cast(buf), bufSize); - - TUint numValidEntries; - TPckg pckg(numValidEntries); - - TInt ret = SetGetParameters(TIpcArgs(EGetPerfResults, &bufDesc, &pckg)); - if (ret != KErrNone) - { - _LIT(KSetGetParamFailFmt, "Send msg err %d"); - ERR_PRINTF2(KSetGetParamFailFmt, ret); - User::Free(buf); - return EFail; - } - - if (testMode == EBoot) - { - _LIT(KNumValidEntriesFmt, "Num Valid entries = %d"); - Logger().WriteFormat(KNumValidEntriesFmt, numValidEntries); - } - - RArray perfData(sizeof(TUint32),static_cast(buf),KCentRepPerfTestArraySize); - CleanupClosePushL(perfData); - - // Need to find the tick frequency before using ConvertTickToSecAndMilli. - HAL::Get(HALData::EFastCounterFrequency, iTickFreq); - - TUint sec; - TUint milliSec; - - const TUint KNumIpcs = EEvict + 1; - TIpcStatistics ipcStats[KNumIpcs]; - RArray repStats; - CleanupClosePushL(repStats); - TUint32 totalElapsedTicks = 0; - const TDesC* eventName; - - // Process the data - - // Performance data has 3 parts. First event ID and CPU tick - // to service the request. 2nd & 3rd, if event is open/close/evict - // the time of the event and repository UID. - TInt i; - for (i=0; i keyName; - _LIT(KIndividualIpcStat, "%S used %d times, sum of CPU time = %d ms"); - for (i = 0; i < KNumIpcs; i++) - { - if (ipcStats[i].iUseCount == 0) - { - continue; - } - - numIpcMsgs += ipcStats[i].iUseCount; - eventName = GetFuncCodeName(i); - ConvertTickToSecAndMilli(ipcStats[i].iSumElapsedTicks, sec, milliSec); - if (sec > 0) - { - milliSec += sec * 1000; - } - Logger().WriteFormat(KIndividualIpcStat, eventName, ipcStats[i].iUseCount, milliSec); - if (testMode == ETiming) - { - sharedString.AppendFormat(_L(" %S %d %d"), eventName, ipcStats[i].iUseCount, milliSec); - numLogItems++; - } - } - if (testMode == ETiming) - { - TBuf<2> numofItems; - numofItems.Num(numLogItems); - sharedString.Insert(0, numofItems); - WriteSharedDataL(resultSection, sharedString, ESetText); - } - - // Display Repository statistics - Logger().WriteFormat(KBlankLine); - Logger().WriteFormat(KBlankLine); - _LIT(KRepStatsFmt, "Repository Statistics:"); - Logger().WriteFormat(KRepStatsFmt); - - if (testMode == ETiming) - { - numLogItems = 0; - sharedString.Copy(_L(" ")); - } - _LIT(KIndividualRepStat, "%X used %d times, sum of load time %d ms"); - for (i = 0; i < repStats.Count(); i++) - { - ConvertTickToSecAndMilli(repStats[i].iSumLoadTicks, sec, milliSec); - if (sec > 0) - { - milliSec += sec * 1000; - } - Logger().WriteFormat(KIndividualRepStat, repStats[i].iRepUid, - repStats[i].iUseCount, milliSec); - if (testMode == ETiming) - { - sharedString.AppendFormat(_L(" %08X %d %d"), repStats[i].iRepUid, repStats[i].iUseCount, milliSec); - numLogItems++; - } - } - - if (testMode == ETiming) - { - TBuf<2> numofItems; - numofItems.Num(numLogItems); - sharedString.Insert(1, numofItems); - WriteSharedDataL(resultSection, sharedString, EAppendText); - - Logger().WriteFormat(KBlankLine); - } - - if (testMode == EBoot) - { - // show total CPU used by CentralRepository server. - ConvertTickToSecAndMilli(totalElapsedTicks, sec, milliSec); - if (sec > 0) - { - milliSec += sec * 1000; - } - - Logger().WriteFormat(KBlankLine); - Logger().WriteFormat(KBlankLine); - _LIT(KTotalCpuFmt, "Total CPU time used by CentRepSrv: %d ms"); - Logger().WriteFormat(KTotalCpuFmt, milliSec); - - _LIT(KNoteAboutTotal, "The above does not include kernel processing time and client idle time for the %d IPC messages.\n"); - Logger().WriteFormat(KNoteAboutTotal, numIpcMsgs); - } - - // Stop performance test data recording in the server - TInt r = SetGetParameters(TIpcArgs(EStopPerfTests)); - TEST(r==KErrNone); - - CleanupStack::PopAndDestroy(); // repStats - CleanupStack::PopAndDestroy(); // perfData - return EPass; -#else - _LIT(KWarnTestMacroOff, "Performance test macro __CENTREP_SERVER_PERFTEST__ is disabled. Test not run."); - WARN_PRINTF1(KWarnTestMacroOff); - return EPass; -#endif - } - -// ConvertTickToSecAndMilli -// Convert FastCounter ticks to seconds and milli-seconds. -// -// param aTick - ticks from User::FastCounter -// param aSec - return number of seconds in aTick -// param aMilliSec - return number of ms left behind after number of -// seconds is subtracted from aTick. -void CPerfTestStep::ConvertTickToSecAndMilli(TUint32 aTick, TUint& aSec, TUint& aMilliSec) - { - aSec = aTick / iTickFreq; - aMilliSec = ((aTick - aSec * iTickFreq) * 1000 + (iTickFreq >> 1)) / iTickFreq; - } - -//------------------------ -// class TRepStatistics -//------------------------ - -// AddData -// Increment number of times this rep is open, sum of CPU used -// to load it, and check cache miss. -void TRepStatistics::AddData(TUint32 aElapsedTicks) - { - iSumLoadTicks += aElapsedTicks; - iUseCount++; - if (aElapsedTicks >= KTicks2LoadFromCache) - { - iCacheMisses++; - } - } - -//--------------------- -// class TIpcStatistics -//--------------------- - -// AddData -// Increment number of times the IPC msg is received by server. -// Sum time to service this type of request. -void TIpcStatistics::AddData(TUint32 aElapsedTicks) - { - iUseCount++; - iSumElapsedTicks += aElapsedTicks; - }