--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/traceservices/tracefw/ost_trace_api/unit_test/te_ost/src/te_check_performance_step.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,356 @@
+// 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:
+//
+
+
+
+/**
+ @file te_check_performance_step.cpp
+ @internalTechnology
+*/
+
+#include <hal.h>
+#include "te_suite_defs.h"
+#include "te_check_performance_step.h"
+#include "te_logger.h"
+#include "te_tracerecord.h"
+#include "te_tracer.h"
+#include "te_trace_for_lauterbach.h"
+
+
+_LIT(KLogFilename, "CCheckPerformanceStep.utf");
+
+CCheckPerformanceStep::~CCheckPerformanceStep()
+/**
+ * Destructor
+ */
+ {
+ }
+
+CCheckPerformanceStep::CCheckPerformanceStep()
+/**
+ * Constructor
+ */
+ {
+ // **MUST** call SetTestStepName in the constructor as the controlling
+ // framework uses the test step name immediately following construction to set
+ // up the step's unique logging ID.
+ SetTestStepName(KCheckPerformanceStep);
+
+ SetLogFilename(KLogFilename);
+ DeleteLogFile();
+ }
+
+TVerdict CCheckPerformanceStep::doTestStepPreambleL()
+ {
+ if(TestStepResult()==EPass)
+ {
+ //SetTestStepResult(EFail);
+ }
+ return TestStepResult();
+ }
+
+
+
+TVerdict CCheckPerformanceStep::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)
+ {
+ //set up the trace record(s)
+ TTraceConfigs trace;
+ TTraceConfigsOperator::Init(trace);
+ TTraceConfigsOperator::SetOptions(trace, EPrintTDesC8, ETrue, ETrue);
+ TTraceConfigsOperator::SetHeader(trace, TRACE_FATAL, 0, EAddThreadIdentification, ENoProgramCounter, 0);
+ TTraceConfigsOperator::SetData(trace, KData1, KData2, KAny1, KAny8);
+ TTraceConfigsOperator::SetData(trace, KCharString, KCharStringSize);
+ trace.iDesC16.Copy(KAny16);
+ StartLoggingL(trace);
+
+ //Set up the time variables
+ TUint32 baseline = 0;
+ TUint32 templatebaseline = 0;
+ TUint32 time = 0;
+ TUint32 count = 0;
+
+ INFO_PRINTF1(_L("---Baseline figures, user side---"));
+
+#ifdef __WINS__
+ INFO_PRINTF1(_L("WARNING these are emulator figures !! - Not Valid"));
+#endif
+
+
+
+ //Get some baseline figures
+ //To see the variation I call it several times...
+ trace.iApiUsed = EReferenceBaseline;
+ TTraceTester::TimeTraceL(trace, baseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Baseline"), baseline, count);
+ TTraceTester::TimeTraceL(trace, templatebaseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Baseline, variation"), baseline, count);
+ TTraceTester::TimeTraceL(trace, baseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Baseline, variation"), baseline, count);
+ TTraceTester::TimeTraceL(trace, baseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Baseline, variation"), baseline, count);
+ TTraceTester::TimeTraceL(trace, baseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Baseline, variation"), baseline, count);
+ TTraceTester::TimeTraceL(trace, baseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Baseline, variation"), baseline, count);
+ TTraceTester::TimeTraceL(trace, baseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Baseline, variation"), baseline, count);
+
+
+ trace.iApiUsed = EReferenceForLoop;
+ TTraceTester::TimeTraceL(trace, time, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - For loop, no baseline"), time, count);
+ TTraceTester::TimeTraceL(trace, time, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - For loop, no baseline, variation"), time, count);
+ TTraceTester::TimeTraceL(trace, time, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - For loop, no baseline, variation"), time, count);
+
+ trace.iApiUsed = EReferenceInlinedEmpty;
+ TTraceTester::TimeTraceL(trace, templatebaseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - InlinedEmpty as baseline"), templatebaseline, count);
+ TTraceTester::TimeTraceL(trace, templatebaseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - InlinedEmpty as baseline"), templatebaseline, count);
+
+ trace.iApiUsed = EReferenceExportedEmpty;
+ TTraceTester::TimeTraceL(trace, templatebaseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - ExportedEmpty as baseline"), templatebaseline, count);
+ TTraceTester::TimeTraceL(trace, templatebaseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - ExportedEmpty as baseline"), templatebaseline, count);
+
+
+ INFO_PRINTF1(_L("---Reference tests---"));
+ //Check inlined vs exported
+ //reference for kernel and user side...
+ trace.iApiUsed = EReferenceForLoop;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - for(loop)"), time, count);
+
+ //inlined/exported
+ trace.iApiUsed = EReferenceInlinedEmpty;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - InlinedEmpty()"), time, count);
+
+ trace.iApiUsed = EReferenceInlined;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Inlined()"), time, count);
+
+ trace.iApiUsed = EReferenceExportedEmpty;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - ExportedEmpty()"), time, count);
+
+ trace.iApiUsed = EReferenceExported;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - Exported()"), time, count);
+
+ trace.iApiUsed = EReferenceTraceNormal2Data;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstTrace(TUint32, TUint32) no TraceId"), time, count);
+
+ trace.iApiUsed = EReferenceTraceTraceId2Data;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstTrace(TUint32, TUint32) with TraceId"), time, count);
+
+ trace.iApiUsed = EReferenceTraceNormalAny;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstTrace(TAny*, TInt) no TraceId"), time, count);
+
+ trace.iApiUsed = EReferenceTraceTraceIdAny;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstTrace(TAny*, TInt) with TraceId"), time, count);
+
+ //Check some real traces
+ INFO_PRINTF1(_L("---Ost, user side---"));
+ trace.iApiUsed = EPerformanceBaseline;
+ TTraceTester::TimeTraceL(trace, baseline, count);
+ //INFO_PRINTF3(_L(" %i ns, %i traces/us - Baseline"), baseline, count);
+
+ trace.iApiUsed = ETrace;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time -= baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - static OstTrace();"), time, count);
+
+ trace.iApiUsed = BTraceFilteredContext8;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time -= baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - BTraceFilteredContext8 = OstTrace()"), time, count);
+
+ trace.iApiUsed = ETraceTUint32;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstTrace(TUint32)"), time, count);
+
+ trace.iApiUsed = BTraceFilteredContextPc12;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time -= baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - BTraceFilteredContextPc12 = OstTrace(TUint32)"), time, count);
+
+ trace.iApiUsed = ETraceTUint32TUint32;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstTrace(TUint32, TUint32)"), time, count);
+
+ trace.iApiUsed = ETraceTAnySize;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstTrace(TAny, aSize)"), time, count);
+
+ trace.iApiUsed = BTraceFilteredContextPcBig;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - BTraceFilteredContextPcBig = OstTrace(TAny, aSize)"), time, count);
+
+ trace.iApiUsed = EPrintfTRefByValueTDesC16;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstPrintf(TRefByValue<TDesC16>)"), time, count);
+
+ trace.iApiUsed = EPrintfchar;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time = time - baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - OstPrintf(char*)"), time, count);
+
+ //context creation
+ INFO_PRINTF1(_L("---TTraceContext alloations---"));
+ //first call the Trace only call
+ trace.iApiUsed = ETrace;
+ TUint32 timeTraceOnly = 0;
+ TTraceTester::TimeTraceL(trace, timeTraceOnly, count);
+ timeTraceOnly -= baseline;
+
+ //call the context stuff, then subtrace the time it took to make the call
+ trace.iApiUsed = EDefaultComponentId;
+ TUint32 timeIncTrace = 0;
+ TTraceTester::TimeTraceL(trace, timeIncTrace, count);
+ timeIncTrace -= baseline;
+ time = timeIncTrace - timeTraceOnly;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - DefaultComponentId()"), time, count);
+
+ //call the context stuff, then subtrace the time it took to make the call
+ trace.iApiUsed = EContextTClassification;
+ TTraceTester::TimeTraceL(trace, timeIncTrace, count);
+ timeIncTrace -= baseline;
+ time = timeIncTrace - timeTraceOnly;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - TTraceContext(TClassification) (using DefaultComponentId())"), time, count);
+
+ trace.iApiUsed = EContextTClassificationTHasContextIdTHasProgramCounter;
+ TTraceTester::TimeTraceL(trace, timeIncTrace, count);
+ timeIncTrace -= baseline;
+ time = timeIncTrace - timeTraceOnly;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - TTraceContext(TClassification, THasThreadId, THasPC) (using DefaultComponentId())"), time, count);
+
+ trace.iApiUsed = EContextTComponentIdTClassification;
+ TTraceTester::TimeTraceL(trace, timeIncTrace, count);
+ timeIncTrace -= baseline;
+ time = timeIncTrace - timeTraceOnly;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - TTraceContext(TComponentId, TClassification)"), time, count);
+
+ trace.iApiUsed = EContextTComponentIdTClassificationTHasContextIdTHasProgramCounter;
+ TTraceTester::TimeTraceL(trace, timeIncTrace, count);
+ timeIncTrace -= baseline;
+ time = timeIncTrace - timeTraceOnly;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - TTraceContext(TComponentId, TClassification, THasThreadId, THasPC)"), time, count);
+
+ //kernel traces
+ /*INFO_PRINTF1(_L("---Kernel side, Baseline figures---"));
+ trace.iApiUsed = EPerformanceKernelBaseline;
+ TTraceTester::TimeTraceL(trace, baseline, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - baseline"), baseline, count);
+ TUint32 baseline2 = 0;
+ TTraceTester::TimeTraceL(trace, baseline2, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - baseline to see variation"), baseline2, count);
+ TUint32 baseline3 = 0;
+ TTraceTester::TimeTraceL(trace, baseline3, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - baseline to see variation"), baseline3, count);
+ TInt smallest = 0;
+ TInt biggest = 0;
+ //Very ugly, but just temp thing...
+ //find the smallest baseline
+ if(baseline < baseline2)
+ if(baseline < baseline3)
+ smallest = baseline;
+ else
+ smallest = baseline3;
+ else
+ if(baseline2 < baseline3)
+ smallest = baseline2;
+ else
+ smallest = baseline3;
+ //find the largest baseline
+ if(baseline > baseline2)
+ if(baseline > baseline3)
+ biggest = baseline;
+ else
+ biggest = baseline3;
+ else
+ if(baseline2 > baseline3)
+ biggest = baseline2;
+ else
+ biggest = baseline3;
+
+ INFO_PRINTF4(_L("Variation of baselines from %i - %i, diff %i ns"), smallest, biggest, (biggest - smallest));
+
+ trace.iApiUsed = EReferenceKernelForLoop;
+ TTraceTester::TimeTraceL(trace, time, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - for loop - no baseline"), time, count);
+ TTraceTester::TimeTraceL(trace, time, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - for loop - no baseline"), time, count);
+ TTraceTester::TimeTraceL(trace, time, count);
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - for loop - no baseline"), time, count);
+
+ INFO_PRINTF1(_L("---Ost calls, kernel side---"));
+
+ trace.iApiUsed = EUtfKernelTrace;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time -= baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - TUTraceNormal::Trace()"), time, count);
+
+ trace.iApiUsed = BTraceKernelFilteredContext8;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time -= baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - BTraceKernelFilteredContext8, equivalent of TUTraceNormal::Trace()"), time, count);
+
+ trace.iApiUsed = EKernelTraceTTemplated;
+ TTraceTester::TimeTraceL(trace, time, count);
+ time -= baseline;
+ INFO_PRINTF3(_L(" %i ns, %i traces/us - TUTraceNormal::Trace(const T&)"), time, count);
+ */
+ StopLogging();
+ }
+ return TestStepResult();
+ }
+
+
+TInt CCheckPerformanceStep::FindLargestAndSmallest(RArray<TUint32> /*aList*/, TInt& /*aLargest*/, TInt& /*aSmallest*/)
+ {
+ return KErrNotSupported;
+ }
+
+