From 80bff069f9861d0368f530f9c1f9136577a5d047 Mon Sep 17 00:00:00 2001 From: lava76 <64863095+lava76@users.noreply.github.com> Date: Sat, 11 Feb 2023 16:29:23 +0100 Subject: [PATCH 1/5] Limit CF_OnUpdate rate for perf boost CF_OnUpdate loop is fairly expensive especially on server. Limit update rate to 25 ms on server and 5 ms on client. Significant performance boost was observed when many modules are using update loops (e.g. COT gained 10% tick rate increase on server with this change). --- .../CommunityFramework/Mission/MissionBase.c | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c b/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c index 15cdf0e3..cd30e2e1 100644 --- a/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c +++ b/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c @@ -1,5 +1,11 @@ modded class MissionBase { +#ifdef SERVER + static const float CF_UPDATEINTERVAL = 0.025; +#else + static const float CF_UPDATEINTERVAL = 0.005; +#endif + protected bool m_bLoaded = false; void MissionBase() @@ -19,17 +25,24 @@ modded class MissionBase void CF_OnUpdate(float timeslice) { - if (g_Game.IsLoading()) - { - return; - } - if (!m_bLoaded) { + if (g_Game.IsLoading()) + { + return; + } + m_bLoaded = true; OnMissionLoaded(); } - CF_ModuleGameManager.OnUpdate(this, new CF_EventUpdateArgs(timeslice)); + m_CF_UpdateTime += timeslice; + + if (m_CF_UpdateTime >= CF_UPDATEINTERVAL) + { + CF_ModuleGameManager.OnUpdate(this, new CF_EventUpdateArgs(m_CF_UpdateTime)); + + m_CF_UpdateTime = 0; + } } }; From a9b43d6efad72ccf93bc0978fd24a822ed375305 Mon Sep 17 00:00:00 2001 From: lava76 Date: Thu, 2 Mar 2023 15:55:53 +0100 Subject: [PATCH 2/5] Removed rate limit on client, fixed missing var --- .../5_Mission/CommunityFramework/Mission/MissionBase.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c b/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c index cd30e2e1..75cf1604 100644 --- a/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c +++ b/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c @@ -1,9 +1,7 @@ modded class MissionBase { #ifdef SERVER - static const float CF_UPDATEINTERVAL = 0.025; -#else - static const float CF_UPDATEINTERVAL = 0.005; + float m_CF_UpdateTime; #endif protected bool m_bLoaded = false; @@ -36,13 +34,17 @@ modded class MissionBase OnMissionLoaded(); } +#ifdef SERVER m_CF_UpdateTime += timeslice; - if (m_CF_UpdateTime >= CF_UPDATEINTERVAL) + if (m_CF_UpdateTime >= 0.025) { CF_ModuleGameManager.OnUpdate(this, new CF_EventUpdateArgs(m_CF_UpdateTime)); m_CF_UpdateTime = 0; } +#else + CF_ModuleGameManager.OnUpdate(this, new CF_EventUpdateArgs(timeslice)); +#endif } }; From c1d9ffe131aa110eb28cbf78a57591b9dca10f71 Mon Sep 17 00:00:00 2001 From: lava76 Date: Thu, 2 Mar 2023 18:32:00 +0100 Subject: [PATCH 3/5] Add define --- JM/CF/Defines/CFDefines.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/JM/CF/Defines/CFDefines.c b/JM/CF/Defines/CFDefines.c index a28ff106..18f1b388 100644 --- a/JM/CF/Defines/CFDefines.c +++ b/JM/CF/Defines/CFDefines.c @@ -21,3 +21,5 @@ #ifndef DAYZ_1_20 //! DAYZ_1_19 won't be avaliable in 2_GameLib #define CF_FUNC_OLD #endif + +#define CF_ONUPDATE_RATE_LIMIT From a94692255d61edfac896c0bc3ec279ac591f9775 Mon Sep 17 00:00:00 2001 From: lava76 Date: Sat, 4 Mar 2023 22:48:28 +0100 Subject: [PATCH 4/5] `timeslice` is inaccurate, use GetIickTime so modules can do accurate time measurement --- .../CommunityFramework/Mission/MissionBase.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c b/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c index 75cf1604..8e953ed6 100644 --- a/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c +++ b/JM/CF/Scripts/5_Mission/CommunityFramework/Mission/MissionBase.c @@ -23,6 +23,17 @@ modded class MissionBase void CF_OnUpdate(float timeslice) { +#ifdef SERVER + float updateTime = GetGame().GetTickTime(); + float elapsed = updateTime - m_CF_UpdateTime; + bool update = elapsed >= 0.025; + + if (update) + { + m_CF_UpdateTime = updateTime; + } +#endif + if (!m_bLoaded) { if (g_Game.IsLoading()) @@ -35,13 +46,9 @@ modded class MissionBase } #ifdef SERVER - m_CF_UpdateTime += timeslice; - - if (m_CF_UpdateTime >= 0.025) + if (update) { - CF_ModuleGameManager.OnUpdate(this, new CF_EventUpdateArgs(m_CF_UpdateTime)); - - m_CF_UpdateTime = 0; + CF_ModuleGameManager.OnUpdate(this, new CF_EventUpdateArgs(elapsed)); } #else CF_ModuleGameManager.OnUpdate(this, new CF_EventUpdateArgs(timeslice)); From 1e0accc67921a8a6817937878f0b49ac77a9c777 Mon Sep 17 00:00:00 2001 From: lava76 Date: Fri, 12 Jul 2024 13:34:12 +0200 Subject: [PATCH 5/5] Defines moved to config.cpp --- JM/CF/Defines/CFDefines.c | 25 ------------------------- JM/CF/Defines/config.cpp | 13 ------------- JM/CF/Scripts/config.cpp | 27 ++++++++++++++++++++------- 3 files changed, 20 insertions(+), 45 deletions(-) delete mode 100644 JM/CF/Defines/CFDefines.c delete mode 100644 JM/CF/Defines/config.cpp diff --git a/JM/CF/Defines/CFDefines.c b/JM/CF/Defines/CFDefines.c deleted file mode 100644 index 18f1b388..00000000 --- a/JM/CF/Defines/CFDefines.c +++ /dev/null @@ -1,25 +0,0 @@ -#define CF_MODULE_CONFIG - -#define CF_EXPRESSION -//#define CF_EXPRESSION_TEST - -//#define CF_TRACE_ENABLED -#define CF_TRACE_STACK_NAME_ASSUMPTION_FIX - -#define CF_GHOSTICONS - -//#define CF_MODSTORAGE -//#define CF_MODSTORAGE_TEST -//#define CF_MODSTORAGE_TRACE -#define CF_MODSTORAGE_DISABLE -#define CF_MODSTORAGE_MODULE_DISABLE - -#define CF_SURFACES - -#define CF_MODULES - -#ifndef DAYZ_1_20 //! DAYZ_1_19 won't be avaliable in 2_GameLib -#define CF_FUNC_OLD -#endif - -#define CF_ONUPDATE_RATE_LIMIT diff --git a/JM/CF/Defines/config.cpp b/JM/CF/Defines/config.cpp deleted file mode 100644 index 43d9c17d..00000000 --- a/JM/CF/Defines/config.cpp +++ /dev/null @@ -1,13 +0,0 @@ -class CfgPatches -{ - class JM_CF_Defines - { - units[]={}; - weapons[]={}; - requiredVersion=0.1; - requiredAddons[]= - { - "DZ_Data" - }; - }; -}; \ No newline at end of file diff --git a/JM/CF/Scripts/config.cpp b/JM/CF/Scripts/config.cpp index 87b707c5..cced153c 100644 --- a/JM/CF/Scripts/config.cpp +++ b/JM/CF/Scripts/config.cpp @@ -1,5 +1,3 @@ -#include "\JM\CF\Defines\CFDefines.c" - class CfgPatches { class JM_CF_Scripts @@ -33,6 +31,26 @@ class CfgMods extra = 0; type = "mod"; + defines[] = + { + "CF_MODULE_CONFIG", + "CF_EXPRESSION", + //"CF_EXPRESSION_TEST", + //"CF_TRACE_ENABLED", + "CF_TRACE_STACK_NAME_ASSUMPTION_FIX", + "CF_GHOSTICONS", + //"CF_MODSTORAGE", + //"CF_MODSTORAGE_TEST", + //"CF_MODSTORAGE_TRACE", + "CF_MODSTORAGE_DISABLE", + "CF_MODSTORAGE_MODULE_DISABLE", + "CF_SURFACES", + "CF_MODULES", + "CF_REF_FIX", + "CF_BUGFIX_REF", // Same as CF_REF_FIX but for mods that already anticipated a different name + "CF_BUGFIX_XML" + }; + dependencies[] = { "Core", "Game", "World", "Mission" }; class defs @@ -42,7 +60,6 @@ class CfgMods value = ""; files[] = { - "JM/CF/Defines", "JM/CF/Scripts/1_Core" }; }; @@ -51,7 +68,6 @@ class CfgMods value = ""; files[] = { - "JM/CF/Defines", "JM/CF/Scripts/2_GameLib" }; }; @@ -60,7 +76,6 @@ class CfgMods value = "CF_CreateGame"; files[] = { - "JM/CF/Defines", "JM/CF/Scripts/3_Game" }; }; @@ -69,7 +84,6 @@ class CfgMods value = ""; //! Doesn't work files[] = { - "JM/CF/Defines", "JM/CF/Scripts/4_World" }; }; @@ -78,7 +92,6 @@ class CfgMods value = ""; files[] = { - "JM/CF/Defines", "JM/CF/Scripts/5_Mission" }; };