diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-01 04:09:11 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-01 04:09:11 +1000 |
commit | a8196dfd64881910b46a487363d929001164e4a5 (patch) | |
tree | ea182c0e9895cf2566412ed0caea1672cdf761f5 /source/game/StarRoot.cpp | |
parent | 1a861fb045df72aed28053e388257acee5ff7833 (diff) |
Reorganize root load order
Turns out increasing the root load thread count is detrimental. The databases are always stepping on eachother's toes
Diffstat (limited to 'source/game/StarRoot.cpp')
-rw-r--r-- | source/game/StarRoot.cpp | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/source/game/StarRoot.cpp b/source/game/StarRoot.cpp index 064ce9d..78d46c6 100644 --- a/source/game/StarRoot.cpp +++ b/source/game/StarRoot.cpp @@ -57,7 +57,7 @@ namespace Star { namespace { unsigned const RootMaintenanceSleep = 5000; - unsigned const RootLoadThreads = 8; + unsigned const RootLoadThreads = 4; } atomic<Root*> Root::s_singleton; @@ -292,48 +292,53 @@ void Root::fullyLoad() { auto workerPool = WorkerPool("Root::fullyLoad", RootLoadThreads); List<WorkerPoolHandle> loaders; + loaders.reserve(40); + loaders.append(workerPool.addWork(swallow(bind(&Root::assets, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::configuration, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::codexDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::behaviorDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::techDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::aiDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::questTemplateDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::emoteProcessor, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::terrainDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::particleDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::versioningDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::functionDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::imageMetadataDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::tenantDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::nameGenerator, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::danceDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::spawnTypeDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::radioMessageDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::collectionDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::statisticsDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::speciesDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::projectileDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::stagehandDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::damageDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::effectSourceDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::statusEffectDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::treasureDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::materialDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::objectDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::npcDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::plantDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::projectileDatabase, this)))); + loaders.append(workerPool.addWork(swallow(bind(&Root::itemDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::monsterDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::npcDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::stagehandDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::vehicleDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::playerFactory, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::entityFactory, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::itemDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::materialDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::terrainDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::biomeDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::liquidsDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::statusEffectDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::damageDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::particleDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::effectSourceDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::functionDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::treasureDatabase, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::dungeonDefinitions, this)))); loaders.append(workerPool.addWork(swallow(bind(&Root::tilesetDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::statisticsDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::emoteProcessor, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::speciesDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::imageMetadataDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::versioningDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::questTemplateDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::aiDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::techDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::codexDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::behaviorDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::danceDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::spawnTypeDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::radioMessageDatabase, this)))); - loaders.append(workerPool.addWork(swallow(bind(&Root::collectionDatabase, this)))); + auto startSeconds = Time::monotonicTime(); for (auto& loader : loaders) loader.finish(); + Logger::info("Root: Loaded everything in {} seconds", Time::monotonicTime() - startSeconds); { MutexLocker locker(m_assetsMutex); |