traceservices/tracefw/integ_test/ost/TEF/te_ostv2integsuite_performance/src/te_perftracetester.cpp
// 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:
// ost Performance Tests ost Call.
//
/**
@file te_perftracetester.cpp
@internalTechnology
@prototype
*/
#include <opensystemtrace.h>
#ifndef __KERNEL_MODE__
#include <e32base.h> //for cleanupstack
#endif
#include "te_perftracetester.h"
#include "te_instrumentationpoints.h"
#include "te_perfcacheflush.h"
#include "te_d32perfdrv.h"
#include "timer/te_perfusertimer.h"
TInt TUptTraceTester::SendTraceL(const TApiRunConfig& aApiRunConfig, TApiRunResults& aApiRunResults) //pass the configuration here
{
TInt error = KErrNone;
if(TUptTraceCalls::IsKernelTrace(aApiRunConfig.iApiId))
{
#ifndef __KERNEL_MODE__
RUptUTrace utracedriver;
//update with test on whether compiled of not!!
error = utracedriver.Open();
if(!error)
{
error = utracedriver.TestUptUtrace(aApiRunConfig, aApiRunResults);
}
utracedriver.Close();
#endif
}
else
{
//it's a user side trace, call it directly
error = TUptTraceCalls::DoSendTraceL(aApiRunConfig, aApiRunResults);
}
return error;
}
TInt TUptTraceTester::TimeTraceL(const TApiRunConfig& aApiRunConfig, TApiRunResults& aApiRunResults) //pass the configuration here
{
TInt error = KErrNone;
TUint32 callResults[KNumberOfTraceCallIterations];
for(TInt i = 0; i < KNumberOfTraceCallIterations; i++)
{
error = TimeTraceCall(aApiRunConfig, aApiRunResults);
callResults[i] = aApiRunResults.iApiTraceTime;
}
TUint32 total = 0;
for(TInt i = 0; i < KNumberOfTraceCallIterations; i++)
total += callResults[i];
aApiRunResults.iApiTraceTime = total / KNumberOfTraceCallIterations; //average
return error;
}
TInt TUptTraceTester::TimeTraceCall(const TApiRunConfig& aApiRunConfig, TApiRunResults& aApiRunResults)
{
TInt error = KErrNone;
if(TUptTraceCalls::IsKernelTrace(aApiRunConfig.iApiId))
{
RUptUTrace utracedriver;
error = utracedriver.Open();
if(!error)
{
error = utracedriver.TimeUptUtrace(aApiRunConfig, aApiRunResults);
}
utracedriver.Close();
}
else
{
error = TimeUsersideTraceCalls(aApiRunConfig, aApiRunResults);
}
return error;
}
TInt TUptTraceTester::TimeUsersideTraceCalls(const TApiRunConfig& aApiRunConfig, TApiRunResults& aApiRunResults) //pass the configuration here
{
aApiRunResults.iTimeCount = 0;
CUptTimer timer;
TInt error = timer.StartBackgroundTimer();
if(!error)
{
while(!timer.IsTimerExpired())
{
if(aApiRunConfig.iDoFlush) //i.e. if we want the non-cache results
Te_Flush_The_Cache(); //ignoring error? //will be KErrNotSupported for winscw in any case
error = TUptTraceTester::SendTraceL(aApiRunConfig, aApiRunResults);
timer.IncreaseCount();
}
aApiRunResults.iApiTraceTime = timer.FinalTime();
aApiRunResults.iTimeCount = timer.FinalCount();
}
return error;
}
TInt TUptTraceTester::GenerateEvpDataField(const TInt aDataSize, TInt8* aData)
{
TInt err=KErrNone;
for(TInt i=0;i<aDataSize/8;i++)
{
*aData=0x00;
aData++;
}
for(TInt i=0;i<aDataSize/8;i++)
aData--;
return err;
}
//eof