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