--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/traceservices/tracefw/ost_trace_api/unit_test/te_ost/src/te_usertimer.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,87 @@
+// 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:
+// UTrace Performance Tests User-Side Timer.
+//
+
+
+
+/**
+ @file te_upttimer.cpp
+ @internalTechnology
+ @prototype
+*/
+
+
+#include "te_usertimer.h"
+#include "te_traceglobals.h" //for KMicroToNanoSecondConversion
+#include <hal.h>
+
+
+CUserTimer::CUserTimer()
+ {
+ /*Constructor*/
+
+ }
+
+CUserTimer::~CUserTimer()
+ {
+ /*Destructor*/
+ iTimer.Close();
+ }
+
+/**
+ * This user-side method uses the fast tickcount timer in the hal.h class to get the initial start-time
+ * as a tickcount and store it as a private data member for later manipulation.
+ * @return KErrNone if command was prepared correctly and a system wide error code otherwise.
+ */
+TInt CUserTimer::StartBackgroundTimer()
+ {
+ TInt error = iTimer.CreateLocal();
+ iCount = 0;
+ if(!error)
+ {
+ // Ensure timer is synchronized at the end of a tick
+ // by waiting until it expires after 1 tick
+ iTimer.HighRes(iStatus,1);
+ User::WaitForRequest(iStatus);
+
+ // Now we have a synchronized timer, so the next
+ // delay starts exactly at the beginning of 1 timer
+ // period
+ iTimer.HighRes(iStatus, KTimerDuration);
+ }
+ return error;
+ }
+
+
+/** This user-side method uses the fast tickcount timer in the hal.h class to get the initial start-time
+as a tickcount and store it as a private data member for later manipulation.
+@return KErrNone if command was prepared correctly and a system wide error code otherwise.
+ */
+TUint32 CUserTimer::FinalTime()
+ {
+ //need to do this at some stage but dont want to add another method to do it, but also dont want to force people to call FinalCount()
+ User::WaitForRequest(iStatus);
+ return (KTimerDuration * (TUint32) KMicroToNanoSecondConversion) / iCount;
+ }
+
+TBool CUserTimer::IsTimerExpired()
+ {
+ return (iStatus == KErrNone);
+ }
+
+TInt CUserTimer::FinalCount()
+ {
+ return iCount;
+ }