diff -r 000000000000 -r 5d03bc08d59c graphicstest/uibench/src/tgdifontrenderingperf.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicstest/uibench/src/tgdifontrenderingperf.cpp Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,339 @@ +// 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 + @test + @internalComponent - Internal Symbian test code +*/ + +#include "tgdifontrenderingperf.h" + +//Number of iterations each test is executed + +const TInt KIterations = 5; + +//Font file and font file related information + +_LIT16(KTestIndicFontFile, "C:\\s60ssb_v500.ttf"); +_LIT16(KTestIndicFontFaceName, "Series 60 Sans"); + +//Test data for Reading and writing simulation usecases + +_LIT16(KHindi1,"\x0930\x093C\x094D\x0915\x0915\x094D\x0915\x0930\x094D\x0915\x0915\x094D\x0930\x0915\x094D\x0937\x0915\x094D\x0930\x094D\x092A\x0020\x092E\x094D\x200D\x092E\x093F\x200D"); +_LIT16(KHindi2,"\x0930\x093C\x094D\x0915\x0915\x094D\x0915\x0930\x094D\x0915\x0915\x094D\x0930\x0915\x094D\x0937\x0915\x094D\x0930\x094D\x092A\x0020\x092E\x094D\x200D\x092E\x093F\x200D\x0930\x093C\x094D\x0915\x0915\x094D\x0915\x0930\x094D\x0915\x0915\x094D\x0930\x0915\x094D\x0937\x0915\x094D\x0930\x094D\x092A\x0020\x092E\x094D\x200D\x092E\x093F\x200D\x0930\x093C\x094D\x0915\x0915\x094D\x0915\x0930\x094D\x0915\x0915\x094D\x0930\x0915\x094D\x0937\x0915\x094D\x0930\x094D\x092A\x0020\x092E\x094D\x200D\x092E\x093F\x200D\x0930\x093C\x094D\x0915\x0915\x094D\x0915\x0930\x094D\x0915\x0915\x094D\x0930\x0915\x094D\x0937\x0915\x094D\x0930\x094D\x092A\x0020\x092E\x094D\x200D\x092E\x093F\x200D\x0930\x093C\x094D\x0915\x0915\x094D\x0915\x0930\x094D\x0915\x0915\x094D\x0930\x0915\x094D\x0937\x0915\x094D"); + +_LIT16(KKannada1,"\x0CB0\x0CBC\x0CCD\x0C95\x0C95\x0CCD\x0C95\x0CB0\x0CCD\x0C95\x0C95\x0CCD\x0CB0\x0C95\x0CCD\x0CB\x0C95\x0CCD\x0CB0\x0CCD\x0CAA\x0020\x0CAE\x0CCD\x200D\x0CAE\x0CBF\x200D"); +_LIT16(KKannada2,"\x0CB0\x0CBC\x0CCD\x0C95\x0C95\x0CCD\x0C95\x0CB0\x0CCD\x0C95\x0C95\x0CCD\x0CB0\x0C95\x0CCD\x0CB7\x0C95\x0CCD\x0CB0\x0CCD\x0CAA\x0020\x0CAE\x0CCD\x200D\x0CAE\x0CBF\x200D\x0CB0\x0CBC\x0CCD\x0C95\x0C95\x0CCD\x0C95\x0CB0\x0CCD\x0C95\x0C95\x0CCD\x0CB0\x0C95\x0CCD\x0CB7\x0C95\x0CCD\x0CB0\x0CCD\x0CAA\x0020\x0CAE\x0CCD\x200D\x0CAE\x0CBF\x200D\x0CB0\x0CBC\x0CCD\x0C95\x0C95\x0CCD\x0C95\x0CB0\x0CCD\x0C95\x0C95\x0CCD\x0CB0\x0C95\x0CCD\x0CB7\x0C95\x0CCD\x0CB0\x0CCD\x0CAA\x0020\x0CAE\x0CCD\x200D\x0CAE\x0CBF\x200D\x0CB0\x0CBC\x0CCD\x0C95\x0C95\x0CCD\x0C95\x0CB0\x0CCD\x0C95\x0C95\x0CCD\x0CB0\x0C95\x0CCD\x0CB7\x0C95\x0CCD\x0CB0\x0CCD\x0CAA\x0020\x0CAE\x0CCD\x200D\x0CAE\x0CBF\x200D\x0CB0\x0CBC\x0CCD\x0C95\x0C95\x0CCD\x0C95\x0CB0\x0CCD\x0C95\x0C95\x0CCD\x0CB0\x0C95\x0CCD\x0CB7\x0C95\x0CCD"); + +_LIT16(KGujarati1,"\x0AB0\x0ABC\x0ACD\x0A95\x0A95\x0ACD\x0A95\x0AB0\x0ACD\x0A95\x0A95\x0ACD\x0AB0\x0A95\x0ACD\x0AB7\x0A95\x0ACD\x0AB0\x0ACD\x0AAA\x0020\x0AAE\x0ACD\x200D\x0AAE\x0ABF\x200D"); +_LIT16(KGujarati2,"\x0AB0\x0ABC\x0ACD\x0A95\x0A95\x0ACD\x0A95\x0AB0\x0ACD\x0A95\x0A95\x0ACD\x0AB0\x0A95\x0ACD\x0AB7\x0A95\x0ACD\x0AB0\x0ACD\x0AAA\x0020\x0AAE\x0ACD\x200D\x0AAE\x0ABF\x200D\x0AB0\x0ABC\x0ACD\x0A95\x0A95\x0ACD\x0A95\x0AB0\x0ACD\x0A95\x0A95\x0ACD\x0AB0\x0A95\x0ACD\x0AB7\x0A95\x0ACD\x0AB0\x0ACD\x0AAA\x0020\x0AAE\x0ACD\x200D\x0AAE\x0ABF\x200D\x0AB0\x0ABC\x0ACD\x0A95\x0A95\x0ACD\x0A95\x0AB0\x0ACD\x0A95\x0A95\x0ACD\x0AB0\x0A95\x0ACD\x0AB7\x0A95\x0ACD\x0AB0\x0ACD\x0AAA\x0020\x0AAE\x0ACD\x200D\x0AAE\x0ABF\x200D\x0AB0\x0ABC\x0ACD\x0A95\x0A95\x0ACD\x0A95\x0AB0\x0ACD\x0A95\x0A95\x0ACD\x0AB0\x0A95\x0ACD\x0AB7\x0A95\x0ACD\x0AB0\x0ACD\x0AAA\x0020\x0AAE\x0ACD\x200D\x0AAE\x0ABF\x200D\x0AB0\x0ABC\x0ACD\x0A95\x0A95\x0ACD\x0A95\x0AB0\x0ACD\x0A95\x0A95\x0ACD\x0AB0\x0A95\x0ACD\x0AB7\x0A95\x0ACD"); + +//Testcase name used as one of the parameter for ResultsAnalysisAverageByNumberOfIterations() function. + +_LIT16(KHindiLang1,"Hindi Reading"); +_LIT16(KHindiLang2,"Hindi Writing"); + +_LIT16(KKannadaLang1,"Kannada Reading"); +_LIT16(KKannadaLang2,"Kannada Writing"); + +_LIT16(KGujaratiLang1,"Gujarati Reading"); +_LIT16(KGujaratiLang2,"Gujarati Writing"); + +// Conversion of the test data into constant pointer variables + +TPtrC ptrHindiReading(KHindi1()); +TPtrC ptrHindiWriting(KHindi2()); +TPtrC ptrKannadaReading(KKannada1); +TPtrC ptrKannadaWriting(KKannada2); +TPtrC ptrGujaratiReading(KGujarati1); +TPtrC ptrGujaratiWriting(KGujarati2); +TInt err; + + +LOCAL_C void ResetAndDestroyRImplInfoPtrArray(TAny* aPtr) + { + RImplInfoPtrArray* array = reinterpret_cast (aPtr); + array->ResetAndDestroy(); + } + +LOCAL_C void LoadOpenFontLibrariesL(CFontStore* aFontStore) + { + RImplInfoPtrArray implementationArray; + TCleanupItem cleanup(ResetAndDestroyRImplInfoPtrArray, &implementationArray); + CleanupStack::PushL(cleanup); + TInt error; + TInt ecomerror; + TInt ecomnotready; + TUid uid = {KUidOpenFontRasterizerPlunginInterface}; + + // Making sure that no race situation arises + // If ECom is not ready, give it another chance and try again. if it still doesn't work + // after the third try, then it just carries on quietly and fails... + for (ecomnotready =0; ecomnotready <3; ecomnotready++) + { + TRAP(ecomerror,REComSession::ListImplementationsL(uid,implementationArray)); + if (ecomerror != KErrNone) + { + break; + } + } + + const TInt availCount = implementationArray.Count(); + for (TInt count=0;countImplementationUid(); + // Create a rasterizer + COpenFontRasterizer* rasterizer= NULL; + rasterizer = COpenFontRasterizer::NewL(rasterizerUid); + CleanupStack::PushL(rasterizer); + // Install it in the font store. + TRAP(error,aFontStore->InstallRasterizerL(rasterizer)); + if (error) + { + CleanupStack::PopAndDestroy(rasterizer); + } + CleanupStack::Pop(rasterizer); + } + + CleanupStack::PopAndDestroy(&implementationArray); + } + +CTGDIFontRenderingPerf::CTGDIFontRenderingPerf() + { + SetTestStepName(KTGDIFontRenderingPerfName); + } + +CTGDIFontRenderingPerf::~CTGDIFontRenderingPerf() + { + + } + +TVerdict CTGDIFontRenderingPerf::doTestStepPreambleL() + { + CTe_graphicsperformanceSuiteStepBase::doTestStepPreambleL(); + return TestStepResult(); + } + +/** +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. + +@return - TVerdict code +*/ +TVerdict CTGDIFontRenderingPerf::doTestStepL() + { + GCP2IndicPerformanceTestL(); + return TestStepResult(); + } + +TVerdict CTGDIFontRenderingPerf::doTestStepPostambleL() + { + return TestStepResult(); + } + +void CTGDIFontRenderingPerf::GCP2IndicPerformanceTestL() +{ +/** +@SYMTestCaseID GRAPHICS-UI-BENCH-0079 +@SYMTestCaseDesc GDI performance testing for Hindi +@SYMTestPriority High +@SYMTestActions Attempt to simulate Reading of the Hindi text +@SYMTestExpectedResults Time taken by GetCharacterPositon2() API to process the Hindi unicode values when all the values are passed once. +@SYMPREQ 19: Performance testing for Ogmha +*/ + + SetTestStepID(_L("GRAPHICS-UI-BENCH-0079")); + GCP2ReadingTextPerfL(ptrHindiReading,KHindiLang1); + RecordTestResultL(); + +/** +@SYMTestCaseID GRAPHICS-UI-BENCH-0080 +@SYMTestCaseDesc GDI Performace testing for Hindi +@SYMTestPriority High +@SYMTestActions Attempt to compose Simulate writing Hindi Text. +@SYMTestExpectedResults Time taken by GetCharacterPositon2() API to process the Hindi unicode values when each value is given at once +@SYMPREQ 19: Performance testing for Ogmha +*/ + SetTestStepID(_L("GRAPHICS-UI-BENCH-0080")); + GCP2TypingTextPerfL(ptrHindiWriting,KHindiLang2); + RecordTestResultL(); + + /** +@SYMTestCaseID GRAPHICS-UI-BENCH-0081 +@SYMTestCaseDesc GDI Performace testing for Kannada +@SYMTestPriority High +@SYMTestActions Attempt to compose Simulate Reading Kannada Text. +@SYMTestExpectedResults Time taken by GetCharacterPositon2() API to process the Kannada unicode values when all values are given at once +@SYMPREQ 19: Performance testing for Ogmha +*/ + SetTestStepID(_L("GRAPHICS-UI-BENCH-0081")); + GCP2ReadingTextPerfL(ptrKannadaReading,KKannadaLang1); + RecordTestResultL(); + +/** +@SYMTestCaseID GRAPHICS-UI-BENCH-0082 +@SYMTestCaseDesc GDI Performace testing for Kannada +@SYMTestPriority High +@SYMTestActions Attempt to compose Simulate writing Kannada Text. +@SYMTestExpectedResults Time taken by GetCharacterPositon2() API to process the Kannada unicode values when single value is given at once +@SYMPREQ 19: Performance testing for Ogmha +*/ + SetTestStepID(_L("GRAPHICS-UI-BENCH-0082")); + GCP2TypingTextPerfL(ptrKannadaWriting,KKannadaLang2); + RecordTestResultL(); + +/** +@SYMTestCaseID GRAPHICS-UI-BENCH-0083 +@SYMTestCaseDesc GDI Performace testing for Gujarati +@SYMTestPriority High +@SYMTestActions Attempt to compose Simulate Reading Gujarati Text. +@SYMTestExpectedResults Time taken by GetCharacterPositon2() API to process the Gujarati unicode values when all values are given at once +@SYMPREQ 19: Performance testing for Ogmha +*/ + SetTestStepID(_L("GRAPHICS-UI-BENCH-0083")); + GCP2ReadingTextPerfL(ptrGujaratiReading,KGujaratiLang1); + RecordTestResultL(); + +/** +@SYMTestCaseID GRAPHICS-UI-BENCH-0084 +@SYMTestCaseDesc GDI Performace testing for Gujarati +@SYMTestPriority High +@SYMTestActions Attempt to compose Simulate writing Gujarati Text. +@SYMTestExpectedResults Time taken by GetCharacterPositon2() API to process the Gujarati unicode values when each value is given at once +@SYMPREQ 19: Performance testing for Ogmha +*/ + SetTestStepID(_L("GRAPHICS-UI-BENCH-0084")); + GCP2TypingTextPerfL(ptrGujaratiWriting,KGujaratiLang2); + RecordTestResultL(); + + + REComSession::FinalClose(); +} + +/* +This function is simulation of the Reading a document +@param aPtr is the Testdata ie. unicode values for each language which are passed as input to GetCharacterPosition2() +@param aTestCaseName is the name of the test case which is used as one of the parameter to ResultsAnalysisAverageByNumberOfIterations() +*/ +void CTGDIFontRenderingPerf::GCP2ReadingTextPerfL(TPtrC aPtr,const TDesC& aTestCaseName ) + { + //Setting up the required Font + CFontStore* fontStore = CFontStore::NewL(&User::Heap()); + CleanupStack::PushL(fontStore); + LoadOpenFontLibrariesL(fontStore); + //Adding any required font files + TUid fontFileUid = fontStore->AddFileL(KTestIndicFontFile); + TFontSpec testFontSpec(KTestIndicFontFaceName,15); + CFbsTypefaceStore* ts = CFbsTypefaceStore::NewL(NULL); + CleanupStack::PushL(ts); + CFbsFont* font = NULL; + ts->GetNearestFontToDesignHeightInTwips((CFont* &)font,testFontSpec); + iTestText.SetLength(aPtr.Length()); + for(TInt i = 0; i < aPtr.Length(); i++) + { + iTestText[i]=aPtr[i]; + } + // Do the testing + iParam.iDirection = CFont::EHorizontal; + iParam.iFlags = CFont::TPositionParam::EFLogicalOrder; + RShapeInfo shapeInfo; + iParam.iText.Set(iTestText); + iProfiler->InitResults(); + for(TInt j = 0; jGetCharacterPosition2(iParam,shapeInfo); + } + shapeInfo.Close(); + iProfiler->MarkResultSetL(); + } + iProfiler->ResultsAnalysisAverageByNumberOfIterations(aTestCaseName,0,0,0,KIterations); + //Tidying Up + CleanupStack::PopAndDestroy(ts); + fontStore->RemoveFile(fontFileUid); + CleanupStack::PopAndDestroy(fontStore); + + } + +/* +This function is simulation of the Typing +@param aPtr is the Testdata ie. unicode values for each language which are passed as input to GetCharacterPosition2() +@param aTestCaseName is the name of the test case which is used as one of the parameter to ResultsAnalysisAverageByNumberOfIterations() +*/ + +void CTGDIFontRenderingPerf::GCP2TypingTextPerfL(TPtrC aPtr,const TDesC& aTestCaseName) + { + //Setting up the required Font + CFontStore* fontStore = CFontStore::NewL(&User::Heap()); + CleanupStack::PushL(fontStore); + LoadOpenFontLibrariesL(fontStore); + //Adding any required font files + TUid fontFileUid = fontStore->AddFileL(KTestIndicFontFile); + TFontSpec testFontSpec(KTestIndicFontFaceName,15); + CFbsTypefaceStore* ts = CFbsTypefaceStore::NewL(NULL); + CleanupStack::PushL(ts); + CFbsFont* font = NULL; + ts->GetNearestFontToDesignHeightInTwips((CFont* &)font,testFontSpec); + iTestText1.SetLength(aPtr.Length()); + for(TInt i = 0; i < aPtr.Length(); i++) + { + iTestText1[i]=aPtr[i]; + } + iParam.iDirection = CFont::EHorizontal; + iParam.iFlags = CFont::TPositionParam::EFLogicalOrder; + iProfiler->InitResults(); + for(TInt j = 0; j < KIterations ;j++) + { + TBuf<130> testText3(0); + for (TInt length = 0; length < (aPtr.Length()); length++) + { + testText3.Append(iTestText1[length]); + iParam.iText.Set(testText3); + iParam.iPosInText = 0; + iParam.iPen.iX = iParam.iPen.iY = 0; + TInt k = testText3.Length(); + iParam.iPen.iX = iParam.iPen.iY = 0; + TInt prev_pos_inText = iParam.iPosInText; + for (TInt m =0 ; m<5; m++) + { + iParam.iPosInText = prev_pos_inText; + RShapeInfo shapeInfo; + while (iParam.iPosInText <(testText3.Length())) + { + iParam.iPen.iX = iParam.iPen.iY = 0; + font->GetCharacterPosition2(iParam,shapeInfo); + } + shapeInfo.Close(); + } + } + iProfiler->MarkResultSetL(); + } + iProfiler->ResultsAnalysisAverageByNumberOfIterations(aTestCaseName,0,0,0,KIterations); + CleanupStack::PopAndDestroy(ts); + fontStore->RemoveFile(fontFileUid); + CleanupStack::PopAndDestroy(fontStore); + } + + + + +