diff -r 000000000000 -r 5d03bc08d59c graphicscomposition/surfaceupdate/tsrc/tcompositionbackend.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicscomposition/surfaceupdate/tsrc/tcompositionbackend.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,127 @@ +// Copyright (c) 2006-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 +*/ + + +#if !defined(__TCOMPOSITIONBACKEND_H__) +#define __TCOMPOSITIONBACKEND_H__ + +#include +#include +#include +#include +#include "trequestorder.h" + +/** +The following constants signify the delay in microseconds between two +emulations of composition. During the emulation mock receiver will +process a number of outstanding requests and issues the signal +back to the SUS. Content update receiver with highest priority will process the +requests at highest rate. +*/ +const TInt KCompositionInterval = 1000000 / 20; // for composition threads with normal priority +const TInt KCompositionIntervalLong = KCompositionInterval * 2; // for composition threads with lower priority +const TInt KCompositionIntervalShort = KCompositionInterval / 2; // for composition threads with higher priority + +enum RequestType + { + EReqEmpty = 0, + EReqAvailable, + EReqDisplayed, + EReqDisplayedXTimes, + }; + +class RequestObject + { +public: + RequestType iType; + TRequestStatus* iStatus; + TUint32* iTimeStamp; + TInt iDisplayedXTimes; + }; + +NONSHARABLE_CLASS(CTContentUpdateReceiver) : +public CExtensionContainer, +public MCompositionSurfaceUpdate + { +public: + static CTContentUpdateReceiver* NewL(TInt aScreen); + ~CTContentUpdateReceiver(); + static TInt ThreadFunction(TAny* aAny); + TInt Screen() {return iScreen;} + void Stop(); + void SetCompositionOrder(CRequestOrder* aOrder) { iCompositionOrder = aOrder;} + IMPORT_C void SetVisible(TBool aVisible); + IMPORT_C TInt SetInternalPriority(TThreadPriority aInternalPriority); + inline TBool OutstandingRequest(); //returns ETrue if there are any oustanding requests need to be processed by the mock receiver + + /** + Mark the surface as dirty and request for composition. + The function doesn't take onwership of aRegion + */ + virtual void ContentUpdated(const TSurfaceId& aSurface, + TInt aBuffer, + const TRegion* aRegion, + TRequestStatus* aStatusAvailable, + TRequestStatus* aStatusDisplayed, + TUint32* aTimeStamp, + TRequestStatus* aStatusDispXTimes, + TInt* aDisplayedXTimes); + + virtual void Delete(void){} + virtual TInt ApiVersion(void) {return 0;} + virtual TVersion InternalVersion(void){return TVersion();} +protected: //From CBase + virtual TInt Extension_(TUint aExtensionId, TAny*& a0, TAny* a1); +private: + CTContentUpdateReceiver(TInt aScreen); + void ConstructL(); + TInt CheckNewNotifications(); + void DoSetInternalPriorityL(); + static TInt CallBack(TAny *aAny); + TInt Add(TRequestStatus *aStatus, RequestType aType, + TInt aDisplayedXTimes = 1, TUint32* aTimeStamp = NULL); + void Remove(TInt aIndex); +private: + TThreadId iThreadId; //thread from which ContentUpdated is called + TThreadId iReceiverThreadId; + TBool iStop; + TInt iScreen; + CPeriodic* iPeriodic; + RequestObject iArray[1024]; //should be big enough + TInt iNumberElements; + TBool iVisible; + TBool iSetInternalPriority; + TThreadPriority iInternalPriority; + CRequestOrder* iCompositionOrder; + RFastLock iLock; + RSemaphore iPriorityLock; + }; + +IMPORT_C TInt StartTestUpdateReceiver(CTContentUpdateReceiver*& aReceiver, TInt aScreen); +IMPORT_C void CloseTestUpdateReceiver(CTContentUpdateReceiver* aReceiver); + + + +inline TBool CTContentUpdateReceiver::OutstandingRequest() + { return iNumberElements > 0;} + + +#endif // __TCOMPOSITIONBACKEND_H__