diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-05-24 14:49:51 +0200 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-05-24 14:49:51 +0200 |
| commit | 4bcb92fc47181c62af62a55377b62dcfa02252ae (patch) | |
| tree | e6790c631ce2fdcd8156c9dd8b8547d98005b258 | |
| parent | 001e44fec45be3fe94d5075812547c0277f2e6d1 (diff) | |
Use a more generic 'prefetch' method instead of isValid().
| -rw-r--r-- | src/modinfo.cpp | 2 | ||||
| -rw-r--r-- | src/modinfo.h | 12 | ||||
| -rw-r--r-- | src/modinfowithconflictinfo.cpp | 5 | ||||
| -rw-r--r-- | src/modinfowithconflictinfo.h | 9 |
4 files changed, 27 insertions, 1 deletions
diff --git a/src/modinfo.cpp b/src/modinfo.cpp index eb0f0b4f..15fa71da 100644 --- a/src/modinfo.cpp +++ b/src/modinfo.cpp @@ -288,7 +288,7 @@ void ModInfo::updateFromDisc(const QString &modDirectory, std::sort(s_Collection.begin(), s_Collection.end(), ModInfo::ByName); - parallelMap(std::begin(s_Collection), std::end(s_Collection), &ModInfo::isValid, refreshThreadCount); + parallelMap(std::begin(s_Collection), std::end(s_Collection), &ModInfo::prefetch, refreshThreadCount); updateIndices(); diff --git a/src/modinfo.h b/src/modinfo.h index 37a2d24d..29e6124d 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -815,8 +815,20 @@ signals: protected: + /** + * + */ ModInfo(PluginContainer *pluginContainer); + /** + * @brief Prefetch content for this mod. + * + * This method can be used to prefetch content from the mod, e.g., for isValid() + * or getContents(). This method will only be called when first creating the mod + * using multiple threads for all the mods. + */ + virtual void prefetch() = 0; + static void updateIndices(); static bool ByName(const ModInfo::Ptr &LHS, const ModInfo::Ptr &RHS); diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp index 45ecffb7..d2202c3d 100644 --- a/src/modinfowithconflictinfo.cpp +++ b/src/modinfowithconflictinfo.cpp @@ -309,6 +309,11 @@ std::shared_ptr<const IFileTree> ModInfoWithConflictInfo::contentFileTree() cons return m_FileTree; } +void ModInfoWithConflictInfo::prefetch() { + // Populating the tree to 1-depth: + contentFileTree()->size(); +} + bool ModInfoWithConflictInfo::doTestValid() const { auto mdc = m_GamePlugin->feature<ModDataChecker>(); diff --git a/src/modinfowithconflictinfo.h b/src/modinfowithconflictinfo.h index 5bc1d585..68675397 100644 --- a/src/modinfowithconflictinfo.h +++ b/src/modinfowithconflictinfo.h @@ -108,6 +108,15 @@ private: protected: + /** + * @brief Prefetch content for this mod. + * + * This method can be used to prefetch content from the mod, e.g., for isValid() + * or getContents(). This method will only be called when first creating the mod + * using multiple threads for all the mods. + */ + virtual void prefetch() override; + // Current game plugin running in MO2: MOBase::IPluginGame const * const m_GamePlugin; |
