--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tman/TMTScrMd.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -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 <e32std.h>
+#include <e32def_private.h>
+#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<CQBlankWindow> 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<CFixScreenModeGroup>& aQue);
+ void DeleteGroups(TSglQue<CFixScreenModeGroup>& aQue);
+ void BringToFront(TSglQue<CFixScreenModeGroup>& aQue);
+private:
+ TScreenModeEnforcement iEnforcementMode;
+ CInfoDialog* iDialogue;
+ CTimeWindow* iInfoWindow;
+ CFlipClient* iFlipClient;
+ TSglQue<CFixScreenModeGroup> iNormalGroupQue;
+ TSglQue<CFixScreenModeGroup> 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;ii<iNoClientWins;++ii)
+ {
+ win=new(ELeave) CQBlankWindow();
+ CleanupStack::PushL(win);
+ win->ConstructL(*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;ii<iNoGroupWins;++ii)
+ {
+ CQBlankWindow::iInitialColor=1;
+ CreateGroupL(Client(),iNormalGroupQue);
+ CQBlankWindow::iInitialColor=2;
+ CreateGroupL(iFlipClient,iFlipGroupQue);
+ }
+ Client()->iGroup->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<CFixScreenModeGroup>& aQue)
+ {
+ CFixScreenModeGroup* group;
+ group=new(ELeave) CFixScreenModeGroup(aClient);
+ CleanupStack::PushL(group);
+ group->ConstructL();
+ aQue.AddLast(*group);
+ CleanupStack::Pop(group);
+ }
+
+void CScreenModeTimes::DeleteGroups(TSglQue<CFixScreenModeGroup>& aQue)
+ {
+ CFixScreenModeGroup* group;
+ while (!aQue.IsEmpty())
+ {
+ group=aQue.First();
+ aQue.Remove(*group);
+ delete group;
+ }
+ }
+
+void CScreenModeTimes::BringToFront(TSglQue<CFixScreenModeGroup>& aQue)
+ {
+ TSglQueIter<CFixScreenModeGroup> 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;
+ }
+ }