kerneltest/f32test/fileutils/inc/tf32testtimer.h
changeset 243 c7a0ce20c48c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/fileutils/inc/tf32testtimer.h	Fri Aug 06 16:34:38 2010 +0100
@@ -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<TInt64>(aTicks) - static_cast<TInt64>(startTicks);
+        }
+    else
+        {
+        // handle counter rollover
+        diff = ((static_cast<TInt64>(KMaxTUint32) + 1 + aTicks) - static_cast<TInt64>(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 <int>(TimeTaken());
+}
+
+inline int TF32TestTimer2::Time2InMicroSeconds() const
+{
+    return static_cast <int>(TimeTaken2());
+}
+
+inline TTimeIntervalMicroSeconds TF32TestTimer::Time() const
+{
+    return TimeTaken();
+}
+
+inline TTimeIntervalMicroSeconds32 TF32TestTimer2::Time2() const
+{    
+    return static_cast <int>(TimeTaken2());
+}
+
+inline TTimeIntervalMicroSeconds32 TF32TestTimer::Time32() const
+{
+    return static_cast <int>(TimeTaken());
+}
+
+inline int TF32TestTimer::TimeInMilliSeconds() const
+{
+    return static_cast <int>(TimeTaken() / 1000);
+}
+
+TInt TF32TestTimer::TimeInMilliSeconds(TTimeIntervalMicroSeconds aTime)
+{
+    return static_cast <int>(aTime.Int64()/static_cast<TInt64>(1000));
+}
+
+TInt TF32TestTimer::TimeInMilliSeconds(TTimeIntervalMicroSeconds32 aTime)
+{
+    return static_cast <int>(aTime.Int()/1000);
+}
+