applayerprotocols/httptransportfw/utils/TimerLogger.cpp
changeset 0 b16258d2340f
child 49 b91bcc4b38e4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httptransportfw/utils/TimerLogger.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,122 @@
+// 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:
+//
+
+#include <f32file.h> // for TParse, in Flogger stuff
+#include <e32std.h>
+
+#include "timerlogger.h"
+
+#define KTestHeader				_L8("HTTP PERFORMANCE LOGGER\n\n\n")
+#define KTestLogs				_L8("TEST NAME,METHOD NAME,TIME IN MICROSECONDS\n\n")
+#define KTestCommentPrepend		_L("\t")
+
+_LIT(KFileName, "c:\\logs\\http\\peformance_logger.csv");
+_LIT(KFilePath, "c:\\logs\\http\\");
+
+#define KMaxLogLineLength 128
+
+/**
+ Destructor
+*/
+EXPORT_C TTimerLogger::~TTimerLogger()
+	{
+#if defined (__LOG_PERFORMANCE) && !defined (_DEBUG)
+	iFile.Close();
+	iFs.Close();
+#endif
+	}
+
+void TTimerLogger::LogIt(const TDesC& aComment)
+	{
+	TInt err = iFs.Connect();
+	if(err == KErrNone)
+		{
+		iFs.MkDirAll(KFilePath);
+		err = iFile.Open(iFs, KFileName, EFileWrite);
+		if(err == KErrNotFound)
+			{
+			iFile.Create(iFs, KFileName, EFileWrite);
+			iFile.Write(KTestHeader);
+			iFile.Write(KTestLogs);
+			}
+		TFileText file;
+	    file.Set(iFile);
+		file.Write(aComment);
+		iFile.Close();
+		iFs.Close();
+		}
+	else	
+		{
+		User::InfoPrint(_L("Cannot write to file"));
+		}
+	}
+	
+
+/** 
+    Initiates the timer
+*/
+EXPORT_C void TTimerLogger::StartTimer()
+	{
+	#if defined (__LOG_PERFORMANCE) && !defined (_DEBUG)
+	iStartTime.UniversalTime();
+	#endif
+	}
+
+
+/** 
+  Terminates the timer
+  @param aComment Name of API.
+*/
+EXPORT_C void TTimerLogger::EndTimer(const TDesC& aComment)
+	{
+    #if defined (__LOG_PERFORMANCE) && !defined (_DEBUG)
+	iEndTime.UniversalTime();
+	TTimeIntervalMicroSeconds iTimeDifference = iEndTime.MicroSecondsFrom(iStartTime);	
+	_LIT(KTimeDiff, ",%d microseconds\n");
+	RBuf myBuf;
+	myBuf.Create (aComment.Length()+64);
+	myBuf.Append (aComment );
+	myBuf.AppendFormat(KTimeDiff, iTimeDifference.Int64());
+    LogIt(myBuf);
+	myBuf.Close();	
+	iStartTime = 0;
+	iEndTime = 0;
+	#endif
+	}
+
+
+/** Methods from TDesOverflow
+	@param aDes modifiable descriptor whose overflow results in the call to this overflow handler.
+*/
+EXPORT_C void TTimerLogger::Overflow(TDes& aDes)
+	{
+	#if defined (__LOG_PERFORMANCE) && !defined (_DEBUG)
+	// Overflow has occured - end log line with '...'
+	_LIT(KErrOverflowMsg, "...");
+	if( aDes.MaxLength() >= KErrOverflowMsg().Length() + aDes.Length() )
+		aDes.Append(KErrOverflowMsg);
+	#endif
+	}
+
+/**
+ Displays the test case name
+ @param aComment Name of API.
+*/
+EXPORT_C void TTimerLogger::TestName(const TDesC& aComment)
+	{
+	#if defined (__LOG_PERFORMANCE) && !defined (_DEBUG)
+    LogIt(aComment);
+	#endif
+	}