graphicstest/uibench/src/teventhandlingperf.cpp
changeset 0 5d03bc08d59c
--- /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();
+	}