uiacceltk/hitchcock/ServerCore/Inc/alfappsrvsession.h
changeset 0 15bf7259bb7c
child 6 10534483575f
--- /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 <e32hashtab.h>
+#include <alf/alfappsrvsessionbase.h>
+#include <uiacceltk/HuiEnv.h>
+#include <uiacceltk/huigifanimationtexture.h>
+#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<CAlfSrvSubSessionBase>& 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<CBase> iOwnershipItems; 
+    RPointerArray<CHuiTexture> iTextures;
+    RPointerArray<CHuiGifAnimationTexture> 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<TUint32,TFrameStamp> iFPSMeasurementArray;
+    
+    RPointerArray<CHuiControlGroup> iControlGroupOrder;
+    };
+
+#endif // C_ALFAPPSRVSESSION_H