--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/uibench/src/teventhandlingperf.cpp Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,223 @@
+// Copyright (c) 2008-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
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "teventhandlingperf.h"
+#include <hal.h>
+
+// Max length of the descriptor used for results of performance tests
+// which are actually done in separate process. And UIBench testcase is
+// used to display them according its format
+// 16 integers plus 8 commas i,e 32 * 16 + 16
+const TInt KMaxDescLength = 528;
+
+CTEventHandlingPerf::CTEventHandlingPerf()
+ {
+ SetTestStepName(KEventHandlingPerfName);
+ }
+
+CTEventHandlingPerf::~CTEventHandlingPerf()
+ {
+ }
+
+TVerdict CTEventHandlingPerf::doTestStepL()
+ {
+/**
+@SYMTestCaseID GRAPHICS-UI-BENCH-0172
+*/
+ SetTestStepID(_L("GRAPHICS-UI-BENCH-0172"));
+ TBuf<KMaxDescLength> bufAvg;
+ TPtr temp(NULL,0);
+ TPtr temp1(NULL,0);
+ TPtr temp2(NULL,0);
+ // Here check if the HAL configuration are correct if not then finish the test case
+ TInt maxPtr;
+ TInt ret = HAL::Get(HALData::EPointerMaxPointers, maxPtr);
+ if (ret != KErrNone || maxPtr < 2 || maxPtr > 8)
+ {
+ INFO_PRINTF1(_L("Incorrect HAL configuration. \n"));
+ SetTestStepResult(EFail);
+ CloseTMSGraphicsStep();
+ RecordTestResultL();
+ return TestStepResult();
+ }
+
+ iProfiler->InitResults();
+ TInt minMemSize = 128;
+ TInt maxMemSize = KMaxDescLength;
+ // Create a shared chunk using the userheap function
+ // Allocate some memory in that and then get the offset from it - chunk's base
+ _LIT(KPerformanceTimingChunk, "PerformanceTimingChunk");
+ RHeap* heap = UserHeap::ChunkHeap(&KPerformanceTimingChunk, minMemSize, maxMemSize, 10);
+ CleanupClosePushL(*heap);
+ if (heap == NULL)
+ {
+ User::LeaveNoMemory();
+ }
+ RChunk chunk;
+ User::LeaveIfError(chunk.OpenGlobal(KPerformanceTimingChunk, ETrue));
+ CleanupClosePushL(chunk);
+
+ TInt memSize = KMaxDescLength;
+ TAny* perfDesc = heap->AllocL(memSize);
+ if (!perfDesc)
+ {
+ User::LeaveNoMemory();
+ }
+ TInt offset = reinterpret_cast<TUint8*>(perfDesc) - chunk.Base() ;
+
+ // Create a process called te_multiptrperf
+ // Pass in the offset as descriptor
+ _LIT(KMultiPtrEventHandlingPerf,"z:\\sys\\bin\\te_multiptrperf.exe");
+ TBuf<128> buf;
+ buf.Num(offset);
+ RProcess eventHandPerf;
+ User::LeaveIfError(eventHandPerf.Create(KMultiPtrEventHandlingPerf, buf));
+ TRequestStatus stat;
+ eventHandPerf.Logon(stat);
+ eventHandPerf.Resume();
+ User::WaitForRequest(stat);
+ eventHandPerf.Close();
+
+ // Once the process finished its execution print the result by
+ // reading the data from chunk's memory
+ TPtr8 ptrDes((TUint8*)perfDesc, memSize, memSize);
+ TPtr8 ptrDesDisplay((TUint8*)perfDesc, memSize, memSize);
+
+ // If it has failed then just print description written in the same
+ // when it is failed description contains '*' at the end
+ TInt lastChar = 0;
+ lastChar = ptrDes.Locate('*');
+ if (KErrNotFound != lastChar)
+ {
+ SetTestStepResult(EFail);
+ TPtr8 temp = ptrDesDisplay.LeftTPtr(lastChar);
+ TBuf<128> buf;
+ buf.Copy(temp);
+ INFO_PRINTF2(_L("%S"), &buf);
+ RDebug::RawPrint(temp);
+ goto END;
+ }
+ // If it has skipped then just print skip description from the chunk
+ // when it is skipped description contains '#' at the end
+ lastChar = ptrDes.Locate('#');
+ if (KErrNotFound != lastChar)
+ {
+ SetTestStepResult(EPass);
+ TPtr8 temp = ptrDesDisplay.LeftTPtr(lastChar);
+ TBuf<128> buf;
+ buf.Copy(temp);
+ INFO_PRINTF2(_L("%S"), &buf);
+ RDebug::RawPrint(temp);
+ goto END;
+ }
+
+ // If the every thing goes fine the descriptor is displayed as
+ // "12345678,123456789,123456789"
+ TInt avg4Events, avg8Events, avg16Events, avg32Events;
+ bufAvg.Copy(ptrDesDisplay);
+ for (TInt i=0; i<4; i++)
+ {
+ TInt locate = bufAvg.Locate(',');
+ if (locate == KErrNotFound)
+ {
+ SetTestStepResult(EFail);
+ goto END;
+ }
+ TLex lex(bufAvg.Left(locate));
+ lex.Val(avg4Events);
+
+ locate++;
+ temp.Set(bufAvg.MidTPtr(locate));
+ locate = temp.Locate(',');
+ if (locate == KErrNotFound)
+ {
+ SetTestStepResult(EFail);
+ goto END;
+ }
+ lex = temp.Left(locate);
+ lex.Val(avg8Events);
+
+ locate++;
+ temp1.Set(temp.MidTPtr(locate));
+ locate = temp1.Locate(',');
+ if (locate == KErrNotFound)
+ {
+ SetTestStepResult(EFail);
+ goto END;
+ }
+ lex = temp.Left(locate);
+ lex.Val(avg16Events);
+
+ locate++;
+ temp2.Set(temp1.MidTPtr(locate));
+ locate = temp2.Locate(',');
+ if (locate == KErrNotFound)
+ {
+ SetTestStepResult(EFail);
+ goto END;
+ }
+ lex = temp2.Left(locate);
+ lex.Val(avg32Events);
+
+ locate++;
+ bufAvg.Copy(temp2.MidTPtr(locate));
+
+ switch (i)
+ {
+ case 0:
+ INFO_PRINTF5(_L("TID: Average time for Single pointer(wait after each event) for 4 events:%i 8 events:%i 16 events:%i 32events:%i"), avg4Events, avg8Events, avg16Events, avg32Events);
+ break;
+ case 1:
+ INFO_PRINTF5(_L("TID: Average time for Multi pointer(wait after each event) for 4 events:%i 8 events:%i 16 events:%i 32events:%i"), avg4Events, avg8Events, avg16Events, avg32Events);
+ break;
+ case 2:
+ INFO_PRINTF5(_L("TID: Average time for single pointer for 4 events:%i 8 events:%i 16 events:%i 32events:%i"), avg4Events, avg8Events, avg16Events, avg32Events);
+ break;
+ case 3:
+ INFO_PRINTF5(_L("TID: Average time for Multi pointer for 4 events:%i 8 events:%i 16 events:%i 32events:%i"), avg4Events, avg8Events, avg16Events, avg32Events);
+ SetTestStepResult(EPass);
+ break;
+ default:
+ break;
+ }
+ }
+
+ iProfiler->ResultsAnalysis(KEventHandlingPerfName, 0, EColor16MA, EColor16MA, 1);
+
+END:
+ // Once the data is printed or displyed delete the memory
+ heap->Free(perfDesc);
+
+ CleanupStack::PopAndDestroy(2, heap);
+ RecordTestResultL();
+ CloseTMSGraphicsStep();
+ return TestStepResult();
+ }
+
+TVerdict CTEventHandlingPerf::doTestStepPreambleL()
+ {
+ return CTe_graphicsperformanceSuiteStepBase::doTestStepPreambleL();
+ }
+
+TVerdict CTEventHandlingPerf::doTestStepPostambleL()
+ {
+ return CTe_graphicsperformanceSuiteStepBase::doTestStepPostambleL();
+ }