--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/ttime/TTIME.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -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 <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));
+ }