diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tman/TKREPEAT.CPP --- a/windowing/windowserver/tman/TKREPEAT.CPP Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,348 +0,0 @@ -// Copyright (c) 1996-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: -// Keyboard repeat test -// -// - -#include -#include -#include "W32STD.H" -#include "../tlib/testbase.h" -#include "TMAN.H" - -class CRKWindow; - -class TKRepeatTest : public CTestBase - { -public: - TKRepeatTest(); - ~TKRepeatTest(); - TestState DoTestL(); - void ConstructL(); - void TestKeyboardRepeatRateL(const TTimeIntervalMicroSeconds32 &aInitialTime, const TTimeIntervalMicroSeconds32 &aTime); - TBool CheckReportL(); -public: - TBool iAbort; -private: - TTimeIntervalMicroSeconds32 iOldInitialTime; - TTimeIntervalMicroSeconds32 iOldTime; - CRKWindow *iWin; - TSize iWinSize; - TInt iState; - }; - -class CRKWindow : public CTWin - { - enum TRKStates { - EStateWaitingForKeyDown, - EStateWaitingForKeyCode, - EStateWaitingForFirstRepeat, - EStateWaitingForNthRepeat, - EStateWaitingForKeyUp, - EStateInactive, - EStateError, - }; -public: - CRKWindow(TKRepeatTest *aTest); - void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); - void SetState(TRKStates aState); - void SetKeyboardRepeatRate(const TTimeIntervalMicroSeconds32 &aInitialTime, const TTimeIntervalMicroSeconds32 &aTime); - void WinKeyL(const TKeyEvent &,const TTime &); - void KeyUpL(const TKeyEvent &aKey,const TTime &aTime); - void KeyDownL(const TKeyEvent &aKey,const TTime &aTime); - void Draw(); - TDesC& Report(); - TBool CheckResults(); -protected: - TInt iConnIndex; - TKRepeatTest *iTest; - TRgb iBack; - TRKStates iState; - TInt iDownCode; - TInt iRepCount; - TTimeIntervalMicroSeconds32 iInitialRepeatSet; - TTimeIntervalMicroSeconds32 iRepeatSet; - TTime iPrevTime; - TTimeIntervalMicroSeconds32 iInitialGap; - TTimeIntervalMicroSeconds32 iTotalGap; - TTimeIntervalMicroSeconds32 iMinGap; - TTimeIntervalMicroSeconds32 iMaxGap; - TBuf<0x40> iReport; - }; - -GLDEF_C CTestBase *CreateKRepeatTest() - { - return(new(ELeave) TKRepeatTest()); - } - -// -// CRKWindow, class // -// - -CRKWindow::CRKWindow(TKRepeatTest *aTest) : CTWin(), iTest(aTest) - { - } - -void CRKWindow::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) - { - ConstructExtLD(*parent,pos,size); - iWin.SetBackgroundColor(TRgb::Gray256(230)); - Activate(); - AssignGC(aGc); - } - -void CRKWindow::Draw() - { - iGc->Clear(); - switch(iState) - { - case EStateWaitingForKeyDown: - iGc->DrawText(_L("Press and hold the space bar"), TPoint(10,20)); - break; - case EStateWaitingForFirstRepeat: - case EStateWaitingForNthRepeat: - { - TBuf<0x40> buf; - buf.Format(TRefByValue(_L("Keep space bar down (%d repeats so far)")),iRepCount); - iGc->DrawText(buf, TPoint(10,20)); - } - break; - case EStateWaitingForKeyUp: - iGc->DrawText(_L("Release space bar"), TPoint(10,20)); - default: - break; - } - } - -void CRKWindow::SetState(TRKStates aState) - { - iState=aState; - DrawNow(); - } - -TBool CRKWindow::CheckResults() - { -// -// Checks repeat results, first convert everything to 10th's as that what is actually used -// for the timer in the window server. -// -// Return ETrue if the inacuracy in the average time is greater than 1/10th either way -// Allow initial 2/10ths either -// Allow min 2/10ths below -// Allow max 2/10ths above -// - if (iState!=EStateInactive) - return(ETrue); - TInt initial=iInitialGap.Int()/100000; - TInt initialX=iInitialRepeatSet.Int()/100000; - if (initialX==0) - initialX=1; - TInt average=(iTotalGap.Int()/100000)/(iRepCount-1); - TInt repeatX=iRepeatSet.Int()/100000; - if (repeatX==0) - repeatX=1; - TInt min=iMinGap.Int()/100000; - TInt max=iMaxGap.Int()/100000; - if (average>(repeatX+1) || average<(repeatX-1)) - return(ETrue); - if (initial>(initialX+2) || initial<(initialX-2)) - return(ETrue); - if (min>(repeatX+1) || min<(repeatX-2)) - return(ETrue); - if (max>(repeatX+3) || max(_L("Initial=%d [%d], Av=%d [%d], Min=%d, Max=%d")),initial,initialX,average,repeatX,min,max); - } - return(iReport); - } - -void CRKWindow::KeyDownL(const TKeyEvent &aKey,const TTime &) - { - switch(iState) - { - case EStateWaitingForKeyDown: - SetState(EStateWaitingForKeyCode); - iDownCode=aKey.iScanCode; - break; - default:; - } - } - -void CRKWindow::KeyUpL(const TKeyEvent &aKey,const TTime &) - { - if (aKey.iScanCode==iDownCode) - { - switch(iState) - { - case EStateWaitingForKeyUp: - SetState(EStateInactive); - break; - default: - SetState(EStateError); - break; - } - CActiveScheduler::Stop(); - } - } - -void CRKWindow::WinKeyL(const TKeyEvent &aKey,const TTime &aTime) - { - if (aKey.iCode==EKeyEscape) - { - CActiveScheduler::Stop(); - iTest->iAbort=ETrue; - } - if (aKey.iCode==32) - { - switch(iState) - { - case EStateWaitingForKeyCode: - SetState(EStateWaitingForFirstRepeat); - iPrevTime=aTime; - break; - case EStateWaitingForFirstRepeat: - iRepCount=1; - iInitialGap = I64LOW(aTime.MicroSecondsFrom(iPrevTime).Int64()); - SetState(EStateWaitingForNthRepeat); - break; - case EStateWaitingForNthRepeat: - if (iRepCount==5) - SetState(EStateWaitingForKeyUp); - else - { - TTimeIntervalMicroSeconds32 gap(I64LOW(aTime.MicroSecondsFrom(iPrevTime).Int64())); - if (gapiMaxGap) - iMaxGap=gap; - iTotalGap=iTotalGap.Int()+gap.Int(); // Horrible way to do a += - iRepCount++; - SetState(EStateWaitingForNthRepeat); - } - case EStateWaitingForKeyUp: // Do nothing here - break; - default: - iTest->TestL(EFalse); - } - iPrevTime=aTime; - } - } - -void CRKWindow::SetKeyboardRepeatRate(const TTimeIntervalMicroSeconds32 &aInitialTime, const TTimeIntervalMicroSeconds32 &aTime) - { - iInitialRepeatSet=aInitialTime; - iRepeatSet=aTime; - iMinGap=TTimeIntervalMicroSeconds32(100000000); // Any very big number will do - iMaxGap=TTimeIntervalMicroSeconds32(0); - iTotalGap=TTimeIntervalMicroSeconds32(0); - SetState(EStateWaitingForKeyDown); - Client()->iWs.Flush(); - } - -// - -TKRepeatTest::TKRepeatTest() : CTestBase(_L("KRepeat")) - {} - -TKRepeatTest::~TKRepeatTest() - { - CTWin::Delete(iWin); - Client()->iWs.SetKeyboardRepeatRate(iOldInitialTime, iOldTime); - } - -void TKRepeatTest::ConstructL() - { - iWin=new(ELeave) CRKWindow(this); - TSize screenSize=Client()->iGroup->Size(); - iWin->SetUpL(TPoint(5,5),TSize(screenSize.iWidth/2,screenSize.iHeight-10),Client()->iGroup,*Client()->iGc); - Client()->iGroup->SetCurrentWindow(iWin); - Client()->iWs.GetKeyboardRepeatRate(iOldInitialTime, iOldTime); - } - -TInt TKRepeatTest::CheckReportL() - { - if (iWin->CheckResults()) - { - CTDialog *dialog=new(ELeave) CTDialog(); - dialog->SetTitle(_L("Keyboard repeat innacuracies")); - dialog->SetLine1(iWin->Report()); - dialog->SetNumButtons(2); - dialog->SetButtonText(0,_L("Okay")); - dialog->SetButtonText(1,_L("Retest")); - dialog->SetButtonText(2,_L("Fail")); - dialog->ConstructLD(*Client()->iGroup,*Client()->iGc); - switch(dialog->Display()) - { - case 0: - break; - case 1: - return(ETrue); // Redo test - case 2: - TestL(EFalse); - break; - } - } - return(EFalse); - } - -void TKRepeatTest::TestKeyboardRepeatRateL(const TTimeIntervalMicroSeconds32 &aInitialTime, const TTimeIntervalMicroSeconds32 &aTime) - { - do - { - Client()->iWs.SetKeyboardRepeatRate(aInitialTime, aTime); - iWin->SetKeyboardRepeatRate(aInitialTime, aTime); - CActiveScheduler::Start(); - if (iAbort) - AbortL(); - } while(CheckReportL()); - } - -TestState TKRepeatTest::DoTestL() - { - switch(iState) - { - case 0: - LogSubTest(_L("Keyboard Repeat"),1); - TestKeyboardRepeatRateL(TTimeIntervalMicroSeconds32(1000000), TTimeIntervalMicroSeconds32(500000)); - LogSubTest(_L("Keyboard Repeat"),2); - TestKeyboardRepeatRateL(TTimeIntervalMicroSeconds32(200000), TTimeIntervalMicroSeconds32(100000)); - LogSubTest(_L("Keyboard Repeat"),3); - TestKeyboardRepeatRateL(TTimeIntervalMicroSeconds32(0), TTimeIntervalMicroSeconds32(100000)); - LogSubTest(_L("Keyboard Repeat"),4); - TestKeyboardRepeatRateL(TTimeIntervalMicroSeconds32(100000), TTimeIntervalMicroSeconds32(100000)); - iState++; - break; - default: - return(EFinished); - } - return(ENext); - } -