From 50f328ac49f944723242cf60bb231b38415f1f2f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Mon, 30 Nov 2015 12:06:41 +0100 Subject: [PATCH] FIRE-16857: Implement SimulatorFPS[...] sim-feature handler for OpenSim to fix lag meter --- indra/newview/lfsimfeaturehandler.cpp | 26 +++++++++++++++++++++++++- indra/newview/lfsimfeaturehandler.h | 10 ++++++++++ indra/newview/llfloaterlagmeter.cpp | 7 +++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/indra/newview/lfsimfeaturehandler.cpp b/indra/newview/lfsimfeaturehandler.cpp index 1842426a82..daa9b68a34 100644 --- a/indra/newview/lfsimfeaturehandler.cpp +++ b/indra/newview/lfsimfeaturehandler.cpp @@ -31,7 +31,11 @@ LFSimFeatureHandler::LFSimFeatureHandler() mShoutRange(100), mWhisperRange(10), mHasAvatarPicker(false), - mHasDestinationGuide(false) + mHasDestinationGuide(false), + mSimulatorFPS(45.f), + mSimulatorFPSFactor(1.f), + mSimulatorFPSWarn(30.f), + mSimulatorFPSCrit(20.f) { LL_INFOS() << "Initializing Sim Feature Handler" << LL_ENDL; @@ -84,6 +88,22 @@ void LFSimFeatureHandler::setSupportedFeatures() mShoutRange = extras.has("shout-range") ? extras["shout-range"].asInteger() : 100; mWhisperRange = extras.has("whisper-range") ? extras["whisper-range"].asInteger() : 10; + if (extras.has("SimulatorFPS") && extras.has("SimulatorFPSFactor") && + extras.has("SimulatorFPSWarnPercent") && extras.has("SimulatorFPSCritPercent")) + { + mSimulatorFPS = extras["SimulatorFPS"].asReal(); + mSimulatorFPSFactor = extras["SimulatorFPSFactor"].asReal(); + mSimulatorFPSWarn = (mSimulatorFPS * mSimulatorFPSFactor) * (extras["SimulatorFPSWarnPercent"].asReal() / 100.f); + mSimulatorFPSCrit = (mSimulatorFPS * mSimulatorFPSFactor) * (extras["SimulatorFPSCritPercent"].asReal() / 100.f); + } + else + { + mSimulatorFPS = 45.f; + mSimulatorFPSFactor = 1.f; + mSimulatorFPSWarn = 30.f; + mSimulatorFPSCrit = 20.f; + } + if (extras.has("search-server-url")) { mSearchURL = extras["search-server-url"].asString(); @@ -139,6 +159,10 @@ void LFSimFeatureHandler::setSupportedFeatures() mSayRange = 20; mShoutRange = 100; mWhisperRange = 10; + mSimulatorFPS = 45.f; + mSimulatorFPSFactor = 1.f; + mSimulatorFPSWarn = 30.f; + mSimulatorFPSCrit = 20.f; if (LLLoginInstance::getInstance()->hasResponse("search")) { diff --git a/indra/newview/lfsimfeaturehandler.h b/indra/newview/lfsimfeaturehandler.h index e69746ab7d..37522f26c4 100644 --- a/indra/newview/lfsimfeaturehandler.h +++ b/indra/newview/lfsimfeaturehandler.h @@ -85,6 +85,11 @@ public: std::string avatarPickerURL() const { return mAvatarPickerURL; } std::string destinationGuideURL() const { return mDestinationGuideURL; } + F32 simulatorFPS() const { return mSimulatorFPS; } + F32 simulatorFPSFactor() const { return mSimulatorFPSFactor; } + F32 simulatorFPSWarn() const { return mSimulatorFPSWarn; } + F32 simulatorFPSCrit() const { return mSimulatorFPSCrit; } + bool hasAvatarPicker() const { return mHasAvatarPicker; } bool hasDestinationGuide() const { return mHasDestinationGuide; } @@ -99,6 +104,11 @@ private: SignaledType mAvatarPickerURL; SignaledType mDestinationGuideURL; + F32 mSimulatorFPS; + F32 mSimulatorFPSFactor; + F32 mSimulatorFPSWarn; + F32 mSimulatorFPSCrit; + bool mHasAvatarPicker; bool mHasDestinationGuide; }; diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp index 41d72a1337..7113308e5c 100644 --- a/indra/newview/llfloaterlagmeter.cpp +++ b/indra/newview/llfloaterlagmeter.cpp @@ -40,6 +40,8 @@ #include "llfocusmgr.h" #include "lltextbox.h" +#include "lfsimfeaturehandler.h" + // Nicer icons //const std::string LAG_CRITICAL_IMAGE_NAME = "lag_status_critical.tga"; //const std::string LAG_WARNING_IMAGE_NAME = "lag_status_warning.tga"; @@ -261,6 +263,11 @@ void LLFloaterLagMeter::determineNetwork() void LLFloaterLagMeter::determineServer() { + // FIRE-16857: Lag-meter special adjustments for OpenSim + mServerFrameTimeWarning = F32Seconds(1.0f / LFSimFeatureHandler::instance().simulatorFPSWarn()); + mServerFrameTimeCritical = F32Seconds(1.0f / LFSimFeatureHandler::instance().simulatorFPSCrit()); + // + F32Milliseconds sim_frame_time = LLTrace::get_frame_recording().getLastRecording().getLastValue(LLStatViewer::SIM_FRAME_TIME); bool find_cause = false;