traceservices/tracefw/ost_trace_api/unit_test/te_ost/src/te_usertimer.cpp
changeset 0 08ec8eefde2f
--- /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;
+	}