Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.
// 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));
}