diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/test/t_gdcoverage/gdcoverage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/t_gdcoverage/gdcoverage.cpp Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,138 @@ +// 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 coverage code for GraphicDrawer related code +*/ + +#include "gdcoverage.h" +#include +#include +#include +#include +#include + +const TInt KDefaultScreen = 0; + +// +CWsGraphicDrawerCoverage* CWsGraphicDrawerCoverage::NewL() + { + return new(ELeave) CWsGraphicDrawerCoverage; + } + +CWsGraphicDrawerCoverage::~CWsGraphicDrawerCoverage() + { + } + +void CWsGraphicDrawerCoverage::ConstructL( + MWsGraphicDrawerEnvironment& aEnv, + const TGraphicDrawerId& aId, + MWsClient& aOwner, + const TDesC8& aData) + { + BaseConstructL(aEnv, aId, aOwner); + + iScreenId = KDefaultScreen; + if (aData.Length()>0) + iScreenId = aData[0]; + MWsScreen* scr = aEnv.Screen(iScreenId); + User::LeaveIfNull(scr); + + //NGA supports MWsScreenDevice and non-NGA supports MWsScreenConfig, MWsFrontBuffer, MWsBackBuffer + MWsScreenDevice* screenDevice = scr->ObjectInterface(); + if(screenDevice) + { + //empty for now + } + else + { + MWsScreenConfig* cfg = scr->ObjectInterface(); + User::LeaveIfNull(cfg); + TSize sizeInPixels = cfg->ScreenModeSizeInPixels(); + __ASSERT_ALWAYS(sizeInPixels.iWidth>0 && sizeInPixels.iHeight>0, User::Invariant()); + __ASSERT_ALWAYS(cfg->Stride()>0, User::Invariant()); + __ASSERT_ALWAYS(cfg->ScalingFactor()==TSize(1,1), User::Invariant()); + __ASSERT_ALWAYS(cfg->Origin()==TPoint(0,0), User::Invariant()); + + MWsFrontBuffer* fBuffer = scr->ObjectInterface(); + User::LeaveIfNull(fBuffer); + __ASSERT_ALWAYS(fBuffer->GetBits()!=NULL, User::Invariant()); + __ASSERT_ALWAYS(fBuffer->GetBitGc()!=NULL, User::Invariant()); + } + + MWsScreenRedraw* redraw = scr->ObjectInterface(); + User::LeaveIfNull(redraw); + } + +void CWsGraphicDrawerCoverage::HandleMessage(const TDesC8& aData) + { + // wserv already check data size, and won't invoke this handler if it's empty + TBuf8<1> ack; + ack.Append(KGdCoverageInfoSig); + + MWsGraphicDrawerEnvironment& env = Env(); + MWsScreen* scr = env.Screen(iScreenId); + MWsScreenRedraw* redraw = scr->ObjectInterface(); + + switch (aData[0]) + { + case KGdCoverageCmdQuery: + SendInfo(); + break; + + case KGdCoverageCmdCoverRedraw: + { + //Hint: for extra coverage in ScheduleRender find a way to call + //CWsTop::WindowServer()->AnimationScheduler()->Animate(*scr); + + //cannot create a real observer, for coverage null is sufficient + redraw->SetObserver(NULL); + redraw->IsUpdatePending(); + TTimeIntervalMicroSeconds interval(1); + redraw->ScheduleRender(interval); + const TRegion *r = redraw->AnimationRegion(); + redraw->UpdateDevice(); + //although redraw is actually a CScreenRedraw, we cannot include + //the ScreenRedraw.h here so the following methods are not available: + //redraw->AddRedrawRegion(*r, ETrue, ERedrawTopOnly); + //redraw->OnAnimation(); + break; + } + + default: + SendMessage(ack); + break; + } + } + +void CWsGraphicDrawerCoverage::DoDraw(MWsGc& /*aGc*/, const TRect& /*aRect*/, const TDesC8& /*aData*/) const + { + } + +void CWsGraphicDrawerCoverage::SendInfo() + { + TPckgBuf buf; + MWsScreen* scr = Env().Screen(iScreenId); + if (scr) + { + buf().iSignature = KGdCoverageInfoSig; + buf().iNumTests = 1; + } + TInt err = SendMessage(buf); + __ASSERT_ALWAYS(err>=KErrNone, User::Invariant()); + } +