os/graphics/windowing/windowserver/test/t_gdcoverage/gdcoverage.cpp
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/graphics/windowing/windowserver/test/t_gdcoverage/gdcoverage.cpp	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,138 @@
     1.4 +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 +// All rights reserved.
     1.6 +// This component and the accompanying materials are made available
     1.7 +// under the terms of "Eclipse Public License v1.0"
     1.8 +// which accompanies this distribution, and is available
     1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
    1.10 +//
    1.11 +// Initial Contributors:
    1.12 +// Nokia Corporation - initial contribution.
    1.13 +//
    1.14 +// Contributors:
    1.15 +//
    1.16 +// Description:
    1.17 +//
    1.18 +
    1.19 +/**
    1.20 + @file
    1.21 + @test
    1.22 + @internalComponent - Internal Symbian test coverage code for GraphicDrawer related code
    1.23 +*/
    1.24 +
    1.25 +#include "gdcoverage.h"
    1.26 +#include <fbs.h>
    1.27 +#include <bitdev.h>
    1.28 +#include <bitstd.h>
    1.29 +#include <gdi.h>
    1.30 +#include <graphics/wsscreendevice.h>
    1.31 +
    1.32 +const TInt KDefaultScreen = 0;
    1.33 +
    1.34 +//
    1.35 +CWsGraphicDrawerCoverage* CWsGraphicDrawerCoverage::NewL()
    1.36 +	{
    1.37 +	return new(ELeave) CWsGraphicDrawerCoverage;
    1.38 +	}
    1.39 +	
    1.40 +CWsGraphicDrawerCoverage::~CWsGraphicDrawerCoverage()
    1.41 +	{
    1.42 +	}
    1.43 +	
    1.44 +void CWsGraphicDrawerCoverage::ConstructL(
    1.45 +	MWsGraphicDrawerEnvironment& aEnv,
    1.46 +	const TGraphicDrawerId& aId,
    1.47 +	MWsClient& aOwner,
    1.48 +	const TDesC8& aData)
    1.49 +	{
    1.50 +	BaseConstructL(aEnv, aId, aOwner);
    1.51 +
    1.52 +	iScreenId = KDefaultScreen;
    1.53 +	if (aData.Length()>0)
    1.54 +		iScreenId = aData[0];
    1.55 +	MWsScreen* scr = aEnv.Screen(iScreenId);
    1.56 +	User::LeaveIfNull(scr);
    1.57 +
    1.58 +	//NGA supports MWsScreenDevice and non-NGA supports MWsScreenConfig, MWsFrontBuffer, MWsBackBuffer
    1.59 +	MWsScreenDevice* screenDevice = scr->ObjectInterface<MWsScreenDevice>();
    1.60 +	if(screenDevice)
    1.61 +		{
    1.62 +		//empty for now
    1.63 +		}
    1.64 +	else
    1.65 +		{
    1.66 +		MWsScreenConfig* cfg = scr->ObjectInterface<MWsScreenConfig>();
    1.67 +		User::LeaveIfNull(cfg);
    1.68 +		TSize sizeInPixels = cfg->ScreenModeSizeInPixels();
    1.69 +		__ASSERT_ALWAYS(sizeInPixels.iWidth>0 && sizeInPixels.iHeight>0, User::Invariant());
    1.70 +		__ASSERT_ALWAYS(cfg->Stride()>0, User::Invariant());
    1.71 +		__ASSERT_ALWAYS(cfg->ScalingFactor()==TSize(1,1), User::Invariant());
    1.72 +		__ASSERT_ALWAYS(cfg->Origin()==TPoint(0,0), User::Invariant());
    1.73 +		
    1.74 +		MWsFrontBuffer* fBuffer = scr->ObjectInterface<MWsFrontBuffer>();
    1.75 +		User::LeaveIfNull(fBuffer);
    1.76 +		__ASSERT_ALWAYS(fBuffer->GetBits()!=NULL, User::Invariant());
    1.77 +		__ASSERT_ALWAYS(fBuffer->GetBitGc()!=NULL, User::Invariant());
    1.78 +		}
    1.79 +
    1.80 +	MWsScreenRedraw* redraw = scr->ObjectInterface<MWsScreenRedraw>();
    1.81 +	User::LeaveIfNull(redraw);
    1.82 +	}
    1.83 +
    1.84 +void CWsGraphicDrawerCoverage::HandleMessage(const TDesC8& aData)
    1.85 +	{
    1.86 +	// wserv already check data size, and won't invoke this handler if it's empty
    1.87 +	TBuf8<1> ack;
    1.88 +	ack.Append(KGdCoverageInfoSig);
    1.89 +
    1.90 +	MWsGraphicDrawerEnvironment& env = Env();
    1.91 +	MWsScreen* scr = env.Screen(iScreenId);
    1.92 +	MWsScreenRedraw* redraw = scr->ObjectInterface<MWsScreenRedraw>();
    1.93 +	
    1.94 +	switch (aData[0])
    1.95 +		{
    1.96 +		case KGdCoverageCmdQuery:
    1.97 +			SendInfo();
    1.98 +			break;
    1.99 +
   1.100 +		case KGdCoverageCmdCoverRedraw:
   1.101 +			{
   1.102 +			//Hint: for extra coverage in ScheduleRender find a way to call
   1.103 +			//CWsTop::WindowServer()->AnimationScheduler()->Animate(*scr);
   1.104 +		
   1.105 +			//cannot create a real observer, for coverage null is sufficient
   1.106 +			redraw->SetObserver(NULL);
   1.107 +			redraw->IsUpdatePending();
   1.108 +			TTimeIntervalMicroSeconds interval(1);
   1.109 +			redraw->ScheduleRender(interval);
   1.110 +			const TRegion *r = redraw->AnimationRegion();
   1.111 +			redraw->UpdateDevice();
   1.112 +			//although redraw is actually a CScreenRedraw, we cannot include
   1.113 +			//the ScreenRedraw.h here so the following methods are not available:
   1.114 +			//redraw->AddRedrawRegion(*r, ETrue, ERedrawTopOnly);
   1.115 +			//redraw->OnAnimation();
   1.116 +			break;
   1.117 +			}
   1.118 +			
   1.119 +		default:
   1.120 +			SendMessage(ack);
   1.121 +			break;
   1.122 +		}
   1.123 +	}
   1.124 +	
   1.125 +void CWsGraphicDrawerCoverage::DoDraw(MWsGc& /*aGc*/, const TRect& /*aRect*/, const TDesC8& /*aData*/) const
   1.126 +	{
   1.127 +	}
   1.128 +
   1.129 +void CWsGraphicDrawerCoverage::SendInfo()
   1.130 +	{
   1.131 +	TPckgBuf<TGdCoverageInfo> buf;
   1.132 +	MWsScreen* scr = Env().Screen(iScreenId);
   1.133 +	if (scr)
   1.134 +		{
   1.135 +		buf().iSignature = KGdCoverageInfoSig;
   1.136 +		buf().iNumTests = 1;
   1.137 +		}
   1.138 +	TInt err = SendMessage(buf);
   1.139 +	__ASSERT_ALWAYS(err>=KErrNone, User::Invariant());
   1.140 +	}
   1.141 +