summaryrefslogtreecommitdiff
path: root/indra/newview/llappviewer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llappviewer.cpp')
-rw-r--r--indra/newview/llappviewer.cpp48
1 files changed, 46 insertions, 2 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 6b5c0ea6b0..4a6739bb40 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -633,6 +633,12 @@ bool LLAppViewer::sendURLToOtherInstance(const std::string& url)
return false;
}
+//virtual
+void LLAppViewer::setOSHibernationMode(eHibernationMode mode)
+{
+ // See OS specific files
+}
+
//----------------------------------------------------------------------------
// LLAppViewer definition
@@ -4474,9 +4480,12 @@ void LLAppViewer::abortQuit()
mClosingFloaters = false;
}
-void LLAppViewer::sendViewerStatistics()
+void LLAppViewer::sendViewerStatistics(bool include_preferences)
{
- send_viewer_stats(false);
+ if (!gDisconnected)
+ {
+ send_viewer_stats(include_preferences);
+ }
}
void LLAppViewer::migrateCacheDirectory()
@@ -5857,6 +5866,29 @@ void LLAppViewer::outOfMemorySoftQuit()
}
}
+void LLAppViewer::setPermitOSHibernation(bool permit)
+{
+ if (permit)
+ {
+ if (mCurrentHibernationMode != LL_HIBERNATE_MODE_DEFAULT)
+ {
+ // Will call OS specific code to let OS hibernate when idle
+ setOSHibernationMode(LL_HIBERNATE_MODE_DEFAULT);
+ mCurrentHibernationMode = LL_HIBERNATE_MODE_DEFAULT;
+ }
+ }
+ else
+ {
+ static LLCachedControl<S32> os_hibernation_mode(gSavedSettings, "OSHibernationMode", 0);
+ eHibernationMode mode = static_cast<eHibernationMode>(os_hibernation_mode());
+ if (mode != LL_HIBERNATE_MODE_DEFAULT && mCurrentHibernationMode != mode)
+ {
+ setOSHibernationMode(mode);
+ mCurrentHibernationMode = mode;
+ }
+ }
+}
+
void LLAppViewer::idleNameCache()
{
// Neither old nor new name cache can function before agent has a region
@@ -6064,6 +6096,9 @@ void LLAppViewer::disconnectViewer()
// Pass the connection state to LLUrlEntryParcel not to attempt
// parcel info requests while disconnected.
LLUrlEntryParcel::setDisconnected(gDisconnected);
+
+ // Restore default OS hibernation mode
+ setPermitOSHibernation(true);
}
void LLAppViewer::forceErrorLLError()
@@ -6329,6 +6364,15 @@ void LLAppViewer::handleLoginComplete()
// we logged in successfully, so save settings on logout
LL_INFOS() << "Login successful, per account settings will be saved on log out." << LL_ENDL;
mSavePerAccountSettings=true;
+
+ // Don't allow hibernation while we're running
+ setPermitOSHibernation(false);
+ // Track 'hibernation' mode changes
+ mOSHibernationModeChangeConnection = gSavedSettings.getControl("OSHibernationMode")->getSignal()->connect([](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val)
+ {
+ // setPermitOSHibernation will sort itself out based on new mode.
+ LLAppViewer::instance()->setPermitOSHibernation(false);
+ });
}
//virtual