traceservices/tracefw/integ_test/ulogger/TEF/te_ulogger/src/te_uloggermclperfstep.cpp
changeset 0 08ec8eefde2f
child 23 26645d81f48d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/traceservices/tracefw/integ_test/ulogger/TEF/te_ulogger/src/te_uloggermclperfstep.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,553 @@
+// Copyright (c) 2005-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:
+// Example CTestStep derived implementation
+// 
+//
+
+/**
+ @file te_uloggermclperfstep.cpp
+ @internalTechnology
+*/
+#include "te_uloggermclperfstep.h"
+#include "te_uloggermclsuitedefs.h"
+#include <e32math.h>
+
+using namespace Ulogger;
+
+////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////
+//////////////////////////////////USER SIDE/////////////////////////////
+////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////
+
+CULoggerMCLUserPerfStep::~CULoggerMCLUserPerfStep()
+/**
+ * Destructor
+ */
+	{
+	}
+
+CULoggerMCLUserPerfStep::CULoggerMCLUserPerfStep()
+/**
+ * Constructor
+ */
+	{
+		SetTestStepName(KULoggerMCLUserPerfStep);
+	}
+
+TVerdict CULoggerMCLUserPerfStep::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+		INFO_PRINTF1(_L("Carrying out performance testing on user side tracing for file and serial plugins"));
+		SetTestStepResult(EPass);
+		return TestStepResult();
+	}
+
+
+TVerdict CULoggerMCLUserPerfStep::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	  	if (TestStepResult()==EPass)
+		{
+		//  ************** Delete the Block, the block start ****************
+			INFO_PRINTF1(_L("Benchmark trace logging for the file plug-in"));
+			 __CREATE_LOG(true);
+			 __HIRES_RESOLUTION;
+			TInt fastTimerFreq;
+			HAL::Get(HALData::EFastCounterFrequency, fastTimerFreq);
+			TReal ticksPerMicroSec = 1.0E-6 * fastTimerFreq;	
+			TUint32 prevTime;
+			TUint32 timeDiff;
+			TReal timeSpentToTrace;
+			bool ret=1;
+			CUTraces Testtracer;
+			TUTrace TestTraceObject(UTracePrimary, UTraceSecondary, schema, context, pc);
+			TInt Result=0;
+			/***Now set file plugins and filter settings****/
+			RULogger logger;
+			logger.Connect();
+			CClearConfig configIni;
+			configIni.Clear(logger);
+			CArrayFixFlat<TUint8> *setprimfilter = new (ELeave)CArrayFixFlat<TUint8>(1);
+			setprimfilter->AppendL(UTracePrimary);
+			RArray<TUint32> setsecondfilter;
+			setsecondfilter.Append((TUint32) UTraceSecondary);
+			logger.SetPrimaryFiltersEnabled(*setprimfilter,ETrue);
+			logger.SetSecondaryFiltersEnabled(setsecondfilter,ETrue);
+		
+			///////////////////////////////////////////////////////////
+			///////////////////////////////////////////////////////////
+			/////////////////////////FILE//////////////////////////////
+			///////////////////////////////////////////////////////////
+			///////////////////////////////////////////////////////////
+	
+			INFO_PRINTF1(_L("about to set file as output plugin"));
+			//NB: this of course assumes that the plugin functionality works which is tested more rigorously in the plugin test step
+			if(Result==0)	
+			{
+				INFO_PRINTF1(_L("file set as output plugin ok"));
+				_LIT8(KTextmedia,"uloggerfileplugin");
+				TPtrC8 mediaptr(KTextmedia);
+				Result=logger.ActivateOutputPlugin(mediaptr);
+				if(Result==0||Result==-11)
+				{	
+					INFO_PRINTF1(_L("file set as active output plugin ok"));
+					_LIT(KTextsetting, "output_path");
+					_LIT(KTextvalue, "c:\\logs\\ULoggerPerfUserSideFileLogging.log");
+					TPluginConfiguration setPluginConfigs;
+					setPluginConfigs.SetKey(KTextsetting);
+					setPluginConfigs.SetValue(KTextvalue);
+					Result=logger.SetPluginConfigurations(mediaptr, setPluginConfigs);
+					if(Result==0)
+						INFO_PRINTF1(_L("output plugin settings set ok"));
+					else
+						INFO_PRINTF1(_L("setting output plugin settings failed"));
+				}
+				else
+					INFO_PRINTF1(_L("file not set as active output plugin - failed"));
+			}
+			else
+				INFO_PRINTF1(_L("add file as output plugin failed"));
+			/***Now carry out performance benchmarking and tracing for NonStatic SET method to file****/
+			__LOG("Trace times for 10,000 user side nonstatic set traces logging to file plugin");
+#ifdef FILE_PERF	
+			for(int tracetag=0;tracetag!=NumberOfUTraceMacros;tracetag++)
+			{
+				logger.Start();
+ 			 	__LOG("NONStatic Trace ID: ")
+ 			 	__LOGNUM(tracetag)	 
+				ret = 0;
+				timeDiff=0;
+				for(int i=0;i!=StatAverage;i++)
+				{
+					User::After(Math::Random()%100000);
+					prevTime = User::FastCounter();
+					for(int i=0;i!=UTrace_Cache_Count;i++)
+						ret = Testtracer.DoTheSetTrace(tracetag, TestTraceObject);
+					timeDiff += User::FastCounter() - prevTime;
+				}
+				timeSpentToTrace = timeDiff/ticksPerMicroSec/StatAverage;
+				INFO_PRINTF5(_L("Utrace macro %d trace, size %d (%d trace(s))= %10.6lf microseconds"), tracetag, Testtracer.SizeOfTrace(tracetag), UTrace_Cache_Count, timeSpentToTrace);
+				INFO_PRINTF2(_L("Time per trace = %10.6e microseconds"),timeSpentToTrace/UTrace_Count );
+				logger.Stop();
+			}
+			if(ret==0)
+				INFO_PRINTF1(_L("tracing failed from UTrace"));
+			/***Now carry out performance benchmarking and tracing for Static method to file****/
+			__LOG("Trace times for 10,000 user side static traces logging to file plugin");
+			for(int tracetag=0;tracetag!=NumberOfUTraceMacros;tracetag++)
+			{
+				logger.Start();
+ 			 	__LOG("Static Trace ID: ")
+ 			 	__LOGNUM(tracetag)	 
+				ret = 0;
+				timeDiff=0;
+				for(int i=0;i!=StatAverage;i++)
+				{
+					User::After(Math::Random()%100000);
+					prevTime = User::FastCounter();
+					for(int i=0;i!=UTrace_Cache_Count;i++)
+						ret = Testtracer.DoTheStaticTrace(tracetag);
+					timeDiff += User::FastCounter() - prevTime;
+				}
+				timeSpentToTrace = timeDiff/ticksPerMicroSec/StatAverage;
+				INFO_PRINTF5(_L("Utrace macro %d trace, size %d (%d trace(s))= %10.6lf microseconds"), tracetag, Testtracer.SizeOfTrace(tracetag), UTrace_Cache_Count, timeSpentToTrace);
+				INFO_PRINTF2(_L("Time per trace = %10.6e microseconds"),timeSpentToTrace/UTrace_Count );
+				logger.Stop();
+			}
+			if(ret==0)
+				INFO_PRINTF1(_L("tracing failed from UTrace"));
+#endif	//file
+	
+			///////////////////////////////////////////////////////////
+			///////////////////////////////////////////////////////////
+			////////////////////////SERIAL/////////////////////////////
+			///////////////////////////////////////////////////////////
+			///////////////////////////////////////////////////////////
+		
+			INFO_PRINTF1(_L("Now benchmark trace logging for the serial plug-in"));
+			// adding a plugin
+			_LIT8(KSerialTextmedia,"uloggerserialplugin");
+			TPtrC8 serialmediaptr(KSerialTextmedia);
+			Result=logger.ActivateOutputPlugin(serialmediaptr);
+			if(Result==0)			
+			{	
+			// test the added plugin can be activated
+				if(Result==0||Result==-11)	
+				{	
+					INFO_PRINTF1(_L("Serial Plugin active"));
+					_LIT(KSerialTextsetting, "output_port");	
+					_LIT(KSerialTextvalue, "3");
+					// test setting the plugin settings
+					TPluginConfiguration setSerialPluginConfigs;
+					setSerialPluginConfigs.SetKey(KSerialTextsetting);
+					setSerialPluginConfigs.SetValue(KSerialTextvalue);				
+					Result=logger.SetPluginConfigurations(serialmediaptr, setSerialPluginConfigs);
+					if(Result==0)	
+					{
+						INFO_PRINTF1(_L("Serial Plugin Settings set correctly"));
+					}
+				}
+				else
+					INFO_PRINTF1(_L("Serial plugin not set as active plugin"));
+			}
+			__LOG("Trace times for 10,000 user side nonstatic traces logging to serial plugin");
+			/***Now carry out performance benchmarking and tracing for nonstatic set method to serial****/
+#ifdef SERIAL_PERF
+#ifndef __WINSCW__			
+			for(int tracetag=0;tracetag!=NumberOfUTraceMacros;tracetag++)
+			{
+				logger.Start();
+ 			 	__LOG("NONStatic Trace ID: ")
+ 			 	__LOGNUM(tracetag)	 
+				ret = 0;
+				timeDiff=0;
+				for(int i=0;i!=StatAverage;i++)
+				{
+					User::After(Math::Random()%100000);
+					prevTime = User::FastCounter();
+					for(int i=0;i!=UTrace_Cache_Count;i++)
+						ret = Testtracer.DoTheSetTrace(tracetag, TestTraceObject);
+					timeDiff += User::FastCounter() - prevTime;
+				}
+				timeSpentToTrace = timeDiff/ticksPerMicroSec/StatAverage;
+				INFO_PRINTF5(_L("Utrace macro %d trace, size %d (%d trace(s))= %10.6lf microseconds"), tracetag, Testtracer.SizeOfTrace(tracetag), UTrace_Cache_Count, timeSpentToTrace);
+				INFO_PRINTF2(_L("Time per trace = %10.6e microseconds"),timeSpentToTrace/UTrace_Count );
+				logger.Stop();
+			}
+			if(ret==0)
+			INFO_PRINTF1(_L("tracing failed from UTrace"));
+			__LOG("Trace times for 10,000 user side static traces logging to serial plugin");
+				for(int tracetag=0;tracetag!=NumberOfUTraceMacros;tracetag++)
+			{
+				logger.Start();
+ 			 	__LOG("Static Trace ID: ")
+ 			 	__LOGNUM(tracetag)	 
+				ret = 0;
+				timeDiff=0;
+				for(int i=0;i!=StatAverage;i++)
+				{
+					User::After(Math::Random()%100000);
+					prevTime = User::FastCounter();
+					for(int i=0;i!=UTrace_Cache_Count;i++)
+						ret = Testtracer.DoTheStaticTrace(tracetag);
+					timeDiff += User::FastCounter() - prevTime;
+				}
+				timeSpentToTrace = timeDiff/ticksPerMicroSec/StatAverage;
+				INFO_PRINTF5(_L("Utrace macro %d trace, size %d (%d trace(s))= %10.6lf microseconds"), tracetag, Testtracer.SizeOfTrace(tracetag), UTrace_Cache_Count, timeSpentToTrace);
+				INFO_PRINTF2(_L("Time per trace = %10.6e microseconds"),timeSpentToTrace/UTrace_Count );
+				logger.Stop();
+			}
+			if(ret==0)
+			INFO_PRINTF1(_L("tracing failed from UTrace"));
+#endif //winscw
+#endif //serial
+			//  **************   Block end ****************
+			if(ret==0||Result==1)
+				SetTestStepResult(EFail);
+			else
+				SetTestStepResult(EPass);
+		}
+	 	return TestStepResult();
+	}
+
+
+
+TVerdict CULoggerMCLUserPerfStep::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+		INFO_PRINTF1(_L("Completed performance testing on user side tracing for file and serial plugins"));
+		return TestStepResult();
+	}
+
+
+////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////
+//////////////////////////////////KERNEL SIDE///////////////////////////
+////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////
+
+
+CULoggerMCLKernelPerfStep::~CULoggerMCLKernelPerfStep()
+/**
+ * Destructor
+ */
+	{
+	}
+
+CULoggerMCLKernelPerfStep::CULoggerMCLKernelPerfStep()
+/**
+ * Constructor
+ */
+	{
+		SetTestStepName(KULoggerMCLKernelPerfStep);
+	}
+
+TVerdict CULoggerMCLKernelPerfStep::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+		INFO_PRINTF1(_L("Carrying out performance testing on kernel side tracing for file and serial plugins"));
+		SetTestStepResult(EPass);
+		return TestStepResult();
+	}
+
+
+TVerdict CULoggerMCLKernelPerfStep::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+		if (TestStepResult()==EPass)
+		{
+			//  ************** Delete the Block, the block start ****************
+#ifndef __WINSCW__			
+			INFO_PRINTF1(_L("Benchmark trace logging for the file plug-in"));
+			 __CREATE_LOG(true);
+			 __HIRES_RESOLUTION;
+			TInt fastTimerFreq;
+			HAL::Get(HALData::EFastCounterFrequency, fastTimerFreq);
+			TReal ticksPerMicroSec = 1.0E-6 * fastTimerFreq;	
+			TUint32 prevTime;
+			TUint32 timeDiff;
+			TReal timeSpentToTrace;	
+			CUKernelTraces TestKerneltracer;
+			TInt Result=0;
+			/***Now set file plugins and filter settings****/
+			RULogger logger;
+			logger.Connect();
+			CClearConfig configIni;	
+			configIni.Clear(logger);		
+			CArrayFixFlat<TUint8> *setprimfilter = new (ELeave)CArrayFixFlat<TUint8>(1);
+			setprimfilter->AppendL(UTracePrimary);
+			RArray<TUint32> setsecondfilter;
+			setsecondfilter.Append((TUint32) UTraceSecondary);		
+			logger.SetPrimaryFiltersEnabled(*setprimfilter,ETrue);
+			logger.SetSecondaryFiltersEnabled(setsecondfilter,ETrue);
+			/**Load usb device**/
+			TInt ret = KErrNone;
+			ret =User::LoadLogicalDevice(_L("eusbc.ldd"));
+			if(ret == KErrAlreadyExists)
+			ret = KErrNone;	
+			RDevUsbcClient usbDevice;
+			usbDevice.Open(0);	
+	
+			///////////////////////////////////////////////////////////
+			///////////////////////////////////////////////////////////
+			/////////////////////////FILE//////////////////////////////
+			///////////////////////////////////////////////////////////
+			///////////////////////////////////////////////////////////
+		
+			INFO_PRINTF1(_L("about to set file as output plugin"));
+			//NB: this of course assumes that the plugin functionality works which is tested more rigorously in the plugin test step
+			if(Result==0)	
+			{
+				INFO_PRINTF1(_L("file set as output plugin ok"));
+				_LIT8(KTextmedia,"uloggerfileplugin");
+				TPtrC8 mediaptr(KTextmedia);
+				Result=logger.ActivateOutputPlugin(mediaptr);				
+				if(Result==0||Result==-11)
+				{	
+					INFO_PRINTF1(_L("file set as active output plugin ok"));
+					_LIT(KTextsetting, "output_path");
+					_LIT(KTextvalue, "c:\\logs\\ULoggerPerfKernelSideFileLogging.log");
+					TPluginConfiguration setPluginConfigs;
+					setPluginConfigs.SetKey(KTextsetting);
+					setPluginConfigs.SetValue(KTextvalue);				
+					Result=logger.SetPluginConfigurations(mediaptr, setPluginConfigs);
+					if(Result==0)
+						INFO_PRINTF1(_L("output plugin settings set ok"));
+					else
+						INFO_PRINTF1(_L("setting output plugin settings failed"));
+				}
+				else
+					INFO_PRINTF1(_L("file not set as active output plugin - failed"));
+			}
+			else
+				INFO_PRINTF1(_L("add file as output plugin failed"));
+			/***Now carry out performance benchmarking and tracing for NonStatic SET method to file****/
+			__LOG("Trace times for 10,000 kernel side nonstatic set traces logging to file plugin");
+#ifdef FILE_PERF	
+			for(int tracetag=0;tracetag!=NumberOfUTraceMacros;tracetag++)
+			{
+				logger.Start();
+			 	__LOG("NONStatic Trace ID: ")
+			 	__LOGNUM(tracetag)	 
+				ret = 0;
+				timeDiff=0;
+				for(int i=0;i!=StatAverage;i++)
+				{
+					User::After(Math::Random()%100000);
+					prevTime = User::FastCounter();
+					for(int i=0;i!=UTrace_Cache_Count;i++)
+						ret = TestKerneltracer.DoTheKernelSetTrace(tracetag, usbDevice);
+					timeDiff += User::FastCounter() - prevTime;
+				}
+				timeSpentToTrace = timeDiff/ticksPerMicroSec/StatAverage;
+				INFO_PRINTF5(_L("Utrace macro %d trace, size %d (%d trace(s))= %10.6lf microseconds"), tracetag, TestKerneltracer.SizeOfKernelTrace(tracetag), UTrace_Cache_Count, timeSpentToTrace);
+				INFO_PRINTF2(_L("Time per trace = %10.6e microseconds"),timeSpentToTrace/UTrace_Count );
+				logger.Stop();
+			}
+			if(ret==0)
+				INFO_PRINTF1(_L("device driver returned error, but tracing should still be carried out"));
+			/***Now carry out performance benchmarking and tracing for Static method to file****/
+			__LOG("Trace times for 10,000 kernel side static traces logging to file plugin");
+			for(int tracetag=0;tracetag!=NumberOfUTraceMacros;tracetag++)
+			{
+				logger.Start();
+			 	__LOG("Static Trace ID: ")
+			 	__LOGNUM(tracetag)	 
+				ret = 0;
+				timeDiff=0;
+				for(int i=0;i!=StatAverage;i++)
+				{
+					User::After(Math::Random()%100000);
+					prevTime = User::FastCounter();
+					for(int i=0;i!=UTrace_Cache_Count;i++)
+						ret = TestKerneltracer.DoTheKernelStaticTrace(tracetag, usbDevice);
+					timeDiff += User::FastCounter() - prevTime;
+				}
+				timeSpentToTrace = timeDiff/ticksPerMicroSec/StatAverage;
+				INFO_PRINTF5(_L("Utrace macro %d trace, size %d (%d trace(s))= %10.6lf microseconds"), tracetag, TestKerneltracer.SizeOfKernelTrace(tracetag), UTrace_Cache_Count, timeSpentToTrace);
+				INFO_PRINTF2(_L("Time per trace = %10.6e microseconds"),timeSpentToTrace/UTrace_Count );
+				logger.Stop();
+			}
+			if(ret==0)
+				INFO_PRINTF1(_L("device driver returned error, but tracing should still be carried out"));
+#endif	//file
+				
+
+		///////////////////////////////////////////////////////////
+		///////////////////////////////////////////////////////////
+		////////////////////////SERIAL/////////////////////////////
+		///////////////////////////////////////////////////////////
+		///////////////////////////////////////////////////////////
+		
+			INFO_PRINTF1(_L("Now benchmark trace logging for the serial plug-in"));
+			_LIT8(KSerialTextmedia,"uloggerserialplugin");
+			TPtrC8 serialmediaptr(KSerialTextmedia);
+			Result=logger.ActivateOutputPlugin(serialmediaptr);				
+			if(Result==0||Result==-11)			
+			{	
+				// test the added plugin can be activated			
+				if(Result==0)	
+				{	
+					INFO_PRINTF1(_L("Serial Plugin active"));
+					_LIT(KSerialTextsetting, "output_port");
+					_LIT(KSerialTextvalue, "3");
+					// test setting the plugin settings
+					TPluginConfiguration setSerialPluginConfigs;
+					setSerialPluginConfigs.SetKey(KSerialTextsetting);
+					setSerialPluginConfigs.SetValue(KSerialTextvalue);
+					Result=logger.SetPluginConfigurations(serialmediaptr, setSerialPluginConfigs);
+					if(Result==0)	
+					{
+						INFO_PRINTF1(_L("Serial Plugin Settings set correctly"));
+					}	
+				}
+				else
+					INFO_PRINTF1(_L("Serial plugin not set as active plugin"));
+			}
+			else
+				INFO_PRINTF1(_L("Serial plugin not added as output plugin"));
+			/***Now carry out performance benchmarking and tracing for NonStatic SET method to serial****/
+			__LOG("Trace times for 10,000 kernel side nonstatic set traces logging to serial plugin");
+#ifdef SERIAL_PERF
+			for(int tracetag=0;tracetag!=NumberOfUTraceMacros;tracetag++)
+			{
+				logger.Start();
+			 	__LOG("NONStatic Trace ID: ")
+			 	__LOGNUM(tracetag)	 
+				ret = 0;
+				timeDiff=0;
+				for(int i=0;i!=StatAverage;i++)
+				{
+					User::After(Math::Random()%100000);
+					prevTime = User::FastCounter();
+					for(int i=0;i!=UTrace_Cache_Count;i++)
+						ret = TestKerneltracer.DoTheKernelSetTrace(tracetag, usbDevice);
+					timeDiff += User::FastCounter() - prevTime;
+				}
+				timeSpentToTrace = timeDiff/ticksPerMicroSec/StatAverage;
+				INFO_PRINTF5(_L("Utrace macro %d trace, size %d (%d trace(s))= %10.6lf microseconds"), tracetag, TestKerneltracer.SizeOfKernelTrace(tracetag), UTrace_Cache_Count, timeSpentToTrace);
+				INFO_PRINTF2(_L("Time per trace = %10.6e microseconds"),timeSpentToTrace/UTrace_Count );
+				logger.Stop();
+			}
+			if(ret==0)
+				INFO_PRINTF1(_L("device driver returned error, but tracing should still be carried out"));
+			/***Now carry out performance benchmarking and tracing for Static method to file****/
+			__LOG("Trace times for 10,000 kernel side static traces logging to serial plugin");
+			for(int tracetag=0;tracetag!=NumberOfUTraceMacros;tracetag++)
+			{
+				logger.Start();
+			 	__LOG("Static Trace ID: ")
+			 	__LOGNUM(tracetag)	 
+				ret = 0;
+				timeDiff=0;
+				for(int i=0;i!=StatAverage;i++)
+				{
+					User::After(Math::Random()%100000);
+					prevTime = User::FastCounter();
+					for(int i=0;i!=UTrace_Cache_Count;i++)
+						ret = TestKerneltracer.DoTheKernelStaticTrace(tracetag, usbDevice);
+					timeDiff += User::FastCounter() - prevTime;
+				}
+				timeSpentToTrace = timeDiff/ticksPerMicroSec/StatAverage;
+				INFO_PRINTF5(_L("Utrace macro %d trace, size %d (%d trace(s))= %10.6lf microseconds"), tracetag, TestKerneltracer.SizeOfKernelTrace(tracetag), UTrace_Cache_Count, timeSpentToTrace);
+				INFO_PRINTF2(_L("Time per trace = %10.6e microseconds"),timeSpentToTrace/UTrace_Count );
+				logger.Stop();
+			}
+			if(ret==0)
+				INFO_PRINTF1(_L("device driver returned error, but tracing should still be carried out"));
+#endif	//serial
+			//  **************   Block end ****************
+			if(Result==0)
+				SetTestStepResult(EPass);
+			else
+				SetTestStepResult(EFail);
+#endif //winscw
+#ifdef __WINSCW__
+		INFO_PRINTF1(_L("Kernel tests not run on emulator"));			
+#endif
+		}
+	  	return TestStepResult();
+	}
+
+
+
+TVerdict CULoggerMCLKernelPerfStep::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+		INFO_PRINTF1(_L("Completed performance testing on kernel side tracing for file and serial plugins"));
+		return TestStepResult();
+	}