From dbb3f5117a3f977bbef34ebdab217f379429d1f2 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sat, 15 Feb 2020 14:22:42 -0500 Subject: removed directoryrefresher.h from organizercore.h --- src/directoryrefresher.cpp | 174 ++++++++++++++++++++++++++++++++---------- src/directoryrefresher.h | 8 +- src/organizercore.cpp | 19 ++--- src/organizercore.h | 41 ++++------ src/shared/directoryentry.cpp | 99 ------------------------ 5 files changed, 160 insertions(+), 181 deletions(-) (limited to 'src') diff --git a/src/directoryrefresher.cpp b/src/directoryrefresher.cpp index 3b92389a..8a64d4a9 100644 --- a/src/directoryrefresher.cpp +++ b/src/directoryrefresher.cpp @@ -45,22 +45,141 @@ using namespace MOBase; using namespace MOShared; -DirectoryRefresher::DirectoryRefresher(std::size_t threadCount) - : m_DirectoryStructure(nullptr), m_threadCount(threadCount), m_lastFileCount(0) +DirectoryStats::DirectoryStats() +{ + std::memset(this, 0, sizeof(DirectoryStats)); +} + +DirectoryStats& DirectoryStats::operator+=(const DirectoryStats& o) +{ + dirTimes += o.dirTimes; + fileTimes += o.fileTimes; + sortTimes += o.sortTimes; + + subdirLookupTimes += o.subdirLookupTimes; + addDirectoryTimes += o.addDirectoryTimes; + + filesLookupTimes += o.filesLookupTimes; + addFileTimes += o.addFileTimes; + addOriginToFileTimes += o.addOriginToFileTimes; + addFileToOriginTimes += o.addFileToOriginTimes; + addFileToRegisterTimes += o.addFileToRegisterTimes; + + originExists += o.originExists; + originCreate += o.originCreate; + originsNeededEnabled += o.originsNeededEnabled; + + subdirExists += o.subdirExists; + subdirCreate += o.subdirCreate; + + fileExists += o.fileExists; + fileCreate += o.fileCreate; + filesInsertedInRegister += o.filesInsertedInRegister; + filesAssignedInRegister += o.filesAssignedInRegister; + + return *this; +} + +std::string DirectoryStats::csvHeader() +{ + QStringList sl = { + "dirTimes", + "fileTimes", + "sortTimes", + "subdirLookupTimes", + "addDirectoryTimes", + "filesLookupTimes", + "addFileTimes", + "addOriginToFileTimes", + "addFileToOriginTimes", + "addFileToRegisterTimes", + "originExists", + "originCreate", + "originsNeededEnabled", + "subdirExists", + "subdirCreate", + "fileExists", + "fileCreate", + "filesInsertedInRegister", + "filesAssignedInRegister"}; + + return sl.join(",").toStdString(); +} + +std::string DirectoryStats::toCsv() const { + QStringList oss; + + auto s = [](auto ns) { + return ns.count() / 1000.0 / 1000.0 / 1000.0; + }; + + oss + << QString::number(s(dirTimes)) + << QString::number(s(fileTimes)) + << QString::number(s(sortTimes)) + + << QString::number(s(subdirLookupTimes)) + << QString::number(s(addDirectoryTimes)) + + << QString::number(s(filesLookupTimes)) + << QString::number(s(addFileTimes)) + << QString::number(s(addOriginToFileTimes)) + << QString::number(s(addFileToOriginTimes)) + << QString::number(s(addFileToRegisterTimes)) + + << QString::number(originExists) + << QString::number(originCreate) + << QString::number(originsNeededEnabled) + + << QString::number(subdirExists) + << QString::number(subdirCreate) + + << QString::number(fileExists) + << QString::number(fileCreate) + << QString::number(filesInsertedInRegister) + << QString::number(filesAssignedInRegister); + + return oss.join(",").toStdString(); +} + +void dumpStats(std::vector& stats) +{ + static int run = 0; + static const std::string file("c:\\tmp\\data.csv"); + + if (run == 0) { + std::ofstream out(file, std::ios::out|std::ios::trunc); + out << fmt::format("what,run,{}", DirectoryStats::csvHeader()) << "\n"; + } + + std::sort(stats.begin(), stats.end(), [](auto&& a, auto&& b){ + return (naturalCompare(QString::fromStdString(a.mod), QString::fromStdString(b.mod)) < 0); + }); + + std::ofstream out(file, std::ios::app); + + DirectoryStats total; + for (const auto& s : stats) { + out << fmt::format("{},{},{}", s.mod, run, s.toCsv()) << "\n"; + total += s; + } + + out << fmt::format("total,{},{}", run, total.toCsv()) << "\n"; + + ++run; } -DirectoryRefresher::~DirectoryRefresher() + +DirectoryRefresher::DirectoryRefresher(std::size_t threadCount) + : m_threadCount(threadCount), m_lastFileCount(0) { - delete m_DirectoryStructure; } DirectoryEntry *DirectoryRefresher::stealDirectoryStructure() { QMutexLocker locker(&m_RefreshLock); - DirectoryEntry *result = m_DirectoryStructure; - m_DirectoryStructure = nullptr; - return result; + return m_Root.release(); } void DirectoryRefresher::setMods(const std::vector > &mods @@ -251,32 +370,6 @@ struct ModThread env::ThreadPool g_threads; -void dumpStats(std::vector& stats) -{ - static int run = 0; - static const std::string file("c:\\tmp\\data.csv"); - - if (run == 0) { - std::ofstream out(file, std::ios::out|std::ios::trunc); - out << fmt::format("what,run,{}", DirectoryStats::csvHeader()) << "\n"; - } - - std::sort(stats.begin(), stats.end(), [](auto&& a, auto&& b){ - return (naturalCompare(QString::fromStdString(a.mod), QString::fromStdString(b.mod)) < 0); - }); - - std::ofstream out(file, std::ios::app); - - DirectoryStats total; - for (const auto& s : stats) { - out << fmt::format("{},{},{}", s.mod, run, s.toCsv()) << "\n"; - total += s; - } - - out << fmt::format("total,{},{}", run, total.toCsv()) << "\n"; - - ++run; -} void DirectoryRefresher::addMultipleModsFilesToStructure( MOShared::DirectoryEntry *directoryStructure, @@ -332,10 +425,9 @@ void DirectoryRefresher::refresh() TimeThis tt("refresh"); QMutexLocker locker(&m_RefreshLock); - delete m_DirectoryStructure; - m_DirectoryStructure = new DirectoryEntry(L"data", nullptr, 0); - m_DirectoryStructure->getFileRegister()->reserve(m_lastFileCount); + m_Root.reset(new DirectoryEntry(L"data", nullptr, 0)); + m_Root->getFileRegister()->reserve(m_lastFileCount); IPluginGame *game = qApp->property("managed_game").value(); @@ -344,20 +436,20 @@ void DirectoryRefresher::refresh() { DirectoryStats dummy; - m_DirectoryStructure->addFromOrigin(L"data", dataDirectory, 0, dummy); + m_Root->addFromOrigin(L"data", dataDirectory, 0, dummy); } std::sort(m_Mods.begin(), m_Mods.end(), [](auto lhs, auto rhs) { return lhs.priority < rhs.priority; }); - addMultipleModsFilesToStructure(m_DirectoryStructure, m_Mods, true); + addMultipleModsFilesToStructure(m_Root.get(), m_Mods, true); - m_DirectoryStructure->getFileRegister()->sortOrigins(); + m_Root->getFileRegister()->sortOrigins(); - cleanStructure(m_DirectoryStructure); + cleanStructure(m_Root.get()); - m_lastFileCount = m_DirectoryStructure->getFileRegister()->highestCount(); + m_lastFileCount = m_Root->getFileRegister()->highestCount(); log::debug("refresher saw {} files", m_lastFileCount); emit progress(100); diff --git a/src/directoryrefresher.h b/src/directoryrefresher.h index 2102140c..e81b55dd 100644 --- a/src/directoryrefresher.h +++ b/src/directoryrefresher.h @@ -50,14 +50,8 @@ public: int priority; }; - /** - * @brief constructor - * - **/ DirectoryRefresher(std::size_t threadCount); - ~DirectoryRefresher(); - // noncopyable DirectoryRefresher(const DirectoryRefresher&) = delete; DirectoryRefresher& operator=(const DirectoryRefresher&) = delete; @@ -145,7 +139,7 @@ signals: private: std::vector m_Mods; std::set m_EnabledArchives; - MOShared::DirectoryEntry *m_DirectoryStructure; + std::unique_ptr m_Root; QMutex m_RefreshLock; std::size_t m_threadCount; std::size_t m_lastFileCount; diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 2c680847..80df044a 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -34,6 +34,7 @@ #include "env.h" #include "envmodule.h" #include "envfs.h" +#include "directoryrefresher.h" #include "shared/directoryentry.h" #include "shared/filesorigin.h" #include "shared/fileentry.h" @@ -96,7 +97,7 @@ OrganizerCore::OrganizerCore(Settings &settings) , m_Updater(NexusInterface::instance(m_PluginContainer)) , m_ModList(m_PluginContainer, this) , m_PluginList(this) - , m_DirectoryRefresher(settings.refreshThreadCount()) + , m_DirectoryRefresher(new DirectoryRefresher(settings.refreshThreadCount())) , m_DirectoryStructure(new DirectoryEntry(L"data", nullptr, 0)) , m_DownloadManager(NexusInterface::instance(m_PluginContainer), this) , m_DirectoryUpdate(false) @@ -114,7 +115,7 @@ OrganizerCore::OrganizerCore(Settings &settings) connect(&m_DownloadManager, SIGNAL(downloadSpeed(QString, int)), this, SLOT(downloadSpeed(QString, int))); - connect(&m_DirectoryRefresher, SIGNAL(refreshed()), this, + connect(m_DirectoryRefresher.get(), SIGNAL(refreshed()), this, SLOT(directory_refreshed())); connect(&m_ModList, SIGNAL(removeOrigin(QString)), this, @@ -139,7 +140,7 @@ OrganizerCore::OrganizerCore(Settings &settings) // make directory refresher run in a separate thread m_RefresherThread.start(); - m_DirectoryRefresher.moveToThread(&m_RefresherThread); + m_DirectoryRefresher->moveToThread(&m_RefresherThread); } OrganizerCore::~OrganizerCore() @@ -1255,7 +1256,7 @@ void OrganizerCore::updateModsInDirectoryStructure(QMapstealFiles(), {}, m_CurrentProfile->getModPriority(idx)}); } - m_DirectoryRefresher.addMultipleModsFilesToStructure( + m_DirectoryRefresher->addMultipleModsFilesToStructure( m_DirectoryStructure, entries); DirectoryRefresher::cleanStructure(m_DirectoryStructure); @@ -1274,13 +1275,13 @@ void OrganizerCore::updateModsInDirectoryStructure(QMap archives = enabledArchives(); - m_DirectoryRefresher.setMods( + m_DirectoryRefresher->setMods( m_CurrentProfile->getActiveMods(), std::set(archives.begin(), archives.end())); // finally also add files from bsas to the directory structure for (auto idx : modInfo.keys()) { - m_DirectoryRefresher.addModBSAToStructure( + m_DirectoryRefresher->addModBSAToStructure( m_DirectoryStructure, modInfo[idx]->name(), m_CurrentProfile->getModPriority(idx), modInfo[idx]->absolutePath(), modInfo[idx]->archives()); @@ -1398,18 +1399,18 @@ void OrganizerCore::refreshDirectoryStructure() const auto activeModList = m_CurrentProfile->getActiveMods(); const auto archives = enabledArchives(); - m_DirectoryRefresher.setMods( + m_DirectoryRefresher->setMods( activeModList, std::set(archives.begin(), archives.end())); // runs refresh() in a thread - QTimer::singleShot(0, &m_DirectoryRefresher, SLOT(refresh())); + QTimer::singleShot(0, m_DirectoryRefresher.get(), SLOT(refresh())); } void OrganizerCore::directory_refreshed() { log::debug("structure refreshed"); - DirectoryEntry *newStructure = m_DirectoryRefresher.stealDirectoryStructure(); + DirectoryEntry *newStructure = m_DirectoryRefresher->stealDirectoryStructure(); Q_ASSERT(newStructure != m_DirectoryStructure); if (newStructure == nullptr) { diff --git a/src/organizercore.h b/src/organizercore.h index 980156d3..a4d1a799 100644 --- a/src/organizercore.h +++ b/src/organizercore.h @@ -1,13 +1,11 @@ #ifndef ORGANIZERCORE_H #define ORGANIZERCORE_H - #include "selfupdater.h" #include "settings.h" #include "modlist.h" #include "modinfo.h" #include "pluginlist.h" -#include "directoryrefresher.h" #include "installationmanager.h" #include "downloadmanager.h" #include "executableslist.h" @@ -23,17 +21,6 @@ #include "executableinfo.h" #include -class ModListSortProxy; -class PluginListSortProxy; -class Profile; -class IUserInterface; - -namespace MOBase { - template class GuessedValue; - class IModInterface; -} -namespace MOShared { class DirectoryEntry; } - #include #include #include @@ -44,21 +31,25 @@ namespace MOShared { class DirectoryEntry; } #include #include -class QNetworkReply; -class QUrl; -class QWidget; - -#include //for HANDLE, LPDWORD - -#include -#include - +class ModListSortProxy; +class PluginListSortProxy; +class Profile; +class IUserInterface; class PluginContainer; +class DirectoryRefresher; -namespace MOBase { +namespace MOBase +{ + template class GuessedValue; + class IModInterface; class IPluginGame; } +namespace MOShared +{ + class DirectoryEntry; +} + class OrganizerCore : public QObject, public MOBase::IPluginDiagnose { @@ -113,7 +104,7 @@ public: SelfUpdater *updater() { return &m_Updater; } InstallationManager *installationManager(); MOShared::DirectoryEntry *directoryStructure() { return m_DirectoryStructure; } - DirectoryRefresher *directoryRefresher() { return &m_DirectoryRefresher; } + DirectoryRefresher *directoryRefresher() { return m_DirectoryRefresher.get(); } ExecutablesList *executablesList() { return &m_ExecutablesList; } void setExecutablesList(const ExecutablesList &executablesList) { m_ExecutablesList = executablesList; @@ -337,7 +328,7 @@ private: QStringList m_DefaultArchives; QStringList m_ActiveArchives; - DirectoryRefresher m_DirectoryRefresher; + std::unique_ptr m_DirectoryRefresher; MOShared::DirectoryEntry *m_DirectoryStructure; DownloadManager m_DownloadManager; diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp index 14c8323e..7f140750 100644 --- a/src/shared/directoryentry.cpp +++ b/src/shared/directoryentry.cpp @@ -73,105 +73,6 @@ static bool DirCompareByName(const DirectoryEntry *lhs, const DirectoryEntry *rh } -DirectoryStats::DirectoryStats() -{ - std::memset(this, 0, sizeof(DirectoryStats)); -} - -DirectoryStats& DirectoryStats::operator+=(const DirectoryStats& o) -{ - dirTimes += o.dirTimes; - fileTimes += o.fileTimes; - sortTimes += o.sortTimes; - - subdirLookupTimes += o.subdirLookupTimes; - addDirectoryTimes += o.addDirectoryTimes; - - filesLookupTimes += o.filesLookupTimes; - addFileTimes += o.addFileTimes; - addOriginToFileTimes += o.addOriginToFileTimes; - addFileToOriginTimes += o.addFileToOriginTimes; - addFileToRegisterTimes += o.addFileToRegisterTimes; - - originExists += o.originExists; - originCreate += o.originCreate; - originsNeededEnabled += o.originsNeededEnabled; - - subdirExists += o.subdirExists; - subdirCreate += o.subdirCreate; - - fileExists += o.fileExists; - fileCreate += o.fileCreate; - filesInsertedInRegister += o.filesInsertedInRegister; - filesAssignedInRegister += o.filesAssignedInRegister; - - return *this; -} - -std::string DirectoryStats::csvHeader() -{ - QStringList sl = { - "dirTimes", - "fileTimes", - "sortTimes", - "subdirLookupTimes", - "addDirectoryTimes", - "filesLookupTimes", - "addFileTimes", - "addOriginToFileTimes", - "addFileToOriginTimes", - "addFileToRegisterTimes", - "originExists", - "originCreate", - "originsNeededEnabled", - "subdirExists", - "subdirCreate", - "fileExists", - "fileCreate", - "filesInsertedInRegister", - "filesAssignedInRegister"}; - - return sl.join(",").toStdString(); -} - -std::string DirectoryStats::toCsv() const -{ - QStringList oss; - - auto s = [](auto ns) { - return ns.count() / 1000.0 / 1000.0 / 1000.0; - }; - - oss - << QString::number(s(dirTimes)) - << QString::number(s(fileTimes)) - << QString::number(s(sortTimes)) - - << QString::number(s(subdirLookupTimes)) - << QString::number(s(addDirectoryTimes)) - - << QString::number(s(filesLookupTimes)) - << QString::number(s(addFileTimes)) - << QString::number(s(addOriginToFileTimes)) - << QString::number(s(addFileToOriginTimes)) - << QString::number(s(addFileToRegisterTimes)) - - << QString::number(originExists) - << QString::number(originCreate) - << QString::number(originsNeededEnabled) - - << QString::number(subdirExists) - << QString::number(subdirCreate) - - << QString::number(fileExists) - << QString::number(fileCreate) - << QString::number(filesInsertedInRegister) - << QString::number(filesAssignedInRegister); - - return oss.join(",").toStdString(); -} - - DirectoryEntry::DirectoryEntry( std::wstring name, DirectoryEntry *parent, int originID) : m_OriginConnection(new OriginConnection), -- cgit v1.3.1