summaryrefslogtreecommitdiff
path: root/indra/newview/llappviewer.h
diff options
context:
space:
mode:
authorAnsariel <ansariel.hiller@phoenixviewer.com>2024-05-22 19:04:52 +0200
committerAnsariel <ansariel.hiller@phoenixviewer.com>2024-05-22 19:04:52 +0200
commit1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch)
treeab243607f74f78200787bba5b9b88f07ef1b966f /indra/newview/llappviewer.h
parent6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff)
parente1623bb276f83a43ce7a197e388720c05bdefe61 (diff)
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts: # autobuild.xml # indra/cmake/CMakeLists.txt # indra/cmake/GoogleMock.cmake # indra/llaudio/llaudioengine_fmodstudio.cpp # indra/llaudio/llaudioengine_fmodstudio.h # indra/llaudio/lllistener_fmodstudio.cpp # indra/llaudio/lllistener_fmodstudio.h # indra/llaudio/llstreamingaudio_fmodstudio.cpp # indra/llaudio/llstreamingaudio_fmodstudio.h # indra/llcharacter/llmultigesture.cpp # indra/llcharacter/llmultigesture.h # indra/llimage/llimage.cpp # indra/llimage/llimagepng.cpp # indra/llimage/llimageworker.cpp # indra/llimage/tests/llimageworker_test.cpp # indra/llmessage/tests/llmockhttpclient.h # indra/llprimitive/llgltfmaterial.h # indra/llrender/llfontfreetype.cpp # indra/llui/llcombobox.cpp # indra/llui/llfolderview.cpp # indra/llui/llfolderviewmodel.h # indra/llui/lllineeditor.cpp # indra/llui/lllineeditor.h # indra/llui/lltextbase.cpp # indra/llui/lltextbase.h # indra/llui/lltexteditor.cpp # indra/llui/lltextvalidate.cpp # indra/llui/lltextvalidate.h # indra/llui/lluictrl.h # indra/llui/llview.cpp # indra/llwindow/llwindowmacosx.cpp # indra/newview/app_settings/settings.xml # indra/newview/llappearancemgr.cpp # indra/newview/llappearancemgr.h # indra/newview/llavatarpropertiesprocessor.cpp # indra/newview/llavatarpropertiesprocessor.h # indra/newview/llbreadcrumbview.cpp # indra/newview/llbreadcrumbview.h # indra/newview/llbreastmotion.cpp # indra/newview/llbreastmotion.h # indra/newview/llconversationmodel.h # indra/newview/lldensityctrl.cpp # indra/newview/lldensityctrl.h # indra/newview/llface.inl # indra/newview/llfloatereditsky.cpp # indra/newview/llfloatereditwater.cpp # indra/newview/llfloateremojipicker.h # indra/newview/llfloaterimsessiontab.cpp # indra/newview/llfloaterprofiletexture.cpp # indra/newview/llfloaterprofiletexture.h # indra/newview/llgesturemgr.cpp # indra/newview/llgesturemgr.h # indra/newview/llimpanel.cpp # indra/newview/llimpanel.h # indra/newview/llinventorybridge.cpp # indra/newview/llinventorybridge.h # indra/newview/llinventoryclipboard.cpp # indra/newview/llinventoryclipboard.h # indra/newview/llinventoryfunctions.cpp # indra/newview/llinventoryfunctions.h # indra/newview/llinventorygallery.cpp # indra/newview/lllistbrowser.cpp # indra/newview/lllistbrowser.h # indra/newview/llpanelobjectinventory.cpp # indra/newview/llpanelprofile.cpp # indra/newview/llpanelprofile.h # indra/newview/llpreviewgesture.cpp # indra/newview/llsavedsettingsglue.cpp # indra/newview/llsavedsettingsglue.h # indra/newview/lltooldraganddrop.cpp # indra/newview/llurllineeditorctrl.cpp # indra/newview/llvectorperfoptions.cpp # indra/newview/llvectorperfoptions.h # indra/newview/llviewerparceloverlay.cpp # indra/newview/llviewertexlayer.cpp # indra/newview/llviewertexturelist.cpp # indra/newview/macmain.h # indra/test/test.cpp
Diffstat (limited to 'indra/newview/llappviewer.h')
-rw-r--r--indra/newview/llappviewer.h820
1 files changed, 410 insertions, 410 deletions
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 01f62220f4..fc13fd9093 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -1,410 +1,410 @@
-/**
- * @mainpage
- * @mainpage
- *
- * This is the sources for the Second Life Viewer;
- * information on the open source project is at
- * https://wiki.secondlife.com/wiki/Open_Source_Portal
- *
- * The Mercurial repository for the trunk version is at
- * https://bitbucket.org/lindenlab/viewer-release
- *
- * @section source-license Source License
- * @verbinclude LICENSE-source.txt
- *
- * @section artwork-license Artwork License
- * @verbinclude LICENSE-logos.txt
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- *
- * @file llappviewer.h
- * @brief The LLAppViewer class declaration
- */
-
-#ifndef LL_LLAPPVIEWER_H
-#define LL_LLAPPVIEWER_H
-
-#include "llallocator.h"
-#include "llapr.h"
-#include "llcontrol.h"
-#include "llsys.h" // for LLOSInfo
-#include "lltimer.h"
-#include "llappcorehttp.h"
-#include "threadpool_fwd.h"
-
-#include <boost/signals2.hpp>
-
-class LLCommandLineParser;
-class LLFrameTimer;
-class LLPumpIO;
-class LLTextureCache;
-class LLImageDecodeThread;
-class LLTextureFetch;
-class LLWatchdogTimeout;
-class LLViewerJoystick;
-class LLPurgeDiskCacheThread;
-class LLViewerRegion;
-
-extern LLTrace::BlockTimerStatHandle FTM_FRAME;
-
-class LLAppViewer : public LLApp
-{
-public:
- LLAppViewer();
- virtual ~LLAppViewer();
-
- /**
- * @brief Access to the LLAppViewer singleton.
- *
- * The LLAppViewer singleton is created in main()/WinMain().
- * So don't use it in pre-entry (static initialization) code.
- */
- static LLAppViewer* instance() {return sInstance; }
-
- //
- // Main application logic
- //
- virtual bool init(); // Override to do application initialization
- virtual bool cleanup(); // Override to do application cleanup
- virtual bool frame(); // Override for application body logic
-
- // Application control
- void flushLFSIO(); // waits for lfs transfers to complete
- void forceQuit(); // Puts the viewer into 'shutting down without error' mode.
- void fastQuit(S32 error_code = 0); // Shuts down the viewer immediately after sending a logout message
- void requestQuit(); // Request a quit. A kinder, gentler quit.
- void userQuit(); // The users asks to quit. Confirm, then requestQuit()
- void earlyExit(const std::string& name,
- const LLSD& substitutions = LLSD()); // Display an error dialog and forcibly quit.
- void earlyExitNoNotify(); // Do not display error dialog then forcibly quit.
- void abortQuit(); // Called to abort a quit request.
-
- bool quitRequested() { return mQuitRequested; }
- bool logoutRequestSent() { return mLogoutRequestSent; }
- bool isSecondInstance() { return mSecondInstance; }
- bool isUpdaterMissing(); // In use by tests
- bool waitForUpdater();
-
- void writeDebugInfo(bool isStatic=true);
-
- void setServerReleaseNotesURL(const std::string& url) { mServerReleaseNotesURL = url; }
- LLSD getViewerInfo() const;
- std::string getViewerInfoString(bool default_string = false) const;
-
- // Report true if under the control of a debugger. A null-op default.
- virtual bool beingDebugged() { return false; }
-
- virtual bool restoreErrorTrap() = 0; // Require platform specific override to reset error handling mechanism.
- // return false if the error trap needed restoration.
- void checkForCrash();
-
- // Thread accessors
- static LLTextureCache* getTextureCache() { return sTextureCache; }
- static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; }
- static LLTextureFetch* getTextureFetch() { return sTextureFetch; }
- static LLPurgeDiskCacheThread* getPurgeDiskCacheThread() { return sPurgeDiskCacheThread; }
-
- static U32 getTextureCacheVersion() ;
- static U32 getObjectCacheVersion() ;
- static U32 getDiskCacheVersion() ;
-
- const std::string& getSerialNumber() { return mSerialNumber; }
-
- bool getPurgeCache() const { return mPurgeCache; }
-
- std::string getSecondLifeTitle() const; // The Second Life title.
- std::string getWindowTitle() const; // The window display name.
-
- void forceDisconnect(const std::string& msg); // Force disconnection, with a message to the user.
- void badNetworkHandler(); // Cause a crash state due to bad network packet.
-
- bool hasSavedFinalSnapshot() { return mSavedFinalSnapshot; }
- void saveFinalSnapshot();
-
- void loadNameCache();
- void saveNameCache();
-
- void loadExperienceCache();
- void saveExperienceCache();
-
- void removeMarkerFiles();
-
- void removeDumpDir();
- // LLAppViewer testing helpers.
- // *NOTE: These will potentially crash the viewer. Only for debugging.
- virtual void forceErrorLLError();
- virtual void forceErrorLLErrorMsg();
- virtual void forceErrorBreakpoint();
- virtual void forceErrorBadMemoryAccess();
- virtual void forceErrorInfiniteLoop();
- virtual void forceErrorSoftwareException();
- virtual void forceErrorOSSpecificException();
- virtual void forceErrorDriverCrash();
- virtual void forceErrorCoroutineCrash();
- virtual void forceErrorThreadCrash();
-
- // The list is found in app_settings/settings_files.xml
- // but since they are used explicitly in code,
- // the follow consts should also do the trick.
- static const std::string sGlobalSettingsName;
-
- LLCachedControl<bool> mRandomizeFramerate;
- LLCachedControl<bool> mPeriodicSlowFrame;
-
- // Load settings from the location specified by loction_key.
- // Key availale and rules for loading, are specified in
- // 'app_settings/settings_files.xml'
- bool loadSettingsFromDirectory(const std::string& location_key,
- bool set_defaults = false);
-
- std::string getSettingsFilename(const std::string& location_key,
- const std::string& file);
- void loadColorSettings();
-
- // For thread debugging.
- // llstartup needs to control init.
- // llworld, send_agent_pause() also controls pause/resume.
- void initMainloopTimeout(const std::string& state, F32 secs = -1.0f);
- void destroyMainloopTimeout();
- void pauseMainloopTimeout();
- void resumeMainloopTimeout(const std::string& state = "", F32 secs = -1.0f);
- void pingMainloopTimeout(const std::string& state, F32 secs = -1.0f);
-
- // Handle the 'login completed' event.
- // *NOTE:Mani Fix this for login abstraction!!
- void handleLoginComplete();
-
- LLAllocator & getAllocator() { return mAlloc; }
-
- // On LoginCompleted callback
- typedef boost::signals2::signal<void (void)> login_completed_signal_t;
- login_completed_signal_t mOnLoginCompleted;
- boost::signals2::connection setOnLoginCompletedCallback( const login_completed_signal_t::slot_type& cb )
- {
- return mOnLoginCompleted.connect(cb);
- }
-
- void addOnIdleCallback(const boost::function<void()>& cb); // add a callback to fire (once) when idle
-
- void initGeneralThread();
- void purgeUserDataOnExit() { mPurgeUserDataOnExit = true; }
- void purgeCache(); // Clear the local cache.
- void purgeCacheImmediate(); //clear local cache immediately.
- S32 updateTextureThreads(F32 max_time);
-
- void loadKeyBindings();
-
- // mute/unmute the system's master audio
- virtual void setMasterSystemAudioMute(bool mute);
- virtual bool getMasterSystemAudioMute();
-
- // Metrics policy helper statics.
- static void metricsUpdateRegion(U64 region_handle);
- static void metricsSend(bool enable_reporting);
-
- // llcorehttp init/shutdown/config information.
- LLAppCoreHttp & getAppCoreHttp() { return mAppCoreHttp; }
-
- void updateNameLookupUrl(const LLViewerRegion* regionp);
-
-protected:
- virtual bool initWindow(); // Initialize the viewer's window.
- virtual void initLoggingAndGetLastDuration(); // Initialize log files, logging system
- virtual void initConsole() {}; // Initialize OS level debugging console.
- virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
- virtual bool initSLURLHandler();
- virtual bool sendURLToOtherInstance(const std::string& url);
-
- virtual bool initParseCommandLine(LLCommandLineParser& clp)
- { return true; } // Allow platforms to specify the command line args.
-
- virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.
-
- virtual bool meetsRequirementsForMaximizedStart(); // Used on first login to decide to launch maximized
-
-private:
-
- bool doFrame();
-
- void initMaxHeapSize();
- bool initThreads(); // Initialize viewer threads, return false on failure.
- bool initConfiguration(); // Initialize settings from the command line/config file.
- void initStrings(); // Initialize LLTrans machinery
- bool initCache(); // Initialize local client cache.
-
- // We have switched locations of both Mac and Windows cache, make sure
- // files migrate and old cache is cleared out.
- void migrateCacheDirectory();
-
- void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup.
- void removeCacheFiles(const std::string& filemask); // Deletes cached files the match the given wildcard.
-
- void writeSystemInfo(); // Write system info to "debug_info.log"
-
- void processMarkerFiles();
- static void recordMarkerVersion(LLAPRFile& marker_file);
- bool markerIsSameVersion(const std::string& marker_name) const;
-
- void idle();
- void idleShutdown();
- // update avatar SLID and display name caches
- void idleNameCache();
- void idleNetwork();
-
- void sendLogoutRequest();
- void disconnectViewer();
-
- // *FIX: the app viewer class should be some sort of singleton, no?
- // Perhaps its child class is the singleton and this should be an abstract base.
- static LLAppViewer* sInstance;
-
- bool mSecondInstance; // Is this a second instance of the app?
- bool mUpdaterNotFound; // True when attempt to start updater failed
-
- std::string mMarkerFileName;
- LLAPRFile mMarkerFile; // A file created to indicate the app is running.
-
- std::string mLogoutMarkerFileName;
- LLAPRFile mLogoutMarkerFile; // A file created to indicate the app is running.
-
- bool mReportedCrash;
-
- std::string mServerReleaseNotesURL;
-
- // Thread objects.
- static LLTextureCache* sTextureCache;
- static LLImageDecodeThread* sImageDecodeThread;
- static LLTextureFetch* sTextureFetch;
- static LLPurgeDiskCacheThread* sPurgeDiskCacheThread;
- LL::ThreadPool* mGeneralThreadPool;
-
- S32 mNumSessions;
-
- std::string mSerialNumber;
- bool mPurgeCache;
- bool mPurgeCacheOnExit;
- bool mPurgeUserDataOnExit;
- LLViewerJoystick* joystick;
-
- bool mSavedFinalSnapshot;
- bool mSavePerAccountSettings; // only save per account settings if login succeeded
-
- boost::optional<U32> mForceGraphicsLevel;
-
- bool mQuitRequested; // User wants to quit, may have modified documents open.
- bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim.
- U32 mLastAgentControlFlags;
- F32 mLastAgentForceUpdate;
- struct SettingsFiles* mSettingsLocationList;
-
- LLWatchdogTimeout* mMainloopTimeout;
-
- // For performance and metric gathering
- class LLThread* mFastTimerLogThread;
-
- // for tracking viewer<->region circuit death
- bool mAgentRegionLastAlive;
- LLUUID mAgentRegionLastID;
-
- LLAllocator mAlloc;
-
- // llcorehttp library init/shutdown helper
- LLAppCoreHttp mAppCoreHttp;
-
- bool mIsFirstRun;
-};
-
-// consts from viewer.h
-const S32 AGENT_UPDATES_PER_SECOND = 10;
-const S32 AGENT_FORCE_UPDATES_PER_SECOND = 1;
-
-// Globals with external linkage. From viewer.h
-// *NOTE:Mani - These will be removed as the Viewer App Cleanup project continues.
-//
-// "// llstartup" indicates that llstartup is the only client for this global.
-
-extern LLSD gDebugInfo;
-extern bool gShowObjectUpdates;
-
-typedef enum
-{
- LAST_EXEC_NORMAL = 0,
- LAST_EXEC_FROZE,
- LAST_EXEC_LLERROR_CRASH,
- LAST_EXEC_OTHER_CRASH,
- LAST_EXEC_LOGOUT_FROZE,
- LAST_EXEC_LOGOUT_CRASH
-} eLastExecEvent;
-
-extern eLastExecEvent gLastExecEvent; // llstartup
-extern S32 gLastExecDuration; ///< the duration of the previous run in seconds (<0 indicates unknown)
-
-extern const char* gPlatform;
-
-extern U32 gFrameCount;
-extern U32 gForegroundFrameCount;
-
-extern LLPumpIO* gServicePump;
-
-extern U64MicrosecondsImplicit gStartTime;
-extern U64MicrosecondsImplicit gFrameTime; // The timestamp of the most-recently-processed frame
-extern F32SecondsImplicit gFrameTimeSeconds; // Loses msec precision after ~4.5 hours...
-extern F32SecondsImplicit gFrameIntervalSeconds; // Elapsed time between current and previous gFrameTimeSeconds
-extern F32 gFPSClamped; // Frames per second, smoothed, weighted toward last frame
-extern F32 gFrameDTClamped;
-
-extern LLTimer gRenderStartTime;
-extern LLFrameTimer gForegroundTime;
-extern LLFrameTimer gLoggedInTime;
-
-extern F32 gLogoutMaxTime;
-extern LLTimer gLogoutTimer;
-
-extern S32 gPendingMetricsUploads;
-
-extern F32 gSimLastTime;
-extern F32 gSimFrames;
-
-extern bool gDisconnected;
-
-extern LLFrameTimer gRestoreGLTimer;
-extern bool gRestoreGL;
-extern bool gUseWireframe;
-
-extern LLMemoryInfo gSysMemory;
-extern U64Bytes gMemoryAllocated;
-
-extern std::string gLastVersionChannel;
-
-extern LLVector3 gWindVec;
-extern LLVector3 gRelativeWindVec;
-extern U32 gPacketsIn;
-extern bool gPrintMessagesThisFrame;
-
-extern LLUUID gBlackSquareID;
-
-extern bool gRandomizeFramerate;
-extern bool gPeriodicSlowFrame;
-
-extern bool gSimulateMemLeak;
-
-#endif // LL_LLAPPVIEWER_H
+/**
+ * @mainpage
+ * @mainpage
+ *
+ * This is the sources for the Second Life Viewer;
+ * information on the open source project is at
+ * https://wiki.secondlife.com/wiki/Open_Source_Portal
+ *
+ * The Mercurial repository for the trunk version is at
+ * https://bitbucket.org/lindenlab/viewer-release
+ *
+ * @section source-license Source License
+ * @verbinclude LICENSE-source.txt
+ *
+ * @section artwork-license Artwork License
+ * @verbinclude LICENSE-logos.txt
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ *
+ * @file llappviewer.h
+ * @brief The LLAppViewer class declaration
+ */
+
+#ifndef LL_LLAPPVIEWER_H
+#define LL_LLAPPVIEWER_H
+
+#include "llallocator.h"
+#include "llapr.h"
+#include "llcontrol.h"
+#include "llsys.h" // for LLOSInfo
+#include "lltimer.h"
+#include "llappcorehttp.h"
+#include "threadpool_fwd.h"
+
+#include <boost/signals2.hpp>
+
+class LLCommandLineParser;
+class LLFrameTimer;
+class LLPumpIO;
+class LLTextureCache;
+class LLImageDecodeThread;
+class LLTextureFetch;
+class LLWatchdogTimeout;
+class LLViewerJoystick;
+class LLPurgeDiskCacheThread;
+class LLViewerRegion;
+
+extern LLTrace::BlockTimerStatHandle FTM_FRAME;
+
+class LLAppViewer : public LLApp
+{
+public:
+ LLAppViewer();
+ virtual ~LLAppViewer();
+
+ /**
+ * @brief Access to the LLAppViewer singleton.
+ *
+ * The LLAppViewer singleton is created in main()/WinMain().
+ * So don't use it in pre-entry (static initialization) code.
+ */
+ static LLAppViewer* instance() {return sInstance; }
+
+ //
+ // Main application logic
+ //
+ virtual bool init(); // Override to do application initialization
+ virtual bool cleanup(); // Override to do application cleanup
+ virtual bool frame(); // Override for application body logic
+
+ // Application control
+ void flushLFSIO(); // waits for lfs transfers to complete
+ void forceQuit(); // Puts the viewer into 'shutting down without error' mode.
+ void fastQuit(S32 error_code = 0); // Shuts down the viewer immediately after sending a logout message
+ void requestQuit(); // Request a quit. A kinder, gentler quit.
+ void userQuit(); // The users asks to quit. Confirm, then requestQuit()
+ void earlyExit(const std::string& name,
+ const LLSD& substitutions = LLSD()); // Display an error dialog and forcibly quit.
+ void earlyExitNoNotify(); // Do not display error dialog then forcibly quit.
+ void abortQuit(); // Called to abort a quit request.
+
+ bool quitRequested() { return mQuitRequested; }
+ bool logoutRequestSent() { return mLogoutRequestSent; }
+ bool isSecondInstance() { return mSecondInstance; }
+ bool isUpdaterMissing(); // In use by tests
+ bool waitForUpdater();
+
+ void writeDebugInfo(bool isStatic=true);
+
+ void setServerReleaseNotesURL(const std::string& url) { mServerReleaseNotesURL = url; }
+ LLSD getViewerInfo() const;
+ std::string getViewerInfoString(bool default_string = false) const;
+
+ // Report true if under the control of a debugger. A null-op default.
+ virtual bool beingDebugged() { return false; }
+
+ virtual bool restoreErrorTrap() = 0; // Require platform specific override to reset error handling mechanism.
+ // return false if the error trap needed restoration.
+ void checkForCrash();
+
+ // Thread accessors
+ static LLTextureCache* getTextureCache() { return sTextureCache; }
+ static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; }
+ static LLTextureFetch* getTextureFetch() { return sTextureFetch; }
+ static LLPurgeDiskCacheThread* getPurgeDiskCacheThread() { return sPurgeDiskCacheThread; }
+
+ static U32 getTextureCacheVersion() ;
+ static U32 getObjectCacheVersion() ;
+ static U32 getDiskCacheVersion() ;
+
+ const std::string& getSerialNumber() { return mSerialNumber; }
+
+ bool getPurgeCache() const { return mPurgeCache; }
+
+ std::string getSecondLifeTitle() const; // The Second Life title.
+ std::string getWindowTitle() const; // The window display name.
+
+ void forceDisconnect(const std::string& msg); // Force disconnection, with a message to the user.
+ void badNetworkHandler(); // Cause a crash state due to bad network packet.
+
+ bool hasSavedFinalSnapshot() { return mSavedFinalSnapshot; }
+ void saveFinalSnapshot();
+
+ void loadNameCache();
+ void saveNameCache();
+
+ void loadExperienceCache();
+ void saveExperienceCache();
+
+ void removeMarkerFiles();
+
+ void removeDumpDir();
+ // LLAppViewer testing helpers.
+ // *NOTE: These will potentially crash the viewer. Only for debugging.
+ virtual void forceErrorLLError();
+ virtual void forceErrorLLErrorMsg();
+ virtual void forceErrorBreakpoint();
+ virtual void forceErrorBadMemoryAccess();
+ virtual void forceErrorInfiniteLoop();
+ virtual void forceErrorSoftwareException();
+ virtual void forceErrorOSSpecificException();
+ virtual void forceErrorDriverCrash();
+ virtual void forceErrorCoroutineCrash();
+ virtual void forceErrorThreadCrash();
+
+ // The list is found in app_settings/settings_files.xml
+ // but since they are used explicitly in code,
+ // the follow consts should also do the trick.
+ static const std::string sGlobalSettingsName;
+
+ LLCachedControl<bool> mRandomizeFramerate;
+ LLCachedControl<bool> mPeriodicSlowFrame;
+
+ // Load settings from the location specified by loction_key.
+ // Key availale and rules for loading, are specified in
+ // 'app_settings/settings_files.xml'
+ bool loadSettingsFromDirectory(const std::string& location_key,
+ bool set_defaults = false);
+
+ std::string getSettingsFilename(const std::string& location_key,
+ const std::string& file);
+ void loadColorSettings();
+
+ // For thread debugging.
+ // llstartup needs to control init.
+ // llworld, send_agent_pause() also controls pause/resume.
+ void initMainloopTimeout(const std::string& state, F32 secs = -1.0f);
+ void destroyMainloopTimeout();
+ void pauseMainloopTimeout();
+ void resumeMainloopTimeout(const std::string& state = "", F32 secs = -1.0f);
+ void pingMainloopTimeout(const std::string& state, F32 secs = -1.0f);
+
+ // Handle the 'login completed' event.
+ // *NOTE:Mani Fix this for login abstraction!!
+ void handleLoginComplete();
+
+ LLAllocator & getAllocator() { return mAlloc; }
+
+ // On LoginCompleted callback
+ typedef boost::signals2::signal<void (void)> login_completed_signal_t;
+ login_completed_signal_t mOnLoginCompleted;
+ boost::signals2::connection setOnLoginCompletedCallback( const login_completed_signal_t::slot_type& cb )
+ {
+ return mOnLoginCompleted.connect(cb);
+ }
+
+ void addOnIdleCallback(const boost::function<void()>& cb); // add a callback to fire (once) when idle
+
+ void initGeneralThread();
+ void purgeUserDataOnExit() { mPurgeUserDataOnExit = true; }
+ void purgeCache(); // Clear the local cache.
+ void purgeCacheImmediate(); //clear local cache immediately.
+ S32 updateTextureThreads(F32 max_time);
+
+ void loadKeyBindings();
+
+ // mute/unmute the system's master audio
+ virtual void setMasterSystemAudioMute(bool mute);
+ virtual bool getMasterSystemAudioMute();
+
+ // Metrics policy helper statics.
+ static void metricsUpdateRegion(U64 region_handle);
+ static void metricsSend(bool enable_reporting);
+
+ // llcorehttp init/shutdown/config information.
+ LLAppCoreHttp & getAppCoreHttp() { return mAppCoreHttp; }
+
+ void updateNameLookupUrl(const LLViewerRegion* regionp);
+
+protected:
+ virtual bool initWindow(); // Initialize the viewer's window.
+ virtual void initLoggingAndGetLastDuration(); // Initialize log files, logging system
+ virtual void initConsole() {}; // Initialize OS level debugging console.
+ virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
+ virtual bool initSLURLHandler();
+ virtual bool sendURLToOtherInstance(const std::string& url);
+
+ virtual bool initParseCommandLine(LLCommandLineParser& clp)
+ { return true; } // Allow platforms to specify the command line args.
+
+ virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.
+
+ virtual bool meetsRequirementsForMaximizedStart(); // Used on first login to decide to launch maximized
+
+private:
+
+ bool doFrame();
+
+ void initMaxHeapSize();
+ bool initThreads(); // Initialize viewer threads, return false on failure.
+ bool initConfiguration(); // Initialize settings from the command line/config file.
+ void initStrings(); // Initialize LLTrans machinery
+ bool initCache(); // Initialize local client cache.
+
+ // We have switched locations of both Mac and Windows cache, make sure
+ // files migrate and old cache is cleared out.
+ void migrateCacheDirectory();
+
+ void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup.
+ void removeCacheFiles(const std::string& filemask); // Deletes cached files the match the given wildcard.
+
+ void writeSystemInfo(); // Write system info to "debug_info.log"
+
+ void processMarkerFiles();
+ static void recordMarkerVersion(LLAPRFile& marker_file);
+ bool markerIsSameVersion(const std::string& marker_name) const;
+
+ void idle();
+ void idleShutdown();
+ // update avatar SLID and display name caches
+ void idleNameCache();
+ void idleNetwork();
+
+ void sendLogoutRequest();
+ void disconnectViewer();
+
+ // *FIX: the app viewer class should be some sort of singleton, no?
+ // Perhaps its child class is the singleton and this should be an abstract base.
+ static LLAppViewer* sInstance;
+
+ bool mSecondInstance; // Is this a second instance of the app?
+ bool mUpdaterNotFound; // True when attempt to start updater failed
+
+ std::string mMarkerFileName;
+ LLAPRFile mMarkerFile; // A file created to indicate the app is running.
+
+ std::string mLogoutMarkerFileName;
+ LLAPRFile mLogoutMarkerFile; // A file created to indicate the app is running.
+
+ bool mReportedCrash;
+
+ std::string mServerReleaseNotesURL;
+
+ // Thread objects.
+ static LLTextureCache* sTextureCache;
+ static LLImageDecodeThread* sImageDecodeThread;
+ static LLTextureFetch* sTextureFetch;
+ static LLPurgeDiskCacheThread* sPurgeDiskCacheThread;
+ LL::ThreadPool* mGeneralThreadPool;
+
+ S32 mNumSessions;
+
+ std::string mSerialNumber;
+ bool mPurgeCache;
+ bool mPurgeCacheOnExit;
+ bool mPurgeUserDataOnExit;
+ LLViewerJoystick* joystick;
+
+ bool mSavedFinalSnapshot;
+ bool mSavePerAccountSettings; // only save per account settings if login succeeded
+
+ boost::optional<U32> mForceGraphicsLevel;
+
+ bool mQuitRequested; // User wants to quit, may have modified documents open.
+ bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim.
+ U32 mLastAgentControlFlags;
+ F32 mLastAgentForceUpdate;
+ struct SettingsFiles* mSettingsLocationList;
+
+ LLWatchdogTimeout* mMainloopTimeout;
+
+ // For performance and metric gathering
+ class LLThread* mFastTimerLogThread;
+
+ // for tracking viewer<->region circuit death
+ bool mAgentRegionLastAlive;
+ LLUUID mAgentRegionLastID;
+
+ LLAllocator mAlloc;
+
+ // llcorehttp library init/shutdown helper
+ LLAppCoreHttp mAppCoreHttp;
+
+ bool mIsFirstRun;
+};
+
+// consts from viewer.h
+const S32 AGENT_UPDATES_PER_SECOND = 10;
+const S32 AGENT_FORCE_UPDATES_PER_SECOND = 1;
+
+// Globals with external linkage. From viewer.h
+// *NOTE:Mani - These will be removed as the Viewer App Cleanup project continues.
+//
+// "// llstartup" indicates that llstartup is the only client for this global.
+
+extern LLSD gDebugInfo;
+extern bool gShowObjectUpdates;
+
+typedef enum
+{
+ LAST_EXEC_NORMAL = 0,
+ LAST_EXEC_FROZE,
+ LAST_EXEC_LLERROR_CRASH,
+ LAST_EXEC_OTHER_CRASH,
+ LAST_EXEC_LOGOUT_FROZE,
+ LAST_EXEC_LOGOUT_CRASH
+} eLastExecEvent;
+
+extern eLastExecEvent gLastExecEvent; // llstartup
+extern S32 gLastExecDuration; ///< the duration of the previous run in seconds (<0 indicates unknown)
+
+extern const char* gPlatform;
+
+extern U32 gFrameCount;
+extern U32 gForegroundFrameCount;
+
+extern LLPumpIO* gServicePump;
+
+extern U64MicrosecondsImplicit gStartTime;
+extern U64MicrosecondsImplicit gFrameTime; // The timestamp of the most-recently-processed frame
+extern F32SecondsImplicit gFrameTimeSeconds; // Loses msec precision after ~4.5 hours...
+extern F32SecondsImplicit gFrameIntervalSeconds; // Elapsed time between current and previous gFrameTimeSeconds
+extern F32 gFPSClamped; // Frames per second, smoothed, weighted toward last frame
+extern F32 gFrameDTClamped;
+
+extern LLTimer gRenderStartTime;
+extern LLFrameTimer gForegroundTime;
+extern LLFrameTimer gLoggedInTime;
+
+extern F32 gLogoutMaxTime;
+extern LLTimer gLogoutTimer;
+
+extern S32 gPendingMetricsUploads;
+
+extern F32 gSimLastTime;
+extern F32 gSimFrames;
+
+extern bool gDisconnected;
+
+extern LLFrameTimer gRestoreGLTimer;
+extern bool gRestoreGL;
+extern bool gUseWireframe;
+
+extern LLMemoryInfo gSysMemory;
+extern U64Bytes gMemoryAllocated;
+
+extern std::string gLastVersionChannel;
+
+extern LLVector3 gWindVec;
+extern LLVector3 gRelativeWindVec;
+extern U32 gPacketsIn;
+extern bool gPrintMessagesThisFrame;
+
+extern LLUUID gBlackSquareID;
+
+extern bool gRandomizeFramerate;
+extern bool gPeriodicSlowFrame;
+
+extern bool gSimulateMemLeak;
+
+#endif // LL_LLAPPVIEWER_H