forked from OSchip/llvm-project
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. llvm-svn: 136190
This commit is contained in:
parent
120992ad81
commit
fbcce6fba3
|
@ -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
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "clang/Lex/DirectoryLookup.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include <vector>
|
||||
|
||||
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<std::pair<unsigned, unsigned> > LookupFileCache;
|
||||
llvm::StringMap<std::pair<unsigned, unsigned>, llvm::BumpPtrAllocator>
|
||||
LookupFileCache;
|
||||
|
||||
|
||||
/// FrameworkMap - This is a collection mapping a framework or subframework
|
||||
/// name like "Carbon" to the Carbon.framework directory.
|
||||
llvm::StringMap<const DirectoryEntry *> FrameworkMap;
|
||||
llvm::StringMap<const DirectoryEntry *, llvm::BumpPtrAllocator>
|
||||
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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in New Issue