lowlevellibsandfws/pluginfw/TestExecute/EComPerfTest/src/TE_EcomGranularityTestStep.cpp
changeset 0 e4d67989cc36
child 44 97b0fb8a2cc2
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 /**
       
    17  @file
       
    18  @internalComponent
       
    19 */
       
    20 #include <startup.hrh>
       
    21 #include <hal.h>
       
    22 #include "RegistryData.h"
       
    23 #include "Registrar.h"
       
    24 #include "RegistrarObserver.h"
       
    25 #include "DriveInfo.h"
       
    26 #include "TE_EcomGranularityTestStep.h"
       
    27 
       
    28 _LIT (KMinGranInfUidIndex, "MinGranInfUidIndex");
       
    29 _LIT (KMinGranImplUidIndex, "MinGranImplUidIndex");
       
    30 _LIT (KGranStep, "GranStep");
       
    31 _LIT (KMaxGranInfUidIndex, "MaxGranInfUidIndex");
       
    32 _LIT (KMaxGranImplUidIndex, "MaxGranImplUidIndex");
       
    33 
       
    34 
       
    35 /** Stub class needed to instantiate CRegistrar object. */
       
    36 class CTestRegistrarObserver : public MRegistrarObserver
       
    37 	{
       
    38 public:
       
    39 	// This is a stub. Hence do nothing in notification.
       
    40 	void Notification( TInt /*aNotification*/ ) {}
       
    41 	};
       
    42 
       
    43 /** Constructor of CEComImplIndexPerfTest */
       
    44 CEComImplIndexPerfTest::CEComImplIndexPerfTest()
       
    45 	{
       
    46 	SetTestStepName(KEComImplIndexPerfTest);
       
    47 	}
       
    48 
       
    49 /** destructor of CEComImplIndexPerfTest */
       
    50 CEComImplIndexPerfTest::~CEComImplIndexPerfTest()
       
    51 	{
       
    52 	iFs.Close();
       
    53 	delete iScheduler;
       
    54 	}
       
    55 
       
    56 /** Run the test */
       
    57 TVerdict CEComImplIndexPerfTest::doTestStepL()
       
    58 	{
       
    59 	iScheduler = new(ELeave) CActiveScheduler;
       
    60 	CActiveScheduler::Install(iScheduler);
       
    61 	User::LeaveIfError(iFs.Connect());
       
    62 
       
    63 	if (ReadConfigParameters() != EPass)
       
    64 		{
       
    65 		return TestStepResult();
       
    66 		}
       
    67 
       
    68 	TInt fastCounterFreq;
       
    69 	HAL::Get(HAL::EFastCounterFrequency, fastCounterFreq);
       
    70 	TUint numTicksInHalfMilliSec = fastCounterFreq / 2000;
       
    71 
       
    72 	const TInt KNumberOfDataPts = 
       
    73 		(iMaxInfUidIndexGranularity - iMinInfUidIndexGranularity) / iGranStep + 1;
       
    74 	HBufC* hbufc = HBufC::NewLC(10 * KNumberOfDataPts);
       
    75 	TPtr   buf = hbufc->Des();
       
    76 
       
    77 	// If a sample has the same granularities as the default values
       
    78 	// in RegistryData.h, save the result in defaultGranularityTime.
       
    79 	TUint32 defaultGranularityTime = 0x7fffffff;
       
    80 
       
    81 	TUint32 besttime = 0x7fffffff;
       
    82 	TUint32 worsttime = 0;
       
    83 	TInt bestAllImplGranularity = 0;
       
    84 	TInt bestImplUidGranularity = 0;
       
    85 
       
    86 	TUint32 startTicks, endTicks;
       
    87 
       
    88 	// Print header for table
       
    89 	_LIT(KTableLegend, "Columns = iInterfaceImplIndex granularity, rows = iImplIndex granularity");
       
    90 	Logger().Write(KTableLegend);
       
    91 
       
    92 	_LIT(KCommaNumber, ",%d");
       
    93 	_LIT(KCommaNumber3Wide, ",%3d");
       
    94 	_LIT(KNumber2Wide, "%2d");
       
    95 
       
    96 	_LIT(KColumnHeadSpace, "--");
       
    97 	buf.Copy(KColumnHeadSpace);
       
    98 	TInt j;
       
    99 	for (j = iMinInfUidIndexGranularity; j <= iMaxInfUidIndexGranularity; j += iGranStep)
       
   100 		{
       
   101 		buf.AppendFormat(KCommaNumber3Wide, j);
       
   102 		}
       
   103 	Logger().Write(buf);
       
   104 
       
   105 
       
   106 	CTestRegistrarObserver* registrarObserver = new (ELeave) CTestRegistrarObserver; 
       
   107 	CleanupStack::PushL(registrarObserver);
       
   108 
       
   109 	// The two nexting for loops below generate a 2-D table of
       
   110 	// discovery time at different combinations of granularities.
       
   111 	for (TInt implIndexGranularity = iMinIimplUidIndexGranularity;
       
   112 		 implIndexGranularity <= iMaxIimplUidIndexGranularity;
       
   113 		 implIndexGranularity += iGranStep)
       
   114 		{
       
   115 		buf.Format(KNumber2Wide, implIndexGranularity);
       
   116 
       
   117 		for (TInt infIndexGranularity = iMinInfUidIndexGranularity;
       
   118 			infIndexGranularity <= iMaxInfUidIndexGranularity; 
       
   119 			infIndexGranularity += iGranStep)
       
   120 			{
       
   121 			CRegistryData* registryData = CRegistryData::NewL(iFs, infIndexGranularity, implIndexGranularity); 
       
   122 			CleanupStack::PushL(registryData);
       
   123 
       
   124 			CRegistrar* registrar = CRegistrar::NewL(*registryData, *registrarObserver, iFs); 
       
   125 			CleanupStack::PushL(registrar);
       
   126 
       
   127 			startTicks = User::FastCounter();
       
   128 			registrar->ProcessSSAEventL(EStartupStateCriticalStatic);
       
   129 			endTicks = User::FastCounter();
       
   130 
       
   131 			TUint32 elapsedMilliSec = (endTicks - startTicks + numTicksInHalfMilliSec) * 1000 / fastCounterFreq;
       
   132 			buf.AppendFormat(KCommaNumber, elapsedMilliSec);
       
   133 
       
   134 			// Look for the best, worst and default granularity times.
       
   135 			if ((KDefaultInterfaceImplIndexGranularity == infIndexGranularity) &&
       
   136 			 	(KDefaultImplIndexGranularity == implIndexGranularity))
       
   137 				{
       
   138 				defaultGranularityTime = elapsedMilliSec;
       
   139 				}
       
   140 
       
   141 			if (besttime > elapsedMilliSec)
       
   142 				{
       
   143 				bestAllImplGranularity = infIndexGranularity;
       
   144 				bestImplUidGranularity = implIndexGranularity;
       
   145 				besttime = elapsedMilliSec;
       
   146 				}
       
   147 			else if (elapsedMilliSec > worsttime)
       
   148 				{
       
   149 				worsttime = elapsedMilliSec;
       
   150 				}
       
   151 
       
   152 			CleanupStack::PopAndDestroy(registrar);
       
   153 			CleanupStack::PopAndDestroy(registryData);
       
   154 			} // for AllImplementations index granularity
       
   155 
       
   156 		// Show one row of result.
       
   157 		Logger().Write(buf);
       
   158 		} // for impl. UID index granularity
       
   159 
       
   160 	CleanupStack::PopAndDestroy(registrarObserver);
       
   161 
       
   162 	_LIT(KBest, "Best time is %d milli sec at interface idx granularity %d, Impl UID index granularity %d");
       
   163 	INFO_PRINTF4(KBest, besttime, bestAllImplGranularity, bestImplUidGranularity);
       
   164 
       
   165 	_LIT(KWorst, "Worst time is %d milli sec.");
       
   166 	INFO_PRINTF2(KWorst, worsttime);
       
   167 
       
   168 	if (0x7fffffff != defaultGranularityTime)
       
   169 		{
       
   170 		_LIT(KDefGran, "Default granularities (%d,%d) time is %d.");
       
   171 		INFO_PRINTF4(KDefGran, KDefaultInterfaceImplIndexGranularity, KDefaultImplIndexGranularity, defaultGranularityTime);
       
   172 		}
       
   173 
       
   174 	CleanupStack::PopAndDestroy(hbufc);
       
   175 	return TestStepResult();
       
   176 	}
       
   177 
       
   178 /** Read test configuration from ini file.
       
   179 */
       
   180 TVerdict CEComImplIndexPerfTest::ReadConfigParameters()
       
   181 	{
       
   182 	_LIT (KMissingParamMsg, "Missing %S in config file");
       
   183 
       
   184 	if (!GetIntFromConfig(ConfigSection(), KMinGranInfUidIndex, iMinInfUidIndexGranularity))
       
   185 		{
       
   186 		ERR_PRINTF2(KMissingParamMsg, &KMinGranInfUidIndex);
       
   187 		SetTestStepResult(EFail);
       
   188 		}
       
   189 
       
   190 	if (!GetIntFromConfig(ConfigSection(), KMaxGranInfUidIndex, iMaxInfUidIndexGranularity))
       
   191 		{
       
   192 		ERR_PRINTF2(KMissingParamMsg, &KMaxGranInfUidIndex);
       
   193 		SetTestStepResult(EFail);
       
   194 		}
       
   195 
       
   196 	if (!GetIntFromConfig(ConfigSection(), KMinGranImplUidIndex, iMinIimplUidIndexGranularity))
       
   197 		{
       
   198 		ERR_PRINTF2(KMissingParamMsg, &KMinGranImplUidIndex);
       
   199 		SetTestStepResult(EFail);
       
   200 		}
       
   201 
       
   202 	if (!GetIntFromConfig(ConfigSection(), KMaxGranImplUidIndex, iMaxIimplUidIndexGranularity))
       
   203 		{
       
   204 		ERR_PRINTF2(KMissingParamMsg, &KMaxGranImplUidIndex);
       
   205 		SetTestStepResult(EFail);
       
   206 		}
       
   207 
       
   208 	if (!GetIntFromConfig(ConfigSection(), KGranStep, iGranStep))
       
   209 		{
       
   210 		ERR_PRINTF2(KMissingParamMsg, &KGranStep);
       
   211 		SetTestStepResult(EFail);
       
   212 		}
       
   213 
       
   214 #if defined(__WINS__) || defined(__WINSCW__)
       
   215 	// On winscw, each data point in the plot takes 3 to 4 seconds (instead
       
   216 	// of 0.3 s).  A table of 12 columns x 20 rows needs 1000 s.
       
   217 	// It is not worthwhile to scan the full range because performance results
       
   218 	// on winscw is meaningless anyway. Hence adjust the range to reduce the
       
   219 	// stress on over night build.
       
   220 
       
   221 	// reduce number of columns to plot
       
   222 	iMinInfUidIndexGranularity += (iGranStep * 3);
       
   223 	iMaxInfUidIndexGranularity -= iGranStep;
       
   224 
       
   225 	iMinIimplUidIndexGranularity += (iGranStep * 4);
       
   226 	iMaxIimplUidIndexGranularity -= (iGranStep * 2);
       
   227 
       
   228 	INFO_PRINTF1(_L("This test takes too long to run on winscw."));
       
   229 	INFO_PRINTF5(_L("Range of I/F idx granularities narrowed to %d,%d, Impl. idx granularity narrowed to %d,%d"), iMinInfUidIndexGranularity, iMaxInfUidIndexGranularity, iMinIimplUidIndexGranularity, iMaxIimplUidIndexGranularity);
       
   230 #endif
       
   231 
       
   232 	return TestStepResult();
       
   233 	}