diff options
author | Max Hilbrunner <mhilbrunner@users.noreply.github.com> | 2018-05-26 17:31:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-26 17:31:52 +0200 |
commit | 16974d81d8ce03ea744871757c627aa2f9a0dfc7 (patch) | |
tree | aab407bfb0e23c28b29e9732cdfcd6952bc178d1 | |
parent | 603af8055accedf63f80d11c0b44febb62ce7d5e (diff) | |
parent | 228ae60a63df4190028a34648290417982c0d268 (diff) |
Merge pull request #18998 from Calinou/customizable-performance-reporting-rate
Make the performance reporting update frequency customizable
-rw-r--r-- | core/project_settings.cpp | 1 | ||||
-rw-r--r-- | core/script_debugger_remote.cpp | 4 | ||||
-rw-r--r-- | core/script_language.cpp | 2 | ||||
-rw-r--r-- | core/script_language.h | 2 | ||||
-rw-r--r-- | main/main.cpp | 18 | ||||
-rw-r--r-- | main/main.h | 2 |
6 files changed, 21 insertions, 8 deletions
diff --git a/core/project_settings.cpp b/core/project_settings.cpp index ac4a4b7d15..ef485cb3b2 100644 --- a/core/project_settings.cpp +++ b/core/project_settings.cpp @@ -1071,6 +1071,7 @@ ProjectSettings::ProjectSettings() { GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_mode", 2); GLOBAL_DEF("debug/settings/profiler/max_functions", 16384); + GLOBAL_DEF("debug/settings/performance/update_frequency_msec", 250); //assigning here, because using GLOBAL_GET on every block for compressing can be slow Compression::zstd_long_distance_matching = GLOBAL_DEF("compression/formats/zstd/long_distance_matching", false); diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp index 75bcedbbc8..7a30a33c67 100644 --- a/core/script_debugger_remote.cpp +++ b/core/script_debugger_remote.cpp @@ -854,7 +854,7 @@ void ScriptDebuggerRemote::idle_poll() { if (performance) { uint64_t pt = OS::get_singleton()->get_ticks_msec(); - if (pt - last_perf_time > 1000) { + if (pt - last_perf_time > update_frequency) { last_perf_time = pt; int max = performance->get("MONITOR_MAX"); @@ -1081,7 +1081,7 @@ ScriptDebuggerRemote::ScriptDebuggerRemote() : eh.userdata = this; add_error_handler(&eh); - profile_info.resize(CLAMP(int(ProjectSettings::get_singleton()->get("debug/settings/profiler/max_functions")), 128, 65535)); + profile_info.resize(CLAMP(int(GLOBAL_GET("debug/settings/profiler/max_functions")), 128, 65535)); profile_info_ptrs.resize(profile_info.size()); } diff --git a/core/script_language.cpp b/core/script_language.cpp index 1dab58e29e..ce9b138bb2 100644 --- a/core/script_language.cpp +++ b/core/script_language.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "script_language.h" +#include "project_settings.h" ScriptLanguage *ScriptServer::_languages[MAX_LANGUAGES]; int ScriptServer::_language_count = 0; @@ -283,6 +284,7 @@ ScriptDebugger::ScriptDebugger() { lines_left = -1; depth = -1; break_lang = NULL; + update_frequency = GLOBAL_GET("debug/settings/performance/update_frequency_msec"); } bool PlaceHolderScriptInstance::set(const StringName &p_name, const Variant &p_value) { diff --git a/core/script_language.h b/core/script_language.h index b4c55cac9e..64c6f2eb81 100644 --- a/core/script_language.h +++ b/core/script_language.h @@ -352,6 +352,8 @@ class ScriptDebugger { public: typedef void (*RequestSceneTreeMessageFunc)(void *); + int update_frequency; + struct LiveEditFuncs { void *udata; diff --git a/main/main.cpp b/main/main.cpp index 70713e2dd8..ad49e1f5bd 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1706,7 +1706,7 @@ bool Main::start() { uint64_t Main::last_ticks = 0; uint64_t Main::target_ticks = 0; -uint32_t Main::frames = 0; +Array Main::frame_times = Array(); uint32_t Main::frame = 0; bool Main::force_redraw_requested = false; @@ -1825,10 +1825,19 @@ bool Main::iteration() { script_debugger->idle_poll(); } - frames++; Engine::get_singleton()->_idle_frames++; - if (frame > 1000000) { + // FPS counter + frame_times.push_back(ticks); + int frames = frame_times.size(); + + while (frame_times.size() > 0 && (int)frame_times.get(0) <= ticks - 1000000) { + frame_times.pop_front(); + } + + int update_frequency = MAX(1, (int)GLOBAL_GET("debug/settings/performance/update_frequency_msec")); + + if (frame > update_frequency * 1000) { if (editor || project_manager) { if (print_fps) { @@ -1844,8 +1853,7 @@ bool Main::iteration() { idle_process_max = 0; physics_process_max = 0; - frame %= 1000000; - frames = 0; + frame %= update_frequency * 1000; } if (fixed_fps != -1) diff --git a/main/main.h b/main/main.h index c20592bf3b..8f264d7720 100644 --- a/main/main.h +++ b/main/main.h @@ -44,7 +44,7 @@ class Main { static void print_help(const char *p_binary); static uint64_t last_ticks; static uint64_t target_ticks; - static uint32_t frames; + static Array frame_times; static uint32_t frame; static bool force_redraw_requested; |