diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/inc/huistatictlsdata.h --- /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 iWindowGroups; + RPointerArray 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