diff -r bf7481649c98 -r 7f25ef56562d windowing/windowserver/test/tman/TMTScrMd.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tman/TMTScrMd.CPP Wed Jun 23 19:41:15 2010 +0300 @@ -0,0 +1,463 @@ +// Copyright (c) 2000-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: +// Screen mode changing tests +// +// + +#include +#include +#include "W32STD.H" +#include "../tlib/testbase.h" +#include "TMAN.H" + +class CTimeWindow; + +class CQBlankWindow : public CBlankWindow + { +public: + static TInt iInitialColor; +public: + //Virtual function from CTBaseWin + void InitWin(); +public: + static TSize iSize; + TSglQueLink iLink; + }; + +class CFixScreenModeGroup : public CTWindowGroup + { +public: + static TInt iNoClientWins; +public: + ~CFixScreenModeGroup(); + CFixScreenModeGroup(CTClient *aClient); + void ConstructL(); +public: + TSglQueLink iLink; +private: + TSglQue iWindows; + }; + +class CFlipClient : public CTClient + { +public: + void ConstructL(); +private: + }; + +class CScreenModeTimes : public CTestBase + { +public: + CScreenModeTimes(); + ~CScreenModeTimes(); + TestState DoTestL(); + void ConstructL(); + void DoTimings(); +private: + void CreateGroupL(CTClient* aClient,TSglQue& aQue); + void DeleteGroups(TSglQue& aQue); + void BringToFront(TSglQue& aQue); +private: + TScreenModeEnforcement iEnforcementMode; + CInfoDialog* iDialogue; + CTimeWindow* iInfoWindow; + CFlipClient* iFlipClient; + TSglQue iNormalGroupQue; + TSglQue iFlipGroupQue; + TInt iNoGroupWins; + TInt iState; + }; + +class CTimeWindow : public CTTitledWindow + { +public: + void Construct(CTestBase* aTest); + void SetNumWindows(TInt aGroup,TInt aWin); + void SetTime1(TTimeIntervalMicroSeconds& aTime); + void SetTime2(TTimeIntervalMicroSeconds& aTime); + void DoDraw(); + //virtual function from CTWinBase overridden by CTBaseWin + void WinKeyL(const TKeyEvent &aKey,const TTime &aTime); + //virtual functions from CTBaseWin + void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); + void PointerL(const TPointerEvent &aPointer,const TTime &aTime); + //virtual function from CTBaseWin overridden by CTTitledWindow + void Draw(); +private: + inline CScreenModeTimes* Test() {return STATIC_CAST(CScreenModeTimes*,iTest);} + void UpdateString1(); + void UpdateString2(); + void UpdateString3(); +private: + CTestBase* iTest; + TInt iNumGroups; + TInt iNumWins; + TTimeIntervalMicroSeconds iTime1; + TTimeIntervalMicroSeconds iTime2; + TBuf<32> iString1; + TBuf<32> iString2; + TBuf<32> iString3; + TBuf<32> iString4; + TRect iRect1; + TRect iRect2; + TRect iRect3; + TRect iRect4; + TBool iPressed; + TBool iExit; + }; + + +TSize CQBlankWindow::iSize; +TInt CQBlankWindow::iInitialColor; +TInt CFixScreenModeGroup::iNoClientWins=0; + + +GLDEF_C CTestBase *CreateScreenModeTimes() + { + return(new(ELeave) CScreenModeTimes()); + } + + +// +// CFlipClient +// + +void CFlipClient::ConstructL() + { + CTClient::ConstructL(); + TPixelsAndRotation sizeAndRotation; + iScreen->GetScreenModeSizeAndRotation(1,sizeAndRotation); + iScreen->SetScreenSizeAndRotation(sizeAndRotation); + } + + +// +// CTimeWindow +// + +void CTimeWindow::Construct(CTestBase* aTest) + { + _LIT(Title,"StatusWindow"); + _LIT(String4,"Click here to finish"); + const TInt fontHeight=iFont->HeightInPixels(); + iTest=aTest; + TWindowTitle title(Title); + SetTitle(title); + TInt yy=iTitleHeight+fontHeight+7; + iRect1.SetRect(3,iTitleHeight+5,iSize.iWidth-1,yy); + yy+=fontHeight/2; + TInt yy1=yy+fontHeight+2; + iRect2.SetRect(3,yy+3,iSize.iWidth-1,yy1); + TInt yy2=yy1+iFont->HeightInPixels()+2; + iRect3.SetRect(3,yy1+3,iSize.iWidth-1,yy2); + yy2+=fontHeight/2; + iRect4.SetRect(3,yy2+3,iSize.iWidth-1,yy2+iFont->HeightInPixels()+2); + // + iString4.Copy(String4); + iExit=EFalse; + } + +void CTimeWindow::SetUpL(TPoint aPos,TSize aSize,CTWinBase *aParent,CWindowGc &aGc) + { + CTTitledWindow::SetUpL(aPos,aSize,aParent,aGc); + } + +void CTimeWindow::WinKeyL(const TKeyEvent &aKey,const TTime&) + { + switch(aKey.iCode) + { + case EKeyEscape: + iTest->Request(); + break; + default:; + } + } + +void CTimeWindow::PointerL(const TPointerEvent &aPointer,const TTime &aTime) + { + if (iRect2.Contains(aPointer.iPosition) || iRect3.Contains(aPointer.iPosition)) + { + if (aPointer.iType==TPointerEvent::EButton1Down) + iPressed=ETrue; + } + else if (iRect4.Contains(aPointer.iPosition)) + iExit=ETrue; + else + CTTitledWindow::PointerL(aPointer,aTime); + if ((iExit||iPressed) && aPointer.iType==TPointerEvent::EButton1Up) + { + if (iExit) + iTest->Request(); + else + { + Test()->DoTimings(); + DoDraw(); + } + } + } + +void CTimeWindow::Draw() + { + CTTitledWindow::Draw(); + TInt ascent=iFont->AscentInPixels()+1; + iGc->DrawText(iString1,iRect1,ascent,CGraphicsContext::ELeft); + iGc->DrawText(iString2,iRect2,ascent,CGraphicsContext::ELeft); + iGc->DrawText(iString3,iRect3,ascent,CGraphicsContext::ELeft); + iGc->DrawText(iString4,iRect4,ascent,CGraphicsContext::ELeft); + } + +void CTimeWindow::DoDraw() + { + iGc->Activate(iWin); + iGc->UseFont((CFont *)iFont); + Draw(); + iGc->Deactivate(); + } + +void CTimeWindow::SetNumWindows(TInt aGroups,TInt aWins) + { + iNumGroups=aGroups; + iNumWins=aWins; + UpdateString1(); + } + +void CTimeWindow::UpdateString1() + { + _LIT(NumberWin,"Groups (2x)%d, Windows %d"); + iString1.Format(NumberWin,iNumGroups,iNumWins); + } + +void CTimeWindow::SetTime1(TTimeIntervalMicroSeconds& aTime) + { + iTime1=aTime; + UpdateString2(); + } + +void CTimeWindow::SetTime2(TTimeIntervalMicroSeconds& aTime) + { + iTime2=aTime; + UpdateString3(); + } + +_LIT(TimeFormat,"Time%d = %d.%04dsecs"); + +void CTimeWindow::UpdateString2() + { + TInt time = I64LOW(iTime1.Int64()); + iString2.Format(TimeFormat,1,time/1000000,(time%1000000)/100); + } + +void CTimeWindow::UpdateString3() + { + TInt time = I64LOW(iTime2.Int64()); + iString3.Format(TimeFormat,2,time/1000000,(time%1000000)/100); + } + + +// +// CQBlankWindow +// + +void CQBlankWindow::InitWin() + { + SetColor(TRgb::Gray4(iInitialColor)); + iWin.SetSize(iSize); + } + + +// +// CFixScreenModeGroup +// + +CFixScreenModeGroup::~CFixScreenModeGroup() + { + GroupWin()->EnableReceiptOfFocus(EFalse); + ClearCurrentWindow(); + CQBlankWindow* win; + while (!iWindows.IsEmpty()) + { + win=iWindows.First(); + iWindows.Remove(*win); + delete win; + } + } + +CFixScreenModeGroup::CFixScreenModeGroup(CTClient *aClient) : CTWindowGroup(aClient), iWindows(_FOFF(CQBlankWindow,iLink)) + {} + +void CFixScreenModeGroup::ConstructL() + { + CTWindowGroup::ConstructL(); + CQBlankWindow* win; + TInt ii; + for(ii=0;iiConstructL(*this); + win->Activate(); + win->AssignGC(*iClient->iGc); + iWindows.AddLast(*win); + CleanupStack::Pop(win); + Client()->Flush(); + } + SetCurrentWindow(iWindows.First()); + } + +/*void CFixScreenModeGroup::ScreenDeviceChanged() + { + iWindow->ScreenDeviceChanged(); + }*/ + + +// +// CScreenModeTimes +// + +_LIT(TestName,"Screen Mode Times"); +CScreenModeTimes::CScreenModeTimes() : CTestBase(TestName) + ,iNormalGroupQue(_FOFF(CFixScreenModeGroup,iLink)),iFlipGroupQue(_FOFF(CFixScreenModeGroup,iLink)) + {} + +CScreenModeTimes::~CScreenModeTimes() + { + Client()->iGroup->GroupWin()->EnableScreenChangeEvents(); + Client()->iScreen->SetScreenMode(0); + DeleteGroups(iNormalGroupQue); + DeleteGroups(iFlipGroupQue); + Client()->iGroup->SetCurrentWindow(NULL); + delete iFlipClient; + delete iInfoWindow; + if (iEnforcementMode==ESizeEnforcementNone) + Client()->iScreen->SetScreenModeEnforcement(ESizeEnforcementNone); + } + +void CScreenModeTimes::ConstructL() + { + iEnforcementMode=Client()->iScreen->ScreenModeEnforcement(); + if (iEnforcementMode==ESizeEnforcementNone) + Client()->iScreen->SetScreenModeEnforcement(ESizeEnforcementPixelsAndRotation); + iDialogue=new(ELeave) CInfoDialog(Client()->iGroup,Client()->iGc); + iDialogue->ConstructLD(); + iFlipClient=new(ELeave) CFlipClient(); + iFlipClient->ConstructL(); + Client()->iGroup->GroupWin()->DisableScreenChangeEvents(); + iNoGroupWins=12; //20; + CFixScreenModeGroup::iNoClientWins=20; //30; + TSize screenSize=Client()->iScreen->SizeInPixels(); + CQBlankWindow::iSize.iWidth=Max(screenSize.iHeight,screenSize.iWidth); + CQBlankWindow::iSize.iHeight=CQBlankWindow::iSize.iWidth; + TInt ii; + for(ii=0;iiiGroup->GroupWin()->SetOrdinalPosition(0); + iInfoWindow=new(ELeave) CTimeWindow(); + iInfoWindow->SetUpL(TPoint(Max(Min(415,screenSize.iWidth-210),0),Min(50,screenSize.iHeight-180)),TSize(210,180),Client()->iGroup,*Client()->iGc); + Client()->iGroup->SetCurrentWindow(iInfoWindow); + iInfoWindow->Construct(this); + iInfoWindow->WinTreeNode()->SetOrdinalPosition(1); + iInfoWindow->SetNumWindows(iNoGroupWins,CFixScreenModeGroup::iNoClientWins); + + Client()->iGroup->GroupWin()->DisableScreenChangeEvents(); + Client()->iWs.SetAutoFlush(ETrue); + iFlipClient->iWs.SetAutoFlush(ETrue); + Client()->iWs.SetPointerCursorMode(EPointerCursorNone); + } + +void CScreenModeTimes::CreateGroupL(CTClient *aClient,TSglQue& aQue) + { + CFixScreenModeGroup* group; + group=new(ELeave) CFixScreenModeGroup(aClient); + CleanupStack::PushL(group); + group->ConstructL(); + aQue.AddLast(*group); + CleanupStack::Pop(group); + } + +void CScreenModeTimes::DeleteGroups(TSglQue& aQue) + { + CFixScreenModeGroup* group; + while (!aQue.IsEmpty()) + { + group=aQue.First(); + aQue.Remove(*group); + delete group; + } + } + +void CScreenModeTimes::BringToFront(TSglQue& aQue) + { + TSglQueIter iter(aQue); + CFixScreenModeGroup* group=iter++; + group->GroupWin()->SetOrdinalPosition(0); + while ((group=iter++)!=NULL) + group->GroupWin()->SetOrdinalPosition(1); + } + +void CScreenModeTimes::DoTimings() + { + //Timings 1 SCRDEV, DWsScreenDevice::CommandL, around call to SetScreenMode + //Timings 2 GROUPWIN, CWsWindowGroup::SetScreenDeviceValidStates, around main body of function including calls to old way + //Timings 3 CLIWIN, CWsTopClientWindow::SetScreenDeviceValidState, around call to ResetHiddenFlagAndAdjustRegions + //Timings 3 GROUPWIN, CWsWindowGroup::SetScreenDeviceValidStates, around main body of function excluding calls to old way + //Timings 4&5 CLIWIN, CWsClientWindow::ResetHiddenFlagAndAdjustRegions, going invisible and becomming visible sections + Client()->iGroup->GroupWin()->SetOrdinalPosition(-2); + Client()->Flush(); + TTime startTime; + TTime middleTime; + TTime endTime; +__PROFILE_START(0); + startTime.HomeTime(); + BringToFront(iNormalGroupQue); + Client()->iScreen->SetScreenMode(1); + middleTime.HomeTime(); + BringToFront(iFlipGroupQue); + Client()->iScreen->SetScreenMode(0); + endTime.HomeTime(); +__PROFILE_END(0); +#if defined(__PROFILING__) + TProfile profile; + RDebug::ProfileResult(&profile,3,1); + if (profile.iCount>0) + iDialogue->TimerResults(0); +#endif + TTimeIntervalMicroSeconds time=middleTime.MicroSecondsFrom(startTime); + iInfoWindow->SetTime1(time); + time=endTime.MicroSecondsFrom(middleTime); + iInfoWindow->SetTime2(time); + Client()->iGroup->GroupWin()->SetOrdinalPosition(0); +#if defined(__PROFILING__) + if (profile.iCount>0) + iDialogue->Display(); +#endif + } + +TestState CScreenModeTimes::DoTestL() + { + switch(iState) + { + case 0: + LogSubTest(_L("Time ScreenMode Changes"),1); + DoTimings(); + iState++; + return EContinue; + default: + return EFinished; + } + }