Update contrib.
2 * Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
19 #include "tprimegenperformance.h"
24 _LIT(KPrimeGenFormat, "\tPrime Generation Time\t%f");
26 const TUint KMaxIterations=100;
28 CTestAction* CPrimeGenPerformance::NewL(RFs& aFs, CConsoleBase& aConsole,
29 Output& aOut, const TTestActionSpec& aTestActionSpec)
31 CTestAction* self = CPrimeGenPerformance::NewLC(aFs, aConsole,
32 aOut, aTestActionSpec);
37 CTestAction* CPrimeGenPerformance::NewLC(RFs& aFs, CConsoleBase& aConsole,
38 Output& aOut, const TTestActionSpec& aTestActionSpec)
40 CPrimeGenPerformance* self = new(ELeave) CPrimeGenPerformance(aFs, aConsole, aOut);
41 CleanupStack::PushL(self);
42 self->ConstructL(aTestActionSpec);
46 CPrimeGenPerformance::~CPrimeGenPerformance()
51 CPrimeGenPerformance::CPrimeGenPerformance(RFs& aFs, CConsoleBase& aConsole,
52 Output& aOut) : CTestAction(aConsole, aOut), iFs(aFs)
56 void CPrimeGenPerformance::ConstructL(const TTestActionSpec& aTestActionSpec)
58 CTestAction::ConstructL(aTestActionSpec);
59 iBody = HBufC8::NewL(aTestActionSpec.iActionBody.Length());
60 iBody->Des().Copy(aTestActionSpec.iActionBody);
62 iBits = Input::ParseIntElement(*iBody, _L8("<bits>"), _L8("</bits>"));
63 iIterations = Input::ParseIntElement(*iBody, _L8("<iterations>"), _L8("</iterations>"));
64 __ASSERT_ALWAYS(iIterations < KMaxIterations, User::Panic(_L("Iterations too large"), 1));
67 void CPrimeGenPerformance::DoPerformPrerequisite(TRequestStatus& aStatus)
69 TRequestStatus* status = &aStatus;
70 User::RequestComplete(status, KErrNone);
71 iActionState = CTestAction::EAction;
74 void CPrimeGenPerformance::DoPerformPostrequisite(TRequestStatus& aStatus)
76 TRequestStatus* status = &aStatus;
78 User::RequestComplete(status, KErrNone);
81 void CPrimeGenPerformance::DoReportAction(void)
85 void CPrimeGenPerformance::DoCheckResult(TInt)
89 void CPrimeGenPerformance::PerformAction(TRequestStatus& aStatus)
92 TRequestStatus* status = &aStatus;
94 TTimeIntervalSeconds diff(0);
95 const TTimeIntervalSeconds iterationTime(iIterations);
100 start.UniversalTime();
101 while (diff < iterationTime)
103 prime = RInteger::NewPrimeL(iBits, TInteger::ETopBitSet);
107 end.SecondsFrom(start, diff);
111 TTimeIntervalMicroSeconds time = end.MicroSecondsFrom(start);
112 TReal rate = I64REAL(time.Int64()) / iterations;
113 TReal rtime = I64REAL(time.Int64());
114 HBufC* realbuf = HBufC::NewLC(128);
115 TPtr buf = realbuf->Des();
117 buf.Format(KPrimeGenFormat, rate, iterations, rtime);
118 iOut.writeString(buf);
119 iConsole.Printf(_L("."));
120 CleanupStack::PopAndDestroy(realbuf);
122 User::RequestComplete(status, KErrNone);
123 iActionState = CTestAction::EPostrequisite;