diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/ServerCore/Inc/alfappsrvsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfappsrvsession.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,472 @@ +/* +* Copyright (c) 2006 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: Server session +* +*/ + + + +#ifndef C_ALFAPPSRVSESSION_H +#define C_ALFAPPSRVSESSION_H + +#include +#include +#include +#include +#include "malfsrvtexturemanagerclient.h" +#include "alfframestamp.h" + +class CHuiControl; +class CHuiLayout; +class CAlfSrvEffectEnv; +class THuiTexturePreferredProperties; +class CAlfSrvTextureManager; + +/** + * Session/service class in the server side. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS(CAlfAppSrvSession) + : public CAlfAppSrvSessionBase, + public MWindowVisibilityObserver, + private MAlfSrvTextureManagerClient + { +public: + + /** + * Destructor, singals server to free resources specific for this client + */ + ~CAlfAppSrvSession(); + + /** + * Public, two phased constructor, stores pointer to server instance + * + * @param aServer Server which the client has connected. + */ + static CAlfAppSrvSession* NewL(const CAlfAppServer* aServer); + + + /** + * Gets the drawing area of the session + * + * @return TRect of the drawing area + */ + TRect ClientDrawingArea() const; + + /** + * Sets the drawint area. This is set by the display sub session + * + * @param aRect Drawing area rect. + */ + void SetClientDrawingArea( const TRect& aRect ); + + /** + * Sets the drawint area. This is set by the display sub session + * + * @param aRect Drawing area rect. + */ + void SetClientDrawingAreaL( const TRect& aRect ); + + /** + * Is client application focused? + * + * @return ETrue if client application is focused. + */ + TBool IsFocused() const; + + /** + * Sets session's max fps limiter to half, used if client's window does not have keyboard focus + * @param aOnBackground use lowered max fps (ETrue/EFalse) + */ + void SetBackgroundMaxFps( TBool aOnBackground ); + +// from CAlfAppSrvSessionBase + /** + * From CAlfAppSrvSessionBase + * Called when a message is received from the client. + * + * @param aMessage Message parameters. + */ + void DoHandleCommandL(const RMessage2& aMessage); + + /** + * From CAlfAppSrvSessionBase + * Client's window group received focus. + * + * @param aDoTransitionEffect Do fade in transision (RnD) + */ + void FocusGainedL( TBool aDoTransitionEffect ); + + /** + * From CAlfAppSrvSessionBase + * Client's window group lost focus. + * + * @param aDoTransitionEffect Do fade out transision (RnD) + * @return Did transition? (RnD) + */ + TBool FocusLostL( TBool aDoTransitionEffect ); + + /** + * From CAlfAppSrvSessionBase + * Returns the preferred window group posistion. + * + * @return WG position + */ + CAlfAppServer::TAlfWGPostion PreferredWindowGroupPosition() const; + + /** + * Returns the preferred refresh mode of the session. + * + * @return Preferred refresh mode. + */ + THuiRefreshMode PreferredRefreshMode() const; + + void ReOrderControlGroupSessionsL( RPointerArray& aGroupSessions ); + + +// from MWindowVisibilityObserver + /** + * From MWindowVisibilityObserver + * Called when window becomes fully visible + */ + void WindowFullyVisible(); + + /** + * From MWindowVisibilityObserver + * Called when window becomes partially visible + */ + void WindowPartiallyVisible(); + + /** + * From MWindowVisibilityObserver + * Called when window losts visibility. + */ + void WindowNotVisible(); + + /** + * From MWindowVisibilityObserver + * Returns the control witch creates the window (CHuiDisplayCoeControl) + * @return Contorol. NULL if not have one. Ownership not transferred. + */ + CCoeControl* CoeControl(); + +private: + + /** + * Default constructor, stores pointer to server instance + * + * @param aServer Server which the client has connected. + */ + CAlfAppSrvSession(const CAlfAppServer* aServer); + + /** + * Second phase constructor + */ + void ConstructL(); + + void EnvSetRefreshModeL(const RMessage2& aMessage); + void EnvSetMaxFrameRateL(const RMessage2& aMessage); + void EnvContinueRefreshL(const RMessage2& aMessage); + void EnvPauseRefreshL(const RMessage2& aMessage); + void EnvRefreshCallBackL(const RMessage2& aMessage); + void EnvSetIdleThresholdL(const RMessage2& aMessage); + void EnvRendererL(const RMessage2& aMessage); + //void BorderArrayAppendBrushL(const RMessage2& aMessage); + void RosterHideL(const RMessage2& aMessage); + void RosterShowVisualL(const RMessage2& aMessage); + void RosterHideVisualL(const RMessage2& aMessage); + void RosterMoveVisualToFrontL(const RMessage2& aMessage); + void RosterSetPointerEventFlagsL(const RMessage2& aMessage); + void RosterAddPointerEventObserverL(const RMessage2& aMessage); + void RosterRemovePointerEventObserverL(const RMessage2& aMessage); + void RosterSetPointerDragTresholdL(const RMessage2& aMessage); + void RosterDisableLongTapEventWhenDraggingL(const RMessage2& aMessage); + void TextureCreateAnimatedL(const RMessage2& aMessage); + void TextureStartAnimation(const RMessage2& aMessage); + void TextureStopAnimation(const RMessage2& aMessage); + void TextureCreateL(const RMessage2& aMessage); + void TextureLoadL(const RMessage2& aMessage); + void TextureUnload(const RMessage2& aMessage); + void TextureDelete(const RMessage2& aMessage); + void TextureRelease(const RMessage2& aMessage); + void TextureRestore(const RMessage2& aMessage); + void TextureNotifySkinChanged(const RMessage2& aMessage); + void TextureBlurL(const RMessage2& aMessage); + void TextureHasContentL(const RMessage2& aMessage); + void TextureSetAutoSizeParamsL(const RMessage2& aMessage); + void LayoutMetricsTextStyleDataL(const RMessage2& aMessage); + + void DoFocusLostEffect(TInt aEffect, CHuiVisual& aRootVisual ); + void DoFocusGainedEffect(TInt aEffect, CHuiVisual& aRootVisual ); + + /** + * Checks that texture owner id has been updated. + * @param aMessage message. + * @return ETrue if it's ok to continue, EFalse otherwise. + */ + TBool RequireTextureOwnerId(const RMessage2& aMessage); + + /** + * Updates @c iTextureOwnedId. + * This method must be called successfully before @c TextureOwnerId + * method can be called. + * @param aMessage message. + */ + void UpdateTextureOwnerIdL(const RMessage2& aMessage); + + /** + * Returns texture owner id. + * This method must not be called before @c UpdateTextureOwnerIdL + * has been called successfully. + * @return texture owner id. + */ + inline TProcessId TextureOwnerId() const; + + /** + * Configure batch commands execution. + * This is used by unit tests in order to test all branches. + * @param aMessage message containing configuration. + */ + void ConfigureBatchCommandExecutionL( const RMessage2& aMessage ); + + /** + * Executes batch commands. + * @param aMessage message to be executed. + */ + void ExecuteBatchCommandsL( const RMessage2& aMessage ); + + /** + * Executes batch commands using dynamic buffer, i.e. common buffer or memory allocated. + * @param aMessage message to be executed. + * @return ETrue if command was executed, EFalse if not. + */ + TBool ExecuteBatchCommandsUsingDynamicBufferL( const RMessage2& aMessage ); + + /** + * Executes batch commands using fixed buffer, i.e. common buffer or stack allocated. + * @param aMessage message to be executed. + */ + void ExecuteBatchCommandsUsingFixedBufferL( const RMessage2& aMessage ); + + /** + * Executes commands using specified buffer. + * @param aBuffer buffer to be used. + * @param aMessageLength message length. + * @param aMessage message to be executed. + * @return amount of bytes executed commands took. + */ + TInt ExecuteBatchCommandsUsingBufferL( + TDes8& aBuffer, TInt aMessageLength, const RMessage2& aMessage ); + + /** + * Execute commands from descriptor. + * @param aDescriptor descriptor which contains commands. + * @param aSpaceNeeded this will be updated to contain value + * indicating how much space is needed. + * @return amount of bytes executed commands took. + */ + TInt ExecuteCommandsFromDescriptorL( + const TDesC8& aSource, + TInt& aSpaceNeeded ); + + /** + * Checks whether it is allowed to execute using dynamic buffer. + * @return ETrue if it's allowed, EFalse otherwise. + */ + inline TBool AllowExecuteUsingDynamicBuffer() const; + + /** + * Checks whether it is allowed to execute using common buffer. + * @return ETrue if it's allowed, EFalse otherwise. + */ + inline TBool AllowExecuteUsingCommonBuffer() const; + + /** + * Returns reference to texture manager. + * @return reference to texture manager. + */ + inline CAlfSrvTextureManager& AlfTextureManager(); + + /** + * Starts waiting for texture information for client. + */ + void NotifyTextureInfo( const RMessage2& aMessage ); + + /** + * Checks if this session has pending texture information to be + * delivered to client side. + */ + inline TBool HasPendingTextureInfo() const; + + /** + * Tries to deliver texture info to client. + */ + void DeliverTextureInfo(); + + /** + * Finds position of next texture info for delivery. + * @param aPriority priority to look for (0 or 1). + * @return position, or KErrNotFound if not found. + */ + TInt FindNextTextureInfoForDelivery( + TInt aPriority, TInt aStartPos ) const; + + /** + * Finds texture info structure position by texture id. + * @param aTextureId texture id to be searched. + * @return position, or KErrNotFound if not found. + */ + TInt FindTextureInfoById( TInt aTextureId ) const; + + /** + * Removes texture info based on id. + * @param aTextureId texture id + */ + void RemoveTextureInfo( TInt aTextureId ); + + void ShowControlGroupsInOrderL(CHuiDisplay& aDisplay); + void StoreControlGroupOrderL(CHuiDisplay& aDisplay, TBool aAlsoHide ); + + /** + * Post QT drawing command buffer to CanvasVisual + */ + void PostQtCommandBufferL( const RMessage2& aMessage ); + + + /* + * Frame rate reporting enablers + */ + void ReportFrameRateBegin( const RMessage2& aMessage ); + + void ReportFrameRateEnd( const RMessage2& aMessage ); + +// from base class MAlfSrvTextureManagerClient + + virtual TBool GetTextureSize( + TInt aTextureId, + TSize& aTextureSize, + TBool& aHasBeenDelivered ); + virtual void SetTextureSize( + TInt aTextureId, + const TSize& aTextureSize, + TInt aPriority ); + virtual void RemoveTextureSize( TInt aTextureId ); + virtual void TextureSizeChangesCompleted(); + + void EnvEnableLowMemoryState(const RMessage2& aMessage); + void EnvForceSwRendering(const RMessage2& aMessage); + +private: + + // Owned items which need to be deleted with the session is terminated. + RPointerArray iOwnershipItems; + RPointerArray iTextures; + RPointerArray iAnimatedTextures; + + // Is client the focused window group? + TBool iFocused; + + // Is client partially visible (matters only if iFocused = EFalse ) + TBool iPartiallyVisible; + + // Refresh mode + THuiRefreshMode iRefreshMode; + + // Max frame rate + TReal32 iMaxFrameRate; + + // Idle threshold + TInt iIdleThreshold; + + TBool iUsesFullScreen; + + TRect iClientDisplayRect; + + CAlfSrvEffectEnv* iEffectEnv; + + /** + * ETrue if @c iTextureOwnerId contains valid value. + * EFalse otherwise. + */ + TBool iTextureOwnedIdSet; + + /** + * Texture owner id. + * This contains valid value only if @c iTextureOwnedIdSet + * is set to true. + */ + TProcessId iTextureOwnerId; + + enum TAlfExecutionFlags + { + // Allow execution using dynammic buffer. + EAlfExecuteUsingDynamicBuffer = 0x1, + // Allow execution using common buffer. + EAlfExecuteUsingCommonBuffer = 0x2 + }; + + // Current execution flags, see TAlfExecutionFlags. + TInt iExecutionFlags; + + /** + * Texture info observer event. + */ + RMessagePtr2 iTextureInfoEvent; + + /** + * Structure containing information about a texture. + */ + struct TAlfTextureInfo + { + enum TAlfTextureInfoFlags + { + // Indicates that size has been changed + // and new size should be (eventually) + // be delivered to client. + EAlfFlagTextureSizeChanged = 1, + // Indicates that texture size has been + // delivered to client. + EAlfFlagTextureDelivered = 2 + }; + + // Flags. Sum of subset of TAlfTextureInfoFlags. + TInt8 iFlags; + // Delivery priority. The smaller the value + // the higher the priority. + TInt8 iDeliveryPriority; + // Client side texture id. + TInt iTextureId; + // New texture size. + TSize iTextureSize; + }; + + /** + * Array of texture information. + * Own. + */ + RArray< TAlfTextureInfo > iTextureInfo; + + /** + * Previous index used for iTextureInfo + */ + mutable TInt iPreviousTextureInfoIndex; + + // Contains references to all ongoing FPS measurements + RHashMap iFPSMeasurementArray; + + RPointerArray iControlGroupOrder; + }; + +#endif // C_ALFAPPSRVSESSION_H