author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// 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 <e32svr.h> #include <e32def_private.h> 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<TestNameBuf> 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;index<ListCount();index++) { TInt wid=iFont->TextWidthInPixels(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 && aNewPos<ListCount()) { iListPos=aNewPos; Invalidate(); } } void CListWindow::WinKeyL(const TKeyEvent &aKey, const TTime&) { switch(aKey.iCode) { case EKeyUpArrow: SetListPos(iListPos-1); break; case EKeyDownArrow: SetListPos(iListPos+1); break; case EKeyEnter: SelectedL(iListPos); break; case EKeyEscape: // Fall through from EKeyEnter if (iExitOnEscape) CloseWindow(); break; } } void CListWindow::PointerL(const TPointerEvent &aPointer,const TTime& aTime) { if (aPointer.iType==TPointerEvent::EButton1Down) { TRect rect; for(TInt index=0;index<ListCount();index++) { RowBox(rect,index); if (rect.Contains(aPointer.iPosition)) { if (index==iListPos && aPointer.iModifiers&EModifierDoubleClick) SelectedL(iListPos); else { iPrevTime=aTime; SetListPos(index); } return; } } } CTTitledWindow::PointerL(aPointer,aTime); } TInt CListWindow::TextRowHeight() const { return(iFont->HeightInPixels()+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;index<ListCount();index++,pos.iY+=gap) { iGc->DrawText(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)); }