From 2f5cbe0a78cce0e1bc3fdc82492cf7888ad1a911 Mon Sep 17 00:00:00 2001 From: MistEO Date: Sat, 29 Apr 2023 00:25:21 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20debug=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=89=80=E6=9C=89=E8=B5=84=E6=BA=90=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E8=BF=94=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Config/ResourceLoader.cpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/MaaCore/Config/ResourceLoader.cpp b/src/MaaCore/Config/ResourceLoader.cpp index c074549ed9..29890abcf5 100644 --- a/src/MaaCore/Config/ResourceLoader.cpp +++ b/src/MaaCore/Config/ResourceLoader.cpp @@ -40,6 +40,10 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path) } \ } +#ifdef ASST_DEBUG + // DEBUG 模式下这里同步加载,并检查返回值的,方便排查问题 +#define AsyncLoadConfig(Config, Filename) LoadResourceAndCheckRet(Config, Filename) +#else #define AsyncLoadConfig(Config, Filename) \ { \ auto full_path = path / Filename; \ @@ -49,6 +53,7 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path) return false; \ } \ } +#endif // ASST_DEBUG #define LoadResourceWithTemplAndCheckRet(Config, Filename, TemplDir) \ { \ @@ -73,13 +78,21 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path) std::vector> futures; - // 不太重要又加载的慢的资源,但不怎么占内存的,实时异步加载 - AsyncLoadConfig(StageDropsConfig, "stages.json"_p); - AsyncLoadConfig(TilePack, "Arknights-Tile-Pos"_p); - AsyncLoadConfig(RoguelikeCopilotConfig, "roguelike"_p / "copilot.json"_p); - AsyncLoadConfig(RoguelikeRecruitConfig, "roguelike"_p / "recruitment.json"_p); - AsyncLoadConfig(RoguelikeShoppingConfig, "roguelike"_p / "shopping.json"_p); - AsyncLoadConfig(RoguelikeStageEncounterConfig, "roguelike"_p / "stage_encounter.json"_p); +#ifdef ASST_DEBUG + futures.emplace_back(std::async(std::launch::async, [&]() -> bool { +#endif // ASST_DEBUG + // 不太重要又加载的慢的资源,但不怎么占内存的,实时异步加载 + // DEBUG 模式下这里还是检查返回值的,方便排查问题 + AsyncLoadConfig(StageDropsConfig, "stages.json"_p); + AsyncLoadConfig(TilePack, "Arknights-Tile-Pos"_p); + AsyncLoadConfig(RoguelikeCopilotConfig, "roguelike"_p / "copilot.json"_p); + AsyncLoadConfig(RoguelikeRecruitConfig, "roguelike"_p / "recruitment.json"_p); + AsyncLoadConfig(RoguelikeShoppingConfig, "roguelike"_p / "shopping.json"_p); + AsyncLoadConfig(RoguelikeStageEncounterConfig, "roguelike"_p / "stage_encounter.json"_p); +#ifdef ASST_DEBUG + return true; + })); +#endif // ASST_DEBUG // 太占内存的资源,都是惰性加载 futures.emplace_back(std::async(std::launch::async, [&]() -> bool {