diff options
-rw-r--r-- | include/clang-c/Index.h | 5 | ||||
-rw-r--r-- | include/clang/Basic/SourceManager.h | 4 | ||||
-rw-r--r-- | lib/Basic/SourceManager.cpp | 8 | ||||
-rw-r--r-- | tools/libclang/CIndex.cpp | 9 |
4 files changed, 23 insertions, 3 deletions
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h index 0a73a644a3..ddfaa97bef 100644 --- a/include/clang-c/Index.h +++ b/include/clang-c/Index.h @@ -1102,12 +1102,13 @@ enum CXTUResourceUsageKind { CXTUResourceUsage_ExternalASTSource_Membuffer_MMap = 10, CXTUResourceUsage_Preprocessor = 11, CXTUResourceUsage_PreprocessingRecord = 12, + CXTUResourceUsage_SourceManager_DataStructures = 13, CXTUResourceUsage_MEMORY_IN_BYTES_BEGIN = CXTUResourceUsage_AST, CXTUResourceUsage_MEMORY_IN_BYTES_END = - CXTUResourceUsage_PreprocessingRecord, + CXTUResourceUsage_SourceManager_DataStructures, CXTUResourceUsage_First = CXTUResourceUsage_AST, - CXTUResourceUsage_Last = CXTUResourceUsage_PreprocessingRecord + CXTUResourceUsage_Last = CXTUResourceUsage_SourceManager_DataStructures }; /** diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h index 4a980dc15b..1bf3278434 100644 --- a/include/clang/Basic/SourceManager.h +++ b/include/clang/Basic/SourceManager.h @@ -970,6 +970,10 @@ public: /// Return the amount of memory used by memory buffers, breaking down /// by heap-backed versus mmap'ed memory. MemoryBufferSizes getMemoryBufferSizes() const; + + // Return the amount of memory used for various side tables and + // data structures in the SourceManager. + size_t getDataStructureSizes() const; //===--------------------------------------------------------------------===// // Other miscellaneous methods. diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp index f2903e985d..68c58f7081 100644 --- a/lib/Basic/SourceManager.cpp +++ b/lib/Basic/SourceManager.cpp @@ -1598,3 +1598,11 @@ SourceManager::MemoryBufferSizes SourceManager::getMemoryBufferSizes() const { return MemoryBufferSizes(malloc_bytes, mmap_bytes); } +size_t SourceManager::getDataStructureSizes() const { + return MemBufferInfos.capacity() + + LocalSLocEntryTable.capacity() + + LoadedSLocEntryTable.capacity() + + SLocEntryLoaded.capacity() + + FileInfos.getMemorySize() + + OverriddenFiles.getMemorySize(); +} diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 017fd0bcfa..6b073f56a9 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -5455,6 +5455,9 @@ const char *clang_getTUResourceUsageName(CXTUResourceUsageKind kind) { case CXTUResourceUsage_PreprocessingRecord: str = "Preprocessor: PreprocessingRecord"; break; + case CXTUResourceUsage_SourceManager_DataStructures: + str = "SourceManager: data structures and tables"; + break; } return str; } @@ -5507,9 +5510,13 @@ CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) { createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_SourceManager_Membuffer_Malloc, (unsigned long) srcBufs.malloc_bytes); - createCXTUResourceUsageEntry(*entries, + createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_SourceManager_Membuffer_MMap, (unsigned long) srcBufs.mmap_bytes); + createCXTUResourceUsageEntry(*entries, + CXTUResourceUsage_SourceManager_DataStructures, + (unsigned long) astContext.getSourceManager() + .getDataStructureSizes()); // How much memory is being used by the ExternalASTSource? if (ExternalASTSource *esrc = astContext.getExternalSource()) { |