From d082a91ad617808a6dd89ad9fdb9479524795520 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Wed, 12 Feb 2020 16:14:18 -0500 Subject: faster getSubDirectory() for env::Directory, added lcname instrumentation --- src/shared/directoryentry.h | 59 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 5 deletions(-) (limited to 'src/shared/directoryentry.h') diff --git a/src/shared/directoryentry.h b/src/shared/directoryentry.h index f8c72d77..c8ec8a4e 100644 --- a/src/shared/directoryentry.h +++ b/src/shared/directoryentry.h @@ -60,6 +60,44 @@ class OriginConnection; class FileRegister; +struct DirectoryStats +{ + std::string mod; + + std::chrono::nanoseconds dirTimes; + std::chrono::nanoseconds fileTimes; + std::chrono::nanoseconds sortTimes; + + std::chrono::nanoseconds subdirLookupTimes; + std::chrono::nanoseconds addDirectoryTimes; + + std::chrono::nanoseconds filesLookupTimes; + std::chrono::nanoseconds addFileTimes; + std::chrono::nanoseconds addOriginToFileTimes; + std::chrono::nanoseconds addFileToOriginTimes; + std::chrono::nanoseconds addFileToRegisterTimes; + + int64_t originExists; + int64_t originCreate; + int64_t originsNeededEnabled; + + int64_t subdirExists; + int64_t subdirCreate; + + int64_t fileExists; + int64_t fileCreate; + int64_t filesInsertedInRegister; + int64_t filesAssignedInRegister; + + DirectoryStats(); + + DirectoryStats& operator+=(const DirectoryStats& o); + + static std::string csvHeader(); + std::string toCsv() const; +}; + + class FileEntry { public: @@ -81,6 +119,7 @@ public: FileEntry(); FileEntry(Index index, std::wstring name, DirectoryEntry *parent); + ~FileEntry(); Index getIndex() const { @@ -195,6 +234,7 @@ class FilesOrigin public: FilesOrigin(); FilesOrigin(const FilesOrigin &reference); + ~FilesOrigin(); // sets priority for this origin, but it will overwrite the existing mapping // for this priority, the previous origin will no longer be referenced @@ -224,7 +264,9 @@ public: std::vector getFiles() const; FileEntry::Ptr findFile(FileEntry::Index index) const; + void enable(bool enabled, DirectoryStats& stats, time_t notAfter = LONG_MAX); void enable(bool enabled, time_t notAfter = LONG_MAX); + bool isDisabled() const { return m_Disabled; @@ -260,10 +302,13 @@ class FileRegister { public: FileRegister(boost::shared_ptr originConnection); + ~FileRegister(); bool indexValid(FileEntry::Index index) const; - FileEntry::Ptr createFile(std::wstring name, DirectoryEntry *parent); + FileEntry::Ptr createFile( + std::wstring name, DirectoryEntry *parent, DirectoryStats& stats); + FileEntry::Ptr getFile(FileEntry::Index index) const; size_t size() const @@ -362,7 +407,7 @@ public: void addFromList( const std::wstring &originName, const std::wstring &directory, - env::Directory& root, int priority); + env::Directory& root, int priority, DirectoryStats& stats); void propagateOrigin(int origin); @@ -477,7 +522,7 @@ public: FilesOrigin &createOrigin( const std::wstring &originName, - const std::wstring &directory, int priority); + const std::wstring &directory, int priority, DirectoryStats& stats); void removeFiles(const std::set &indices); @@ -510,7 +555,7 @@ private: FileEntry::Ptr insert( env::File& file, FilesOrigin &origin, - std::wstring_view archive, int order); + std::wstring_view archive, int order, DirectoryStats& stats); void addFiles( FilesOrigin &origin, wchar_t *buffer, int bufferOffset); @@ -519,11 +564,15 @@ private: FilesOrigin &origin, BSA::Folder::Ptr archiveFolder, FILETIME &fileTime, const std::wstring &archiveName, int order); - void addDir(FilesOrigin& origin, env::Directory& d); + void addDir(FilesOrigin& origin, env::Directory& d, DirectoryStats& stats); DirectoryEntry* getSubDirectory( std::wstring_view name, bool create, int originID = -1); + DirectoryEntry* getSubDirectory( + env::Directory& dir, bool create, DirectoryStats& stats, + int originID = -1); + DirectoryEntry* getSubDirectoryRecursive( const std::wstring &path, bool create, int originID = -1); -- cgit v1.3.1