windowing/windowserver/test/ttime/TTGRAPH.CPP
changeset 103 2717213c588a
parent 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/ttime/TTGRAPH.CPP	Tue Jun 22 15:21:29 2010 +0300
@@ -0,0 +1,443 @@
+// 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:
+// used for timing graphics
+// 
+//
+
+#include "TTIME.H"
+
+#define TEST_BITMAP_NAME _L("Z:\\WSTEST\\TEST.MBM")
+
+GLREF_C void Panic(TInt aPanic);
+
+enum TFuncType
+	{
+	EBitmapTest,
+	EXorTest,
+	ESmallClearTest,
+	ERectCompareTest,
+	EUseFontTest,
+	EBitBltTest,
+	EFullScreenBitBltTest,
+	EMaskedBitBltTest,
+	EFillPatternTest,
+	EBackupWindowDrawingTest,
+	};
+
+class TGraphicsTest : public CBase
+	{
+public:
+	void DoTestL(TInt aOwningGroup, TFuncType aFunc, TInt aParam1, TAny *aParam2);
+	void DrawBitmapTestL(TInt aParam1, TAny *aParam2);
+	void XorTest(TInt aParam1, TAny *aParam2);
+	void SmallClearTest(TInt , TAny *);
+	void RectCompareTest(TInt , TAny *);
+	void UseFontTestL(TInt , TAny *);
+	void BitBltTestL(TInt , TAny *);
+	void FullScreenBitBltTestL(TInt , TAny *);
+	void MaskedBitBltTestL(TInt , TAny *);
+	void FillPatternTestL(TInt , TAny *);
+	void BackedUpWindowDrawingL(TInt aMode, TAny *);
+private:
+	RWsSession iWs;
+	CWsScreenDevice *iDevice;
+	RWindowGroup iGroup;
+	RWindow iWindow;
+	RBackedUpWindow iBackedUpWindow;
+	RDrawableWindow *iWindowPtr;
+	CWindowGc *iGc;
+	};
+	
+TInt CreateGraphicsTest(TInt aOwningGroup, TFuncType aFunc, TInt aParam1, TAny *aParam2)
+	{
+	TGraphicsTest *iTest=NULL;
+	TRAPD(err,iTest=new(ELeave) TGraphicsTest());
+	if (err==KErrNone)
+		{
+		TRAP(err,iTest->DoTestL(aOwningGroup, aFunc, aParam1, aParam2));
+		delete iTest;
+		}
+	return(err);
+	}
+
+void TGraphicsTest::DoTestL(TInt aOwningGroup, TFuncType aFunc, TInt aParam1, TAny *aParam2)
+	{
+	iWs.Connect();
+	iDevice=new(ELeave) CWsScreenDevice(iWs);
+	iDevice->Construct();
+	iGroup=RWindowGroup(iWs);
+	iGroup.Construct(ENullWsHandle);
+	iGroup.SetOwningWindowGroup(aOwningGroup);
+//
+	if (aFunc==EBackupWindowDrawingTest)
+		{
+		iBackedUpWindow=RBackedUpWindow(iWs);
+		iWindowPtr=&iBackedUpWindow;
+		iBackedUpWindow.Construct(iGroup,EGray4,ENullWsHandle);
+		}
+	else
+		{
+		iWindow=RWindow(iWs);
+		iWindowPtr=&iWindow;
+		iWindow.Construct(iGroup,ENullWsHandle);
+		}
+	User::LeaveIfError(iWindowPtr->SetExtentErr(TPoint(), iDevice->SizeInPixels()));
+	iWindowPtr->Activate();
+	//
+	iDevice->CreateContext(iGc);
+	iGc->Activate(*iWindowPtr);
+	if (iWindowPtr==&iWindow)
+		{
+		iWindow.BeginRedraw();
+		iGc->Clear();
+		iWindow.EndRedraw();
+		}
+	switch(aFunc)
+		{
+		case EBitmapTest:
+			DrawBitmapTestL(aParam1, aParam2);
+			break;
+		case EXorTest:
+			XorTest(aParam1, aParam2);
+			break;
+		case ESmallClearTest:
+			SmallClearTest(aParam1, aParam2);
+			break;
+		case ERectCompareTest:
+			RectCompareTest(aParam1, aParam2);
+			break;
+		case EUseFontTest:
+			UseFontTestL(aParam1, aParam2);
+			break;
+		case EBitBltTest:
+			BitBltTestL(aParam1, aParam2);
+			break;
+		case EFullScreenBitBltTest:
+			FullScreenBitBltTestL(aParam1, aParam2);
+			break;
+		case EMaskedBitBltTest:
+			MaskedBitBltTestL(aParam1, aParam2);
+			break;
+		case EFillPatternTest:
+			FillPatternTestL(aParam1, aParam2);
+			break;
+		case EBackupWindowDrawingTest:
+			BackedUpWindowDrawingL(aParam1, aParam2);
+			break;
+		default:;
+		}
+//
+	delete iGc;
+	iWindowPtr->Close();
+	iGroup.Close();
+	delete iDevice;
+	iWs.Close();
+	}
+
+// Draw bitmap //
+
+void TGraphicsTest::DrawBitmapTestL(TInt , TAny *)
+	{
+	CFbsBitmap *bitmap=new(ELeave) CFbsBitmap;
+	User::LeaveIfError(bitmap->Load(TEST_BITMAP_NAME,0));
+	for(TInt nTimes=0;nTimes<10;nTimes++)
+		{
+		iGc->Clear();
+		TSize size(iDevice->SizeInPixels());
+		iGc->DrawBitmap(TRect(-size.iWidth,-size.iHeight,size.iWidth<<1,size.iHeight<<1),bitmap);
+		iWs.Flush();
+		}
+	delete bitmap;
+	}
+
+TInt DrawBitmapTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EBitmapTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader DrawBitmapTest={_S("Draw bitmap"),DrawBitmapTestFunc};
+
+// XOR Test //
+
+void TGraphicsTest::XorTest(TInt , TAny *)
+	{
+	iGc->SetDrawMode(CGraphicsContext::EDrawModeXOR);
+	iGc->SetBrushColor(TRgb::Gray256(255));
+	iGc->SetPenStyle(CGraphicsContext::ENullPen);
+	iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+	for(TInt count=0;count<10;count++)
+		{
+		for(TInt wid=1;wid<320;wid+=3)
+			{
+			iGc->DrawRect(TRect(10,10,10+wid,150));
+	//		iWs.Flush();
+			}
+		}
+	}
+
+TInt XorIngTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EXorTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader XorIngTest={_S("Xor'ing"),XorIngTestFunc};
+
+// XOR Test //
+
+void TGraphicsTest::SmallClearTest(TInt , TAny *)
+	{
+	iGc->SetBrushColor(TRgb::Gray256(255));
+	iGc->SetPenStyle(CGraphicsContext::ENullPen);
+	iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+	for(TInt count=0;count<500;count++)
+		{
+		for(TInt wid=1;wid<30;wid++)
+			{
+			iGc->DrawRect(TRect(1,0,10+wid,100));
+//			iWs.Flush();
+			}
+		}
+	}
+
+TInt SmallClearTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, ESmallClearTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader SmallClearTest={_S("Small clear rect"),SmallClearTestFunc};
+
+// XOR Test //
+
+enum {EMaxWidth=100};
+
+void TGraphicsTest::RectCompareTest(TInt , TAny *)
+	{
+	TSize size(iDevice->SizeInPixels());
+	for(TInt count=0;count<10;count++)
+		iDevice->RectCompare(TRect(0,0,size.iWidth>>1,size.iHeight),TRect(size.iWidth>>1,0,size.iWidth,size.iHeight));
+	}
+
+TInt RectCompareTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, ERectCompareTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader RectCompareTest={_S("RectCompare"),RectCompareTestFunc};
+
+// Use Font //
+
+void TGraphicsTest::UseFontTestL(TInt , TAny *)
+	{
+	CFbsFont *font;
+	TFontSpec fspec(KTestFontTypefaceName,200);
+	User::LeaveIfError(iDevice->GetNearestFontToDesignHeightInTwips((CFont *&)font, fspec));
+	for(TInt count=0;count<1000;count++)
+		iGc->UseFont(font);
+	iDevice->ReleaseFont(font);
+	}
+
+TInt UseFontTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EUseFontTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader UseFontTest={_S("UseFont(x1000)"),UseFontTestFunc};
+
+// Small BitBlt //
+
+void TGraphicsTest::BitBltTestL(TInt , TAny *)
+	{
+	CWsBitmap *bitmap=new(ELeave) CWsBitmap(iWs);
+	TSize size(25,50);
+	bitmap->Create(size,EGray4);
+	CFbsDevice *bitmapDevice=CFbsBitmapDevice::NewL(bitmap);
+	CFbsBitGc *gc=CFbsBitGc::NewL();
+	gc->Activate(bitmapDevice);
+	gc->DrawEllipse(TRect(size));
+	delete gc;
+	delete bitmapDevice;
+	for(TInt count=0;count<10;count++)
+		{
+		iGc->Clear();
+		TPoint pos(0,0);
+		for(TInt xcount=0;xcount<25;xcount++,pos.iX+=size.iWidth)
+			{
+			pos.iY=0;
+			for(TInt ycount=0;ycount<4;ycount++,pos.iY+=size.iHeight)
+				iGc->BitBlt(pos,bitmap);
+			}
+		}
+	delete bitmap;
+	}
+
+TInt BitBltTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EBitBltTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader BitBltTest={_S("BitBlt"),BitBltTestFunc};
+
+// Full Screen BitBlt //
+
+void TGraphicsTest::FullScreenBitBltTestL(TInt , TAny *)
+	{
+	CWsBitmap *bitmap=new(ELeave) CWsBitmap(iWs);
+	TSize size(640,240);
+	User::LeaveIfError(bitmap->Create(size,EGray4));
+	CFbsDevice *bitmapDevice=CFbsBitmapDevice::NewL(bitmap);
+	CFbsBitGc *gc=CFbsBitGc::NewL();
+	gc->Activate(bitmapDevice);
+	for(TInt pos=0;pos<size.iWidth;pos+=8)
+		{
+		gc->DrawRect(TRect(pos,0,pos+16,size.iHeight));
+		iGc->BitBlt(TPoint(0,0),bitmap);
+		iWs.Flush();
+		}
+	delete gc;
+	delete bitmapDevice;
+	delete bitmap;
+	}
+
+TInt FullScreenBitBltTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EFullScreenBitBltTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader FullScreenBitBltTest={_S("FullScreenBitBlt"),FullScreenBitBltTestFunc};
+
+// Masked BitBlt //
+
+void TGraphicsTest::MaskedBitBltTestL(TInt , TAny *)
+	{
+	TSize size(24,48);
+	CWsBitmap *bitmap=new(ELeave) CWsBitmap(iWs);
+	bitmap->Create(size,EGray4);
+	CFbsDevice *bitmapDevice=CFbsBitmapDevice::NewL(bitmap);
+	CFbsBitGc *gc=CFbsBitGc::NewL();
+	gc->Activate(bitmapDevice);
+	gc->DrawEllipse(TRect(size));
+	delete bitmapDevice;
+// Now do the mask
+	CWsBitmap *mask=new(ELeave) CWsBitmap(iWs);
+	mask->Create(size,EGray4);
+	bitmapDevice=CFbsBitmapDevice::NewL(mask);
+	gc->Activate(bitmapDevice);
+	gc->SetPenColor(TRgb::Gray4(3));
+	gc->DrawEllipse(TRect(size));
+	delete bitmapDevice;
+//
+	delete gc;
+	for(TInt count=0;count<10;count++)
+		{
+		iGc->Clear();
+		TPoint pos(0,0);
+		for(TInt xcount=0;xcount<25;xcount++,pos.iX+=size.iWidth+1)
+			{
+			pos.iY=0;
+			for(TInt ycount=0;ycount<4;ycount++,pos.iY+=size.iHeight)
+				iGc->BitBltMasked(pos,bitmap,TRect(size),mask,EFalse);
+			}
+		}
+	delete bitmap;
+	delete mask;
+	}
+
+TInt MaskedBitBltTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EMaskedBitBltTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader MaskedBitBltTest={_S("MaskedBitBlt"),MaskedBitBltTestFunc};
+
+// Fill Pattern //
+
+void TGraphicsTest::FillPatternTestL(TInt , TAny *)
+	{
+	TSize scrSize(iDevice->SizeInPixels());
+	TSize rectSize(scrSize.iWidth/5-1,scrSize.iHeight/2);
+
+	CWsBitmap *bitmap=new(ELeave) CWsBitmap(iWs);
+
+	TSize bitmapSize(50,40);
+	bitmap->Create(bitmapSize,EGray4);
+	CFbsDevice *bitmapDevice=CFbsBitmapDevice::NewL(bitmap);
+	CFbsBitGc *gc=CFbsBitGc::NewL();
+	gc->Activate(bitmapDevice);
+	gc->SetBrushColor(TRgb::Gray4(2));
+	gc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc->DrawEllipse(TRect(bitmapSize));
+	delete bitmapDevice;
+	delete gc;
+//
+	iGc->UseBrushPattern(bitmap);
+	iGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
+	iGc->SetPenStyle(CGraphicsContext::ESolidPen);
+	for(TInt count=0;count<50;count++)
+		{
+		iGc->Clear();
+		TPoint pos(0,0);
+		for(TInt xcount=0;xcount<5;xcount++,pos.iX+=rectSize.iWidth)
+			{
+			pos.iY=0;
+			for(TInt ycount=0;ycount<2;ycount++,pos.iY+=rectSize.iHeight)
+				iGc->DrawRect(TRect(pos,rectSize));
+			}
+		}
+	delete bitmap;
+	}
+
+TInt FillPatternTestFunc(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EFillPatternTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader FillPatternTest={_S("FillPattern"),FillPatternTestFunc};
+
+// Backup Window Drawing //
+
+void TGraphicsTest::BackedUpWindowDrawingL(TInt aMode, TAny *)
+	{
+	TSize scrSize(iDevice->SizeInPixels());
+	CFbsFont *font=NULL;
+	if (aMode==1)
+		{
+		TFontSpec fspec(KTestFontTypefaceName,200);
+		User::LeaveIfError(iDevice->GetNearestFontToDesignHeightInTwips((CFont *&)font, fspec));
+		iGc->UseFont(font);
+		}
+	iGc->SetPenStyle(CGraphicsContext::ESolidPen);
+	TPoint pos;
+	for(TInt count=0;count<10;count++)
+		{
+		iGc->Clear();
+		for(pos.iY=0;pos.iY<scrSize.iHeight;pos.iY++)
+			iGc->DrawLine(pos,pos+TSize(scrSize.iWidth,0));
+		}
+	if (aMode==1)
+		iDevice->ReleaseFont(font);
+	}
+
+TInt BackupWindowDrawingFunc1(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EBackupWindowDrawingTest, 0, NULL));
+	}
+
+GLDEF_D TTimeTestHeader BackupWindowDrawingCreate1={_S("BackupWindowDrawing 1"),BackupWindowDrawingFunc1};
+
+TInt BackupWindowDrawingFunc2(TInt aOwningGroup)
+	{
+	return(CreateGraphicsTest(aOwningGroup, EBackupWindowDrawingTest, 1, NULL));
+	}
+
+GLDEF_D TTimeTestHeader BackupWindowDrawingCreate2={_S("BackupWindowDrawing 2"),BackupWindowDrawingFunc2};