--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/t_ratelimiter/tratelimitdrawer/ratelimitdrawer.cpp Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,161 @@
+// Copyright (c) 2008-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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <bitstd.h>
+#include <graphics/wsgraphicdrawer.h>
+#include "ratelimitdrawer.h"
+#include "wsratelimitdrawer.h"
+#include <graphics/wsgraphicscontext.h>
+
+//Constant message handle, which is used to send count value between client and plug-in
+const TUint8 KCmdCount=0;
+// First Frame
+const TInt KFirstFrame = 0;
+
+/**
+Creates new test framerate object.
+*/
+CWsRateLimitGraphicDrawer* CWsRateLimitGraphicDrawer::NewL()
+ {
+ return new(ELeave) CWsRateLimitGraphicDrawer;
+ }
+
+CWsRateLimitGraphicDrawer::CWsRateLimitGraphicDrawer()
+ {
+ InitialiseMembers();
+ }
+
+void CWsRateLimitGraphicDrawer::InitialiseMembers()
+ {
+ iColors[0] = TRgb(0x000000);
+ iColors[1] = TRgb(0x555555);
+ iColors[2] = TRgb(0x000080);
+ iColors[3] = TRgb(0x008000);
+ iColors[4] = TRgb(0x008080);
+ iColors[5] = TRgb(0x800000);
+ iColors[6] = TRgb(0x800080);
+ iColors[7] = TRgb(0x808000);
+ iColors[8] = TRgb(0x0000ff);
+ iColors[9] = TRgb(0x00ff00);
+ iColors[10] = TRgb(0x000000);
+ iColors[11] = TRgb(0x555555);
+ iColors[12] = TRgb(0x000080);
+ iColors[13] = TRgb(0x008000);
+ iColors[14] = TRgb(0x008080);
+ iColors[15] = TRgb(0x800000);
+ iColors[16] = TRgb(0x800080);
+ iColors[17] = TRgb(0x808000);
+ iColors[18] = TRgb(0x0000ff);
+ iColors[19] = TRgb(0x00ff00);
+ iColors[20] = TRgb(0x000000);
+ iColors[21] = TRgb(0x555555);
+ iColors[22] = TRgb(0x000080);
+ iColors[23] = TRgb(0x008000);
+ iColors[24] = TRgb(0x008080);
+ iColors[25] = TRgb(0x800000);
+ iColors[26] = TRgb(0x800080);
+ iColors[27] = TRgb(0x808000);
+ iColors[28] = TRgb(0x0000ff);
+ iColors[29] = TRgb(0x00ff00);
+ iColors[30] = TRgb(0x000000);
+ iColors[31] = TRgb(0x555555);
+ iColors[32] = TRgb(0x000080);
+ iColors[33] = TRgb(0x008000);
+ iColors[34] = TRgb(0x008080);
+ iColors[35] = TRgb(0x800000);
+ iColors[36] = TRgb(0x800080);
+ iColors[37] = TRgb(0x808000);
+ iColors[38] = TRgb(0x0000ff);
+ iColors[39] = TRgb(0x00ff00);
+
+ iFrameRate = 0.0;
+ }
+
+
+CWsRateLimitGraphicDrawer::~CWsRateLimitGraphicDrawer()
+ {
+ }
+
+void CWsRateLimitGraphicDrawer::ConstructL(MWsGraphicDrawerEnvironment& aEnv,const TGraphicDrawerId& aId,MWsClient& aOwner,const TDesC8& /*aData*/)
+ {
+ BaseConstructL(aEnv,aId,aOwner);
+ }
+
+/**
+Simulate two animations of different frame rate with their respective schedule.
+
+@param MWsGc Window server graphic context to draw the animation
+@param TRect Rectangle are required to draw the animation
+@param TDesC Parameter value to use inside this function.
+*/
+void CWsRateLimitGraphicDrawer::DoDraw(MWsGc& aGc,const TRect& aRect,const TDesC8& /*aData*/) const
+ {
+ TPoint KWinPos = aRect.iTl + TPoint(10,10);
+ const TSize KWinSize(100,100);
+ const TRect KWinRect(KWinPos,KWinSize);
+
+ MWsGraphicsContext* context = static_cast<MWsGraphicsContext*>(aGc.ResolveObjectInterface(KMWsGraphicsContext));
+
+ //Get the time the animation starts
+ if(iFrame == KFirstFrame)
+ {
+ iStartTime = aGc.Now();
+ }
+
+ //Draw a filled rect with the chosen color
+ context->Push();
+ context->SetBrushStyle(MWsGraphicsContext::ESolidBrush);
+ context->SetBrushColor(iColors[iFrame]);
+ context->DrawRect(KWinRect);
+ context->Pop();
+
+ if(iFrame < KMaxFrames)
+ {
+ aGc.ScheduleAnimation(KWinRect,0);
+ }
+ else
+ {
+ TTimeIntervalMicroSeconds animLength = aGc.Now().MicroSecondsFrom(iStartTime);
+
+ iFrameRate = static_cast<TReal>(KMaxFrames)/(static_cast<TReal>(animLength.Int64())/KOneSecondInMicroSecs);
+ }
+
+ iFrame++;
+ }
+
+/**
+Handles message between client and plug-in.
+
+@param TDesC Constant message command.
+*/
+void CWsRateLimitGraphicDrawer::HandleMessage(const TDesC8& aData)
+ {
+ switch (aData[0])
+ {
+ case KCmdCount:
+ TPckgBuf<TAnimData> buf;
+ buf().iFrameRate = iFrameRate;
+ TInt err = SendMessage(buf);
+ __ASSERT_DEBUG(err>=KErrNone, User::Invariant());
+ break;
+ }
+ }
+