diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tdynamicres/src/wsgcedebugsession.cpp --- a/windowing/windowserver/tdynamicres/src/wsgcedebugsession.cpp Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,177 +0,0 @@ -// 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 -*/ - -#include "wsgcedebugsession.h" - -RWsDebugSession::RWsDebugSession(TInt aScreenNo /*= -1*/): - iScreenNo(aScreenNo), - iSurfaceUpdateSerial(-1) - { - iSurfaceListBuffer.CreateMax(48); - } - -RWsDebugSession::~RWsDebugSession() - { - iSurfaceListBuffer.Close(); - - } - -TBool RWsDebugSession::ResetUpdated() - { - TInt surfaceUpdateSerial=DebugInfo(EWsDebugSerialSurfacesUpdated,iScreenNo); - TBool retVal=(iSurfaceUpdateSerial!=surfaceUpdateSerial); - iSurfaceUpdateSerial=surfaceUpdateSerial; - return retVal; - } - -TInt RWsDebugSession::ResetUpdatedAndGetSurfaceWindowList(const TWsDebugWindowId * & aWinList) - { - iSurfaceUpdateSerial=DebugInfo(EWsDebugSerialSurfacesUpdated,iScreenNo); - TInt reqSize=DebugInfo(EWsDebugSurfaceWindowList,iSurfaceListBuffer,iScreenNo); - while (reqSize>iSurfaceListBuffer.MaxLength()) - { - iSurfaceListBuffer.Close(); - iSurfaceListBuffer.CreateMax(reqSize); - iSurfaceUpdateSerial=DebugInfo(EWsDebugSerialSurfacesUpdated,iScreenNo); - reqSize=DebugInfo(EWsDebugSurfaceWindowList,iSurfaceListBuffer,iScreenNo); - } - if (reqSize==KErrCancel) - { - aWinList=NULL; - return 0; - } - else - { - aWinList=(TWsDebugWindowId*)iSurfaceListBuffer.Ptr(); - return reqSize/sizeof(TWsDebugWindowId); - } - } -/** - * Stream data into the provided buffer and point the return object pointer to it. - * The pointer is left null if the method returns an error code or the buffer is too small. - * The ret5urn code reports - * - **/ -TInt RWsDebugSession::DebugInfo(TWsDebugInfoFunc aFunction, TInt aParam, TDes8& aHostBuffer,const void*&aReturnedObject,TInt aObjectSize)const - { - aHostBuffer.SetMax(); - TInt reqSize=DebugInfo(aFunction,aHostBuffer,aParam); - aReturnedObject=NULL; - if (reqSize<0) - { - return reqSize; //Error code is transmitted unmolested - } - if (reqSize==0) //Size 0 is transformed to max - reqSize=aHostBuffer.MaxLength(); - if ((reqSize%aObjectSize)!=0) - { //Size not multiple of object --> error - return KErrCorrupt; - } - if (reqSize<=aHostBuffer.MaxLength()) - { //Pointer is only set if data fits buffer - aReturnedObject=(const void*)aHostBuffer.Ptr(); - } - reqSize/=aObjectSize; //Return the exact number of objects filled - return reqSize; - } -/** - * Stream the reply data via the buffer associated with the region. - * Some protected accessor optimisation used to manage the reported size of the region after streaming. - * - **/ -TInt RWsDebugSession::DebugInfo(TWsDebugInfoFunc aFunction, TInt aParam, TRegion& aPreAllocatedReturnedRegion)const - { - //Attempt to fit the received data in the preexisting region buffer... - class XRegion:public TRegion - { - public: - using TRegion::AppendRect; - // using TRegion::SetListSize; - using TRegion::RectangleListW; - TInt MaxSize() - { return iAllocedRects; } - void SetListSize(TInt aNewSize) //DANGER no error checking!!! - { iCount=aNewSize; } - }& preAllocatedReturnedRegion=(XRegion&)aPreAllocatedReturnedRegion; - typedef TRect TElt; - TInt reqSize=preAllocatedReturnedRegion.MaxSize(); - const TElt* elements=preAllocatedReturnedRegion.RectangleListW(); - TInt lenBytes=reqSize*sizeof(TElt); - TPtr8 pBuff((TUint8*)elements,lenBytes,lenBytes); - reqSize=DebugInfo(aFunction,aParam,pBuff,elements); - - if (elements) - { - if (reqSize==0) - { - reqSize=preAllocatedReturnedRegion.MaxSize(); - } - preAllocatedReturnedRegion.SetListSize(reqSize); - return reqSize; - } - //If data does not fit in preexisting buffer - //Use a temp array instead - //Still try to block copy into the existing capacity - //I think this use of region copy is more efficient than appending, - //and definitely better than unioning the elements. - if (reqSize>=0) - { - TInt breakLoop=10; - do { - TElt* tempbuff=new TElt[reqSize]; - if (tempbuff==NULL) - { - reqSize=KErrNoMemory; - break; - } - elements=tempbuff; - TInt lenBytes=reqSize*sizeof(TElt); - TPtr8 pBuff((TUint8*)elements,lenBytes,lenBytes); - TInt reqSize2=DebugInfo(aFunction,aParam,pBuff,elements); - if (reqSize2!=0) - reqSize=reqSize2; - if (elements) - { - RRegion r(reqSize,tempbuff); //note this region does not own its memory so should not be closed! - aPreAllocatedReturnedRegion.Copy(r); - if (aPreAllocatedReturnedRegion.CheckError()) - reqSize=KErrNoMemory; - } - delete[] tempbuff; - }while (reqSize>0 && elements==NULL && --breakLoop); - } - if (reqSize>=0 && elements==NULL) - { - preAllocatedReturnedRegion.ForceError(); - reqSize=KErrTimedOut; - } - if (reqSize<0) - { - if (reqSize==KErrCancel) - { - preAllocatedReturnedRegion.Clear(); - } - else - { - preAllocatedReturnedRegion.ForceError(); - } - - } - return reqSize; - }