--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/featuremgmt/featuremgr/test/tef/tef_efm_configured/src/characterisation_steps.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,241 @@
+// Copyright (c) 2007-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:
+// EFM test steps for characterising feature manager performance.
+//
+//
+
+/**
+ @file
+ @internalComponent
+ @test
+*/
+
+#include <featdiscovery.h>
+#include <featmgr/featurecontrol.h>
+#include <hal.h>
+#include "characterisation_steps.h"
+#include "efm_teststepbase.h"
+
+// This is the base class for some of our characterisation tests.
+// Creates an RFeatureControl object, finds out what the fast counter
+// frequency is and gets the timeout for this test.
+TVerdict CCharacteriseBaseStep :: doTestStepPreambleL()
+ {
+ // First find out the granularity of the system clock..
+ HAL::Get(HALData::EFastCounterFrequency, icountfreq);
+ INFO_PRINTF2(_L("Counts per sec=%d"), icountfreq);
+ icountperusec = icountfreq/1000000.0;
+ INFO_PRINTF2(_L("Counts per usec=%f"), icountperusec);
+
+ TInt err = icontrol.Open();
+ TESTDIAGNOSTICERROR(err==KErrNone,
+ _L("RFeatureControl::Open failed: error = %d"), err);
+ if(err) { return TestStepResult(); }
+ CleanupClosePushL(icontrol);
+
+ // Get the timeout from the .ini file. The name of the timeout entry
+ // varies depending on what type of build we have.
+ TBuf<20> timeoutini(_L("Timeout"));
+#ifdef __WINSCW__
+ timeoutini.Append(_L("_WINSCW"));
+#endif
+#ifdef __ARMCC__
+ timeoutini.Append(_L("_ARM"));
+ TInt muid = 0;
+ HAL::Get(HAL::EMachineUid, muid);
+ switch (muid)
+ {
+ case HAL::EMachineUid_OmapH2:
+ timeoutini.Append(_L("_H2"));
+ break;
+ case HAL::EMachineUid_OmapH4:
+ timeoutini.Append(_L("_H4"));
+ break;
+ case HAL::EMachineUid_OmapH6:
+ timeoutini.Append(_L("_H6"));
+ break;
+ case HAL::EMachineUid_NE1_TB:
+ timeoutini.Append(_L("_NE1"));
+ break;
+ //add any new hardware IDs here
+ default:
+ break;
+ }
+#endif
+#ifdef _DEBUG
+ timeoutini.Append(_L("_UDEB"));
+#else
+ timeoutini.Append(_L("_UREL"));
+#endif
+
+ // Get the timeout, which is measured in microseconds.
+ if( !GetIntFromConfig(ConfigSection(), timeoutini, itimeout ) )
+ {
+ ERR_PRINTF2(_L("Can't find '%S' in .ini file"),
+ &timeoutini );
+ CleanupStack::PopAndDestroy(&icontrol);
+ SetTestStepResult(EFail);
+ return TestStepResult();
+ }
+ return TestStepResult();
+ }
+
+TVerdict CCharacteriseBaseStep :: doTestStepPostambleL()
+ {
+ CleanupStack::PopAndDestroy(&icontrol);
+ return TestStepResult();
+ }
+
+CCharacteriseSupportedStep :: CCharacteriseSupportedStep()
+ {
+ SetTestStepName(KCharacteriseSupported);
+ }
+
+TVerdict CCharacteriseSupportedStep::doTestStepL()
+ {
+ // The base class 'CCharacteriseBaseStep' has already opened the
+ // RFeatureControl object and read in the timeout number.
+
+ // Find out how many features we're going to attempt to read, the
+ // minimum uid (that we start on) and the number of supported UIDs
+ // we expect to find in this range.
+ TInt nfeats, minuid, expsup;
+ if(!GetIntFromConfig(ConfigSection(), _L("NumFeaturesToRead"), nfeats) ||
+ !GetIntFromConfig(ConfigSection(), _L("MinFeatureUID"), minuid) ||
+ !GetIntFromConfig(ConfigSection(), _L("NumSupported"), expsup))
+ {
+ ERR_PRINTF1(_L("Can't find 'NumFeaturesToRead', 'MinFeatureUID' and 'NumSupported' in .ini file"));
+ SetTestStepResult(EFail);
+ return TestStepResult();
+ }
+
+ TInt mintime = 0x7fffffff;
+ TInt maxtime = 0;
+ TInt totaltime = User::FastCounter();
+ for(TInt i=0 ; i<10 ; i++)
+ {
+ // This is the main part of the test where we perform timing..
+ TInt nsup=0;
+ TUint prevtime = User::FastCounter();
+ for(TInt uid=minuid ; uid < minuid + nfeats ; uid++)
+ {
+ TUid tuid = { uid };
+ if(icontrol.FeatureSupported(tuid) == KFeatureSupported) nsup++;
+ }
+ TUint elapsedtime = User::FastCounter() - prevtime;
+ if(elapsedtime < mintime) mintime = elapsedtime;
+ if(elapsedtime > maxtime) maxtime = elapsedtime;
+ if(nsup != expsup)
+ {
+ ERR_PRINTF3(_L("Expected %d supported features, got %d"),
+ expsup, nsup);
+ SetTestStepResult(EFail);
+ }
+ }
+ totaltime = User::FastCounter() - totaltime;
+ TInt avetime = totaltime/10;
+
+ TReal us = mintime / icountperusec;
+ INFO_PRINTF2(_L("Minimum time %f us"), us);
+ // This test has been changed to use the minimum timing to check against
+ // the wanted because it suffers from lots of noise - I've seen
+ // max/min ratios of > 10!
+ if(us > itimeout)
+ {
+ ERR_PRINTF3(_L("Test failed timeout. Got '%f' minimum, wanted < '%d'"),
+ us, itimeout);
+ SetTestStepResult(EFail);
+ }
+ us = maxtime / icountperusec;
+ INFO_PRINTF2(_L("Maximum time %f us"), us);
+ us = avetime / icountperusec;
+ INFO_PRINTF2(_L("Average time %f us"), us);
+ return TestStepResult();
+ }
+
+CCharacteriseSupportedArrayStep :: CCharacteriseSupportedArrayStep()
+ {
+ SetTestStepName(KCharacteriseSupportedArray);
+ }
+
+TVerdict CCharacteriseSupportedArrayStep::doTestStepL()
+ {
+ // Find out how many features we're going to attempt to read..
+ TInt nfeats, minuid, expsup;
+ if(!GetIntFromConfig(ConfigSection(), _L("NumFeaturesToRead"), nfeats) ||
+ !GetIntFromConfig(ConfigSection(), _L("MinFeatureUID"), minuid) ||
+ !GetIntFromConfig(ConfigSection(), _L("NumSupported"), expsup))
+ {
+ ERR_PRINTF1(_L("Can't find 'NumFeaturesToRead', 'MinFeatureUID' and 'NumSupported' in .ini file"));
+ SetTestStepResult(EFail);
+ return TestStepResult();
+ }
+
+
+ // Set up a loop so we can get average timings.
+ TInt mintime = 0x7fffffff;
+ TInt maxtime = 0;
+ TInt totaltime = User::FastCounter();
+ for(TInt i=0 ; i<10 ; i++)
+ {
+ // First generate an RFeatureArray containing the features we're interested
+ // in.
+ RFeatureArray rfa;
+ CleanupClosePushL(rfa);
+ for(TInt uid=minuid ; uid < minuid + nfeats ; uid++)
+ {
+ TUid tuid = { uid };
+ rfa.AppendL(tuid);
+ }
+ // This is the main part of the test where we perform timing..
+ TUint prevtime = User::FastCounter();
+ TInt err = icontrol.FeaturesSupported(rfa);
+ TUint elapsedtime = User::FastCounter() - prevtime;
+ TInt nsup = rfa.Count(); // The array may have been pared down..
+ CleanupStack::PopAndDestroy(&rfa);
+
+ if(err)
+ {
+ ERR_PRINTF2(_L("FeaturesSupported gave %d, expected KErrNone"), err);
+ SetTestStepResult(EFail);
+ }
+ if(nsup != expsup)
+ {
+ ERR_PRINTF3(_L("Expected %d supported features, got %d"),
+ expsup, nsup);
+ SetTestStepResult(EFail);
+ }
+ if(elapsedtime < mintime) mintime = elapsedtime;
+ if(elapsedtime > maxtime) maxtime = elapsedtime;
+ }
+ totaltime = User::FastCounter() - totaltime;
+ TInt avetime = totaltime/10;
+ TReal us = mintime / icountperusec;
+ INFO_PRINTF2(_L("Minimum time %f us"), us);
+ // This test has been changed to use the minimum timing to check against
+ // the wanted because it suffers from lots of noise - I've seen
+ // max/min ratios of > 10!
+ if(us > itimeout)
+ {
+ ERR_PRINTF3(_L("Test failed timeout. Got '%f' minimum, wanted < '%d'"),
+ us, itimeout);
+ SetTestStepResult(EFail);
+ }
+ us = maxtime / icountperusec;
+ INFO_PRINTF2(_L("Maximum time %f us"), us);
+ us = avetime / icountperusec;
+ INFO_PRINTF2(_L("Average time %f us"), us);
+
+ return TestStepResult();
+ }