From d1194fbbf65374bfa3578eb40a547e4f97b497d1 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 26 Jul 2011 23:46:11 +0000 Subject: [PATCH] clang_getCXTUResourceUsage: report memory used by HeaderSearch. This required converting the StringMaps to use a BumpPtrAllocator. I measured the compile time and saw no observable regression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@136190 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang-c/Index.h | 5 +++-- include/clang/Lex/HeaderSearch.h | 10 ++++++++-- lib/Lex/HeaderSearch.cpp | 8 +++++++- tools/libclang/CIndex.cpp | 6 ++++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h index ddfaa97bef..e52ed46131 100644 --- a/include/clang-c/Index.h +++ b/include/clang-c/Index.h @@ -1103,12 +1103,13 @@ enum CXTUResourceUsageKind { CXTUResourceUsage_Preprocessor = 11, CXTUResourceUsage_PreprocessingRecord = 12, CXTUResourceUsage_SourceManager_DataStructures = 13, + CXTUResourceUsage_Preprocessor_HeaderSearch = 14, CXTUResourceUsage_MEMORY_IN_BYTES_BEGIN = CXTUResourceUsage_AST, CXTUResourceUsage_MEMORY_IN_BYTES_END = - CXTUResourceUsage_SourceManager_DataStructures, + CXTUResourceUsage_Preprocessor_HeaderSearch, CXTUResourceUsage_First = CXTUResourceUsage_AST, - CXTUResourceUsage_Last = CXTUResourceUsage_SourceManager_DataStructures + CXTUResourceUsage_Last = CXTUResourceUsage_Preprocessor_HeaderSearch }; /** diff --git a/include/clang/Lex/HeaderSearch.h b/include/clang/Lex/HeaderSearch.h index 4d2ed2eccc..b61471d608 100644 --- a/include/clang/Lex/HeaderSearch.h +++ b/include/clang/Lex/HeaderSearch.h @@ -16,6 +16,7 @@ #include "clang/Lex/DirectoryLookup.h" #include "llvm/ADT/StringMap.h" +#include "llvm/Support/Allocator.h" #include namespace clang { @@ -125,12 +126,14 @@ class HeaderSearch { /// and this value doesn't match the current query, the cache has to be /// ignored. The second value is the entry in SearchDirs that satisfied the /// query. - llvm::StringMap > LookupFileCache; + llvm::StringMap, llvm::BumpPtrAllocator> + LookupFileCache; /// FrameworkMap - This is a collection mapping a framework or subframework /// name like "Carbon" to the Carbon.framework directory. - llvm::StringMap FrameworkMap; + llvm::StringMap + FrameworkMap; /// HeaderMaps - This is a mapping from FileEntry -> HeaderMap, uniquing /// headermaps. This vector owns the headermap. @@ -323,6 +326,9 @@ public: search_dir_iterator system_dir_end() const { return SearchDirs.end(); } void PrintStats(); + + size_t getTotalMemory() const; + private: /// getFileInfo - Return the HeaderFileInfo structure for the specified diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index e2fd02983c..789c93f231 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -542,4 +542,10 @@ bool HeaderSearch::ShouldEnterIncludeFile(const FileEntry *File, bool isImport){ return true; } - +size_t HeaderSearch::getTotalMemory() const { + return SearchDirs.capacity() + + FileInfo.capacity() + + HeaderMaps.capacity() + + LookupFileCache.getAllocator().getTotalMemory() + + FrameworkMap.getAllocator().getTotalMemory(); +} diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 6b073f56a9..829649a779 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -5458,6 +5458,9 @@ const char *clang_getTUResourceUsageName(CXTUResourceUsageKind kind) { case CXTUResourceUsage_SourceManager_DataStructures: str = "SourceManager: data structures and tables"; break; + case CXTUResourceUsage_Preprocessor_HeaderSearch: + str = "Preprocessor: header search tables"; + break; } return str; } @@ -5543,6 +5546,9 @@ CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) { pRec->getTotalMemory()); } + createCXTUResourceUsageEntry(*entries, + CXTUResourceUsage_Preprocessor_HeaderSearch, + pp.getHeaderSearchInfo().getTotalMemory()); CXTUResourceUsage usage = { (void*) entries.get(), (unsigned) entries->size(), -- 2.40.0