aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorihm-tswow <ihm-ts@protonmail.com>2022-08-17 11:53:22 +0200
committerShauren <shauren.trinity@gmail.com>2022-10-13 11:57:23 +0200
commita8f1ab32676dd476d9d08f24eb51028a6e404f9d (patch)
tree5b71a526409be5570f0fabee3d802711653e79d3 /src
parentf59580dc6c95a4190aaa6bf8e7172ac22b2d7cdb (diff)
Core/Misc: Multithread query cache loading
(cherry picked from commit 048089ef21e271b38e1cc99d82d13c4c4f23ebd2)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 08763fe8aeb..881a0f87b88 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -61,6 +61,7 @@
#include "StringConvert.h"
#include "TemporarySummon.h"
#include "TerrainMgr.h"
+#include "ThreadPool.h"
#include "Timer.h"
#include "TransportMgr.h"
#include "Vehicle.h"
@@ -10904,25 +10905,29 @@ void ObjectMgr::InitializeQueriesData(QueryDataGroup mask)
return;
}
+ Trinity::ThreadPool pool;
+
// Initialize Query data for creatures
if (mask & QUERY_DATA_CREATURES)
for (auto& creatureTemplatePair : _creatureTemplateStore)
- creatureTemplatePair.second.InitializeQueryData();
+ pool.PostWork([creature = &creatureTemplatePair.second]() { creature->InitializeQueryData(); });
// Initialize Query Data for gameobjects
if (mask & QUERY_DATA_GAMEOBJECTS)
for (auto& gameObjectTemplatePair : _gameObjectTemplateStore)
- gameObjectTemplatePair.second.InitializeQueryData();
+ pool.PostWork([gobj = &gameObjectTemplatePair.second]() { gobj->InitializeQueryData(); });
// Initialize Query Data for quests
if (mask & QUERY_DATA_QUESTS)
for (auto& questTemplatePair : _questTemplates)
- questTemplatePair.second.InitializeQueryData();
+ pool.PostWork([quest = &questTemplatePair.second]() { quest->InitializeQueryData(); });
// Initialize Quest POI data
if (mask & QUERY_DATA_POIS)
- for (auto& poiPair : _questPOIStore)
- poiPair.second.InitializeQueryData();
+ for (auto& poiWrapperPair : _questPOIStore)
+ pool.PostWork([poi = &poiWrapperPair.second]() { poi->InitializeQueryData(); });
+
+ pool.Join();
TC_LOG_INFO("server.loading", ">> Initialized query cache data in %u ms", GetMSTimeDiffToNow(oldMSTime));
}