author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// 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: // #include "wsgraphicdrawercontext.h" #include "stdgraphictestdrawer.h" CWsGraphicDrawerTestFrameRate* CWsGraphicDrawerTestFrameRate::CreateL() { return new(ELeave) CWsGraphicDrawerTestFrameRate; } CWsGraphicDrawerTestFrameRate::CWsGraphicDrawerTestFrameRate() { } CWsGraphicDrawerTestFrameRate::~CWsGraphicDrawerTestFrameRate() { if (iContext) { iContext->Destroy(); iContext = NULL; } } void CWsGraphicDrawerTestFrameRate::ConstructL(MWsGraphicDrawerEnvironment& aEnv,const TGraphicDrawerId& aId,MWsClient& aOwner,const TDesC8& /*aData*/) { BaseConstructL(aEnv,aId,aOwner); if (!(aEnv.Screen(0)->ResolveObjectInterface(KMWsCompositionContext) || aEnv.Screen(0)->ResolveObjectInterface(KMWsScene))) { iContext = CWsGraphicDrawerNonNgaContext::NewL(); } else { iContext = CWsGraphicDrawerNgaContext::NewL(); } } void CWsGraphicDrawerTestFrameRate::DoDraw(MWsGc& aGc,const TRect& aRect,const TDesC8& /*aData*/) const { if (KErrNone != iContext->Push(aGc)) { return; } //Simplification: treats all screens the same iContext->DrawFrameRate(aGc, aRect, iFps); //Count this draw iFps.Sample(); //Schedule a redraw iContext->ScheduleAnimation(aGc,aRect,0); // as fast as possible iContext->Pop(aGc); } void CWsGraphicDrawerTestFrameRate::HandleMessage(const TDesC8& /*aData*/) { } TInt CFrameRate::Fps() const { if(iNumSamples > 1) { const TUint count = Min(iNumSamples,KMaxSamples); TInt64 earliest = iSamples[0]; TInt64 latest = earliest; for(TInt i=1; i<count; i++) { const TInt64 sample = iSamples[i]; earliest = Min(earliest,sample); latest = Max(latest,sample); } const TInt64 duration = latest - earliest; const TInt microspf = (duration / count); if(microspf) { const TInt millispf = (microspf / 1000); if(millispf) { const TInt fps = (1000 / millispf); return fps; } } } return 0; } TInt CFrameRate::CountSamples() const { return iNumSamples; } void CFrameRate::Sample() const { //Add the current tick to the stats for next time TTime now; now.UniversalTime(); iSamples[iNumSamples % KMaxSamples] = now.Int64(); iNumSamples++; }