uiacceltk/hitchcock/coretoolkit/inc/huistatictlsdata.h
changeset 0 15bf7259bb7c
child 10 88b23e2e82e1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/inc/huistatictlsdata.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2006-2007 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:   Declares the private data stored to the thread local storage
+*                by CHuiStatic.
+*
+*/
+
+
+
+#ifndef __HUISTATICTLSDATA_H__
+#define __HUISTATICTLSDATA_H__
+
+
+LOCAL_D const TInt KMaxClocks = 10;
+
+
+class TFakeProbe;
+class CAppFwProxy;
+/**
+ * Thread local storage space. Writable static data is not supported in
+ * Symbian, so static data is stored in this struct.
+ */
+
+extern void CleanupWg(TAny* aWg);
+
+NONSHARABLE_STRUCT(TTlsData)
+    {
+    CHuiRenderPlugin* iRenderer;
+
+    /** The render surface that has been made current. */
+    MHuiRenderSurface* iCurrentRenderSurface;
+
+    /** Primary environment. */
+    CHuiEnv* iPrimaryEnv;
+
+    /** Realtime clock. */
+    TTime iRealUniversalTime;
+
+    /** Internal absolute clock. */
+    TTime iUniversalTime;
+
+    /** Flags that tells if this the first time update is done. */
+    TBool iIsFirstUpdateTime;
+
+    /** Time of the first invocation of UpdateTime. */
+    TTime iFirstUpdateTime;
+
+    /** Microseconds elapsed in the internal absolute clock since the last
+        UpdateTime(). */
+    TInt64 iInternalElapsed;
+    
+    /** Microseconds elapsed from previous update time until pause was called. */
+    TInt64 iInternalElapsedBeforePausing;
+
+    /** Time pause flag. */
+    TBool iTimePaused;
+
+    /** Time factor. */
+    TReal32 iTimeFactor;
+
+    /** Counter for unique identifier numbers. */
+    TInt iIdCounter;
+
+    /** Frame counter since application started. */
+    TUint iFrameCounter;
+    
+    /** Frames counted since FPS was last calculated. */
+    TUint iCurrentFrameCounter;
+
+    /** Time when the first frame was shown. */
+    //TTime iFirstFrameTime;
+
+    //TTime iPreviousFrameTime;
+
+    /** Time when the current frame rate was last calculated. */
+    TTime iLastFpsTime;
+
+    /** The last recorded FPS. */
+    TReal32 iLastFps;
+
+    /** Message logger. */
+    RFile iLogFile;
+    TBool iLogEnabled;
+
+    /** A list of clocks used for timing events.*/
+    TTime iClocks[KMaxClocks];
+
+    /** How long it takes, in milliseconds, for a layout transition to complete. */
+    TInt iLayoutTransitionTime;
+    
+    MHuiProbe* iProbe;
+    TFakeProbe* iFakeProbe;
+
+    // Shared 
+    RWsSession* iWsSession;
+    RPointerArray<RWindowGroup> iWindowGroups;
+    RPointerArray<CWsScreenDevice> iScreenDevices;    
+    RFs* iFs;
+    
+    CAppFwProxy* iAppFwProxy;
+   
+    CWsScreenDevice* WsScreenDevice(TInt aScreenNumber)
+        {
+        if (aScreenNumber < iScreenDevices.Count())
+            {
+            return iScreenDevices[aScreenNumber];
+            }
+        return 0;
+        }       
+    
+    RWindowGroup* RootWin(TInt aScreenNumber)
+        {
+        if (aScreenNumber < iWindowGroups.Count())
+            {
+            return iWindowGroups[aScreenNumber];
+            }
+        return 0;
+        }       
+      
+    TTlsData():
+        iRenderer(0),iCurrentRenderSurface(0),iPrimaryEnv(0),iIsFirstUpdateTime(0),
+        iInternalElapsed(0),iInternalElapsedBeforePausing(0),iTimePaused(0),iTimeFactor(0),
+        iIdCounter(0),iFrameCounter(0),iCurrentFrameCounter(0),iLastFps(0),iLogEnabled(0),
+        iLayoutTransitionTime(0),iProbe(0),iFakeProbe(0),iWsSession(0),iFs(0),iAppFwProxy(0)
+        {  
+        }
+                
+     void DoInitL()
+        {
+        CCoeEnv* coe = CCoeEnv::Static();
+        if (coe)
+            {
+            iWsSession = &coe->WsSession();
+            iFs = &coe->FsSession();
+            iScreenDevices.Append(coe->ScreenDevice()); // Todo: Multiple display support    
+            iWindowGroups.Append(&coe->RootWin()); // Todo: Multiple display support    
+            return;
+            }
+            
+        if(!RFbsSession::GetSession())  
+            {
+            User::LeaveIfError(RFbsSession::Connect());
+            }
+
+        iFs = new (ELeave) RFs;
+        User::LeaveIfError(iFs->Connect());    
+        
+        iWsSession = new (ELeave) RWsSession;
+        User::LeaveIfError(iWsSession->Connect());    
+        
+        CWsScreenDevice* screenDevice =new(ELeave) CWsScreenDevice(*iWsSession);
+        CleanupStack::PushL(screenDevice); 
+        User::LeaveIfError(screenDevice->Construct(0)); // For main display only
+        User::LeaveIfError(iScreenDevices.Append(screenDevice));
+        CleanupStack::Pop();
+        
+        RWindowGroup* windowGroup = new(ELeave) RWindowGroup(*iWsSession);
+        CleanupStack::PushL(TCleanupItem(CleanupWg, (TAny*)windowGroup)); 
+        User::LeaveIfError(windowGroup->Construct((TUint32)screenDevice, EFalse,screenDevice));                   
+        CleanupClosePushL(*windowGroup);
+        User::LeaveIfError(iWindowGroups.Append(windowGroup));
+        CleanupStack::Pop(2);
+        }
+
+    void Disconnect()
+        {
+        if (CCoeEnv::Static())
+            {
+            iWindowGroups.Close();
+            iScreenDevices.Close();
+            return;
+            }
+        
+        for(;iWindowGroups.Count();)
+            {    
+            iWindowGroups[0]->Close();
+            delete iWindowGroups[0];
+            iWindowGroups.Remove(0);
+            }
+            
+        for(;iScreenDevices.Count();)
+            {
+            delete iScreenDevices[0];
+            iScreenDevices.Remove(0);
+            }
+        
+        if (iWsSession)
+            iWsSession->Close();        
+        delete iWsSession;
+        iWsSession = 0;
+        
+        if (iFs)
+            iFs->Close();        
+        delete iFs;
+        iFs = 0;
+
+        RFbsSession::Disconnect();
+        }
+    };
+
+
+#endif