diff -r bf7481649c98 -r 2717213c588a windowing/windowserver/test/ttime/TTIME.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/ttime/TTIME.CPP Tue Jun 22 15:21:29 2010 +0300 @@ -0,0 +1,554 @@ +// Copyright (c) 1995-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: +// Functions to act as bench marks for various window server features +// +// + +#include "TTIME.H" +#include +#include +typedef TBuf<32> TestNameBuf; + +LOCAL_D const TUint KHeapSize=0x10000; + +class CTimeClient; + +class CResultDialog : public CTDialog + { +public: + CResultDialog(CTWindowGroup *aGroupWin,CWindowGc *aGc); + void ButtonPressL(TInt aButton); + void ConstructLD(); +private: + CTWindowGroup *iGroupWin; + CWindowGc *iGc; + }; + +class CListWindow : public CTTitledWindow + { +public: + CListWindow(); + void CloseWindow(); + void ConstructL(CTWinBase &parent, TBool aExitOnEscape); + void Draw(); + virtual void SelectedL(TInt aIndex)=0; + virtual void WinKeyL(const TKeyEvent &aKey,const TTime& aTime); + void SetExt(const TPoint &aPos, const TSize &aSize); + void SetSize(const TSize &); +protected: + virtual TPtrC GetText(TInt aLine)=0; + virtual TInt ListCount()=0; + void SetSize(); +private: + void Resized(const TSize &aSize); + void SetListPos(TInt aNewPos); + TInt TextRowHeight() const; + void RowBox(TRect &aRect, TInt aRow) const; + void PointerL(const TPointerEvent &aPointer,const TTime& aTime); +private: + TInt iListPos; + TTime iPrevTime; + TBool iExitOnEscape; + }; + +class CTestList : public CListWindow + { +public: + CTestList(); + ~CTestList(); + void ConstructL(CTWinBase &parent); + static void AppendProfileNum(TDes &aDes, TInt aNum); + static void AppendProfileCount(TDes &aDes, TInt aNum); + void SelectedL(TInt aIndex); + virtual void WinKeyL(const TKeyEvent &aKey,const TTime& aTime); + void ForegroundAppDialog(); + void AppendToListL(const TDesC &aDesc); +private: + virtual TPtrC GetText(TInt aLine); + virtual TInt ListCount(); +private: + TInt iCount; + CArrayFixSeg iTestNames; + RThread iTimeTest; + }; + +class CTimeTestWindowGroup : public CTWindowGroup + { +public: + CTimeTestWindowGroup(CTClient *aClient); + void KeyL(const TKeyEvent &aKey,const TTime &aTime); + }; + +class CTimeClient : public CTClient + { +public: + CTimeClient(); + void ConstructL(); + void KeyL(const TKeyEvent &aKey,const TTime &aTime); + void Exit(); + CTWin *CreateTestWindowL(TPoint pos,CTWinBase *parent); +private: + TInt iNum; + }; + +const TInt Xmove=8; +const TInt Ymove=6; + +GLREF_D TTimeTestHeader MovingWindowTest1; +GLREF_D TTimeTestHeader MovingWindowTest2; +GLREF_D TTimeTestHeader StackedWindowCreate; +GLREF_D TTimeTestHeader WindowCreateDestroy; +GLREF_D TTimeTestHeader LoadsaText; +GLREF_D TTimeTestHeader DrawBitmapTest; +GLREF_D TTimeTestHeader XorIngTest; +GLREF_D TTimeTestHeader SmallClearTest; +GLREF_D TTimeTestHeader RectCompareTest; +GLREF_D TTimeTestHeader SimpleFlushTest; +GLREF_D TTimeTestHeader SimpleFlushTest2; +GLREF_D TTimeTestHeader UseFontTest; +GLREF_D TTimeTestHeader BitBltTest; +GLREF_D TTimeTestHeader FullScreenBitBltTest; +GLREF_D TTimeTestHeader MaskedBitBltTest; +GLREF_D TTimeTestHeader SpriteTest; +GLREF_D TTimeTestHeader BitmapDeviceTest1; +GLREF_D TTimeTestHeader BitmapDeviceTest2; +GLREF_D TTimeTestHeader FillPatternTest; +GLREF_D TTimeTestHeader BitmapLoadTest; +GLREF_D TTimeTestHeader WsBitmapLoadTest; +GLREF_D TTimeTestHeader RomFileTest; +GLREF_D TTimeTestHeader TrivialFunctionsTest; +GLREF_D TTimeTestHeader BackupWindowDrawingCreate1; +GLREF_D TTimeTestHeader BackupWindowDrawingCreate2; +GLREF_D TTimeTestHeader MenuEmulationCreate; +GLREF_D TTimeTestHeader MenuEmulationCreate2; + +TTimeTestHeader *tests[]={ + &MenuEmulationCreate, + &MenuEmulationCreate2, + &BitmapLoadTest, + &WsBitmapLoadTest, + &RomFileTest, + &TrivialFunctionsTest, + &BackupWindowDrawingCreate1, + &BackupWindowDrawingCreate2, + &MovingWindowTest1, + &MovingWindowTest2, + &StackedWindowCreate, +// &WindowCreateDestroy, + &LoadsaText, + &DrawBitmapTest, +// &BitmapDeviceTest1, +// &BitmapDeviceTest2, +// &XorIngTest, List getting too big +// &SmallClearTest, List getting too big +// &RectCompareTest, + &SpriteTest, +// &SimpleFlushTest, +// &SimpleFlushTest2, +// &UseFontTest, + &BitBltTest, +// &FullScreenBitBltTest, + &MaskedBitBltTest, +// &FillPatternTest, + }; + +void Panic(TInt aPanic) + { + User::Panic(_L("TimeTest"),aPanic); + } + +struct TThreadParams + { + TInt iIndex; + TInt iGroupId; + }; + +TInt TimeThread(TAny *aParams) + { + CTrapCleanup* CleanUpStack=CTrapCleanup::New(); + //__PROFILE_START(0) + TInt ret=tests[((TThreadParams *)aParams)->iIndex]->function(((TThreadParams *)aParams)->iGroupId); + //__PROFILE_END(0) + delete CleanUpStack; + return ret; + } + +// +// List Window // +// + +CListWindow::CListWindow() : CTTitledWindow(), iPrevTime(0) + { + } + +void CListWindow::CloseWindow() + { + CTClient *client=((CTimeClient *)Client()); + delete this; + client->ResetFocus(); + } + +void CListWindow::SetExt(const TPoint &aPos, const TSize &) + { + SetPos(aPos); + } + +void CListWindow::SetSize(const TSize &) + { + } + +void CListWindow::SetSize() + { + iSize.iHeight=ListCount()*(iFont->HeightInPixels()+1)+iTitleHeight+2; + iSize.iWidth=iFont->TextWidthInPixels(*Client()->Title())+30; + for(TInt index=0;indexTextWidthInPixels(GetText(index)); + if (wid>iSize.iWidth) + iSize.iWidth=wid; + } + iSize.iWidth+=4; + iWin.SetSize(iSize); + Resized(iSize); + } + +void CListWindow::ConstructL(CTWinBase &parent, TBool aExitOnEscape) + { + iExitOnEscape=aExitOnEscape; + CTTitledWindow::ConstructL(parent); + } + +void CListWindow::SetListPos(TInt aNewPos) + { + if (aNewPos>=0 && aNewPosHeightInPixels()+1); + } + +void CListWindow::RowBox(TRect &aRect, TInt aRow) const + { + aRect.iTl.iX=2; + aRect.iTl.iY=iTitleHeight+TextRowHeight()*aRow; + aRect.iBr.iX=iSize.iWidth-2; + aRect.iBr.iY=aRect.iTl.iY+TextRowHeight(); + } + +void CListWindow::Draw() + { + CTTitledWindow::Draw(); + iGc->SetPenColor(TRgb::Gray16(0)); + TPoint pos(2,iTitleHeight+iFont->AscentInPixels()+2); + TInt gap=TextRowHeight(); + for(TInt index=0;indexDrawText(GetText(index), pos); + if (index==iListPos) + { + iGc->SetBrushStyle(CGraphicsContext::ESolidBrush); + iGc->SetBrushColor(TRgb::Gray256(255)); + iGc->SetPenStyle(CGraphicsContext::ENullPen); + iGc->SetDrawMode(CGraphicsContext::EDrawModeXOR); + TRect rect; + RowBox(rect,index); + iGc->DrawRect(rect); + iGc->SetBrushStyle(CGraphicsContext::ENullBrush); + iGc->SetPenStyle(CGraphicsContext::ESolidPen); + iGc->SetDrawMode(CGraphicsContext::EDrawModePEN); + } + } + } + +void CListWindow::Resized(const TSize &aSize) + { + SetDragRect(TRect(0,0,aSize.iWidth,iTitleHeight)); + } + +// +// Test list window +// + +CTestList::CTestList() : CListWindow(), iTestNames(4) + { + } + +CTestList::~CTestList() + { + } + +void CTestList::ConstructL(CTWinBase &parent) + { + CListWindow::ConstructL(parent, EFalse); + for(TUint index=0;index<(sizeof(tests)/sizeof(tests[0]));index++) + AppendToListL(TPtrC(tests[index]->title)); + SetSize(); + /*for(TUint index1=0;index1<(sizeof(tests)/sizeof(tests[0]));index1++) + Selected(index1);*/ + } + +void CTestList::AppendProfileNum(TDes &aDes, TInt aNum) + { + aDes.AppendFormat(_L("%d.%02d, "),aNum/1000000,(aNum%1000000)/10000); + } + +void CTestList::AppendProfileCount(TDes &aDes, TInt aNum) + { + aDes.AppendFormat(_L("%d, "),aNum); + } + +#define USE_PROCESS 1 + +void CTestList::SelectedL(TInt aIndex) + { +#if USE_PROCESS + TThreadParams params; + params.iIndex=aIndex; + TName name; + name.Format(_L("TimeTest-%x"),iCount++); + params.iGroupId=Client()->iGroup->GroupWin()->Identifier(); + User::LeaveIfError(iTimeTest.Create(name,TimeThread,KDefaultStackSize*2,KHeapSize,KHeapSize,¶ms,EOwnerThread)); + TRequestStatus status; + iTimeTest.Logon(status); + __PROFILE_RESET(8); + iTimeTest.Resume(); + User::WaitForRequest(status); +#else + TThreadParams params; + params.iIndex=aIndex; + TimeThread(¶ms); +#endif + TBuf<64> buf; + TBuf<64> buf2; + TBuf<64> buf3; + CResultDialog *dialog=new(ELeave) CResultDialog(Client()->iGroup, iGc); + dialog->ConstructLD(); +#if USE_PROCESS + if (status.Int()==KErrNone) + { +#endif +#if !defined(__PROFILING__) + buf=_L("Profiling information not available"); +#else + TProfile profile[6]; + __PROFILE_DISPLAY(6); + for (TInt index=1;index<6;index++) + AppendProfileNum(buf2,profile[index].iTime); + for (TInt index2=1;index2<6;index2++) + AppendProfileCount(buf3,profile[index2].iCount); + buf.Format(_L("Time=%d.%2d"),profile[0].iTime/1000000,(profile[0].iTime%1000000)/10000); +#endif + dialog->SetTitle(buf); +#if USE_PROCESS + } + else + { + dialog->SetTitle(_L("Error in test")); + buf.Format(_L("Error=%d"),status.Int()); + buf2=iTimeTest.ExitCategory(); + } +#endif + dialog->SetLine1(buf2); + dialog->SetLine2(buf3); + dialog->SetNumButtons(1); + dialog->SetButtonText(0,_L("Okay")); + if (dialog->Display()!=0) + Panic(0); + } + +TPtrC CTestList::GetText(TInt aLine) + { + return(TPtrC(iTestNames[aLine])); + } + +TInt CTestList::ListCount() + { + return(iTestNames.Count()); + } + +void CTestList::WinKeyL(const TKeyEvent &aKey,const TTime& aTime) + { + if (aKey.iModifiers&EModifierFunc) + { + switch(aKey.iCode) + { + case EKeyLeftArrow: + AdjustSize(-Xmove,0,aKey.iModifiers); + break; + case EKeyRightArrow: + AdjustSize(Xmove,0,aKey.iModifiers); + break; + case EKeyUpArrow: + AdjustSize(0,-Ymove,aKey.iModifiers); + break; + case EKeyDownArrow: + AdjustSize(0,Ymove,aKey.iModifiers); + break; + default: + goto not_used; + } + } + else + goto not_used; + return; +not_used: + CListWindow::WinKeyL(aKey,aTime); + } + +void CTestList::AppendToListL(const TDesC &aDesc) + { + TestNameBuf buf(aDesc); + iTestNames.AppendL(buf); + } + +// + +CResultDialog::CResultDialog(CTWindowGroup *aGroupWin,CWindowGc *aGc) : CTDialog(), + iGroupWin(aGroupWin), + iGc(aGc) + { + } + +void CResultDialog::ButtonPressL(TInt aButton) + { + if (aButton==0) + CTDialog::ButtonPressL(aButton); + } + +void CResultDialog::ConstructLD() + { + CTDialog::ConstructLD(*iGroupWin, *iGc); + } + +// +// CTimeTestWindowGroup class // +// + +CTimeTestWindowGroup::CTimeTestWindowGroup(CTClient *aClient) : CTWindowGroup(aClient) + { + } + +void CTimeTestWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &aTime) + { + if (aKey.iModifiers&EModifierFunc) + { + switch(aKey.iCode) + { + case 'x': + ((CTimeClient *)Client())->Exit(); + break; + } + } + else + iCurWin->WinKeyL(aKey,aTime); + } + +// + +CTimeClient::CTimeClient() + { + } + +CTWin *CTimeClient::CreateTestWindowL(TPoint pos,CTWinBase *parent) + { + CTWin *win=new(ELeave) CTestList(); + TRAPD(err,win->ConstructL(*parent)); + if (err!=KErrNone) + goto ctw_err; + TRAP(err,win->SetPos(pos)); + if (err!=KErrNone) + { +ctw_err: + delete win; + User::Leave(err); + } + win->Activate(); + win->AssignGC(*iGc); + return(win); + } + +void CTimeClient::ConstructL() + { + CTClient::ConstructL(); + + iGroup=new(ELeave) CTimeTestWindowGroup(this); + iGroup->ConstructL(); + + CreateTestWindowL(TPoint(30,4),iGroup); + iGroup->SetCurrentWindow(iGroup->Child()); + } + +void CTimeClient::Exit() + { + CActiveScheduler::Stop(); + } + +GLDEF_C CTClient *CreateClientL() + { + return(new(ELeave) CTimeClient()); + } + +GLDEF_C TInt E32Main() + { + return(TestLibStartUp(CreateClientL)); + }