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