diff -r a179b74831c9 -r c1f20ce4abcf kerneltest/f32test/fileutils/inc/tf32testtimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/fileutils/inc/tf32testtimer.h Tue Aug 31 16:34:26 2010 +0300 @@ -0,0 +1,154 @@ +// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "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: +// @file +// +// +// + + +class TF32TestTimer +{ +public: + TF32TestTimer(); + + void Start(); + void Stop(); + + TInt64 TimeTaken() const; + TTimeIntervalMicroSeconds Time() const; + TTimeIntervalMicroSeconds32 Time32() const; + int TimeInMicroSeconds() const; + int TimeInMilliSeconds() const; + + static TInt TimeInMilliSeconds(TTimeIntervalMicroSeconds aTime); + static TInt TimeInMilliSeconds(TTimeIntervalMicroSeconds32 aTime); + +protected: + TInt64 Diff(TUint32 aTicks) const; + +protected: + TInt iFastCounterFreq; + TUint32 startTicks; + TUint32 endTicks; +}; + + +class TF32TestTimer2: public TF32TestTimer +{ +public: + void Stop2(); + + TInt64 TimeTaken2() const; + TTimeIntervalMicroSeconds32 Time2() const; + int Time2InMicroSeconds() const; + +private: + TUint32 endTicks2; +}; + +inline TF32TestTimer::TF32TestTimer() +{ + TInt r = HAL::Get(HAL::EFastCounterFrequency, iFastCounterFreq); + test_KErrNone(r); +} + +inline void TF32TestTimer::Start() +{ + startTicks = User::FastCounter(); +} + +inline void TF32TestTimer::Stop() +{ + endTicks = User::FastCounter();; +} + +inline void TF32TestTimer2::Stop2() +{ + endTicks2 = User::FastCounter();; +} + +inline TInt64 TF32TestTimer::Diff(TUint32 aTicks) const +{ + if (aTicks == startTicks) + { + test.Printf(_L("Warning: tick not advanced")); + } + + TInt64 diff; + if (aTicks > startTicks) + { + diff = static_cast(aTicks) - static_cast(startTicks); + } + else + { + // handle counter rollover + diff = ((static_cast(KMaxTUint32) + 1 + aTicks) - static_cast(startTicks)); + } + //RDebug::Printf("%x %x %ld", aTicks, startTicks, diff); + diff *= TInt64(1000000); + diff /= TInt64(iFastCounterFreq); + + return diff; +} + +inline TInt64 TF32TestTimer::TimeTaken() const +{ + return Diff(endTicks); +} + +inline TInt64 TF32TestTimer2::TimeTaken2() const +{ + return Diff(endTicks2); +} + +inline int TF32TestTimer::TimeInMicroSeconds() const +{ + return static_cast (TimeTaken()); +} + +inline int TF32TestTimer2::Time2InMicroSeconds() const +{ + return static_cast (TimeTaken2()); +} + +inline TTimeIntervalMicroSeconds TF32TestTimer::Time() const +{ + return TimeTaken(); +} + +inline TTimeIntervalMicroSeconds32 TF32TestTimer2::Time2() const +{ + return static_cast (TimeTaken2()); +} + +inline TTimeIntervalMicroSeconds32 TF32TestTimer::Time32() const +{ + return static_cast (TimeTaken()); +} + +inline int TF32TestTimer::TimeInMilliSeconds() const +{ + return static_cast (TimeTaken() / 1000); +} + +TInt TF32TestTimer::TimeInMilliSeconds(TTimeIntervalMicroSeconds aTime) +{ + return static_cast (aTime.Int64()/static_cast(1000)); +} + +TInt TF32TestTimer::TimeInMilliSeconds(TTimeIntervalMicroSeconds32 aTime) +{ + return static_cast (aTime.Int()/1000); +} +