Pārlūkot izejas kodu

Address SystemTick background cap feedback

Signed-off-by: puvvadar <[email protected]>
puvvadar 3 gadi atpakaļ
vecāks
revīzija
7e11a752cc
3 mainītis faili ar 16 papildinājumiem un 11 dzēšanām
  1. 12 7
      Code/Editor/CryEdit.cpp
  2. 4 3
      Code/Editor/Settings.cpp
  3. 0 1
      Code/Editor/Settings.h

+ 12 - 7
Code/Editor/CryEdit.cpp

@@ -2307,15 +2307,20 @@ int CCryEditApp::IdleProcessing(bool bBackgroundUpdate)
         }
 
         // If we're backgrounded and not fully background updating, idle to rate limit SystemTick
-        const float safeMarginFPS = 0.5f; // safe margin to not drop below idle fps
-        const int maxEditorFPS = gEnv->pConsole->GetCVar("ed_backgroundSystemTickFPS")->GetIVal();
         static AZ::TimeMs sTimeLastMs = AZ::GetRealElapsedTimeMs();
-        const AZ::TimeMs maxFrameTimeMs(static_cast<AZ::TimeMs>((int64)(1000.f / ((float)maxEditorFPS + safeMarginFPS))));
-        const AZ::TimeMs maxElapsedTimeMs = maxFrameTimeMs + sTimeLastMs;
-        const AZ::TimeMs realElapsedTimeMs = AZ::GetRealElapsedTimeMs();
-        if (maxElapsedTimeMs > realElapsedTimeMs)
+
+        const auto console = AZ::Interface<AZ::IConsole>::Get();
+        AZ::TimeMs maxFrameTimeMs = AZ::TimeMs{ 1 };
+        console->GetCvarValue("ed_backgroundSystemTickCap", maxFrameTimeMs);
+
+        if (maxFrameTimeMs > AZ::TimeMs{ 0 })
         {
-            CrySleep(static_cast<uint64_t>(maxElapsedTimeMs - realElapsedTimeMs));
+            const AZ::TimeMs maxElapsedTimeMs = maxFrameTimeMs + sTimeLastMs;
+            const AZ::TimeMs realElapsedTimeMs = AZ::GetRealElapsedTimeMs();
+            if (maxElapsedTimeMs > realElapsedTimeMs)
+            {
+                CrySleep(static_cast<unsigned int>(maxElapsedTimeMs - realElapsedTimeMs));
+            }
         }
         sTimeLastMs = AZ::GetRealElapsedTimeMs();
     }

+ 4 - 3
Code/Editor/Settings.cpp

@@ -22,9 +22,11 @@
 #include <AzCore/Settings/SettingsRegistry.h>
 #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
 #include <AzCore/StringFunc/StringFunc.h>
+#include <AzCore/Time/ITime.h>
 #include <AzCore/Utils/Utils.h>
 #include <AzCore/Console/IConsole.h>
 
+
 // AzFramework
 #include <AzFramework/API/ApplicationAPI.h>
 #include <AzToolsFramework/API/ToolsApplicationAPI.h>
@@ -228,7 +230,6 @@ SEditorSettings::SEditorSettings()
     gui.hSystemFontItalic = QFont("Ms Shell Dlg 2", lfHeight, QFont::Normal, true);
 
     backgroundUpdatePeriod = 0;
-    backgroundSystemTickFPS = 30;
     g_TemporaryLevelName = nullptr;
 
     sliceSettings.dynamicByDefault = false;
@@ -833,7 +834,8 @@ void SEditorSettings::Load()
 //////////////////////////////////////////////////////////////////////////
 AZ_CVAR(bool, ed_previewGameInFullscreen_once, false, nullptr, AZ::ConsoleFunctorFlags::IsInvisible, "Preview the game (Ctrl+G, \"Play Game\", etc.) in fullscreen once");
 AZ_CVAR(bool, ed_lowercasepaths, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Convert CCryFile paths to lowercase on Open");
-
+AZ_CVAR(AZ::TimeMs, ed_backgroundSystemTickCap, AZ::TimeMs{ 33 }, nullptr, AZ::ConsoleFunctorFlags::Null,"Delay between frame updates (ms) when window is out of focus but not minimized AND background update is disabled.");
+    
 void SEditorSettings::PostInitApply()
 {
     if (!gEnv || !gEnv->pConsole)
@@ -849,7 +851,6 @@ void SEditorSettings::PostInitApply()
     REGISTER_CVAR2_CB("ed_toolbarIconSize", &gui.nToolbarIconSize, gui.nToolbarIconSize, VF_NULL, "Override size of the toolbar icons 0-default, 16,32,...", ToolbarIconSizeChanged);
 
     REGISTER_CVAR2("ed_backgroundUpdatePeriod", &backgroundUpdatePeriod, backgroundUpdatePeriod, 0, "Delay between frame updates (ms) when window is out of focus but not minimized. 0 = disable background update. -1 = update with no delay.");
-    REGISTER_CVAR2("ed_backgroundSystemTickFPS", &backgroundSystemTickFPS, backgroundSystemTickFPS, 30, "FPS at which SystemTick occurs when Editor is backgrounded and frame updates are disabled.");
     REGISTER_CVAR2("ed_showErrorDialogOnLoad", &showErrorDialogOnLoad, showErrorDialogOnLoad, 0, "Show error dialog on level load");
     REGISTER_CVAR2_CB("ed_keepEditorActive", &keepEditorActive, 0, VF_NULL, "Keep the editor active, even if no focus is set", KeepEditorActiveChanged);
     REGISTER_CVAR2("g_TemporaryLevelName", &g_TemporaryLevelName, "temp_level", VF_NULL, "Temporary level named used for experimental levels.");

+ 0 - 1
Code/Editor/Settings.h

@@ -426,7 +426,6 @@ AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING
     int  navigationDebugAgentType;
 
     int backgroundUpdatePeriod;
-    int backgroundSystemTickFPS;
     const char* g_TemporaryLevelName;
 
     SSliceSettings sliceSettings;