зеркало из https://github.com/microsoft/clang-1.git
Enhance clang_getCXTUResourceUsage() to report the amount of memory used by ASTContext's side tables.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130383 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
a97d24f2ca
Коммит
ba29bd2551
|
@ -1022,13 +1022,14 @@ enum CXTUResourceUsageKind {
|
|||
CXTUResourceUsage_Selectors = 3,
|
||||
CXTUResourceUsage_GlobalCompletionResults = 4,
|
||||
CXTUResourceUsage_SourceManagerContentCache = 5,
|
||||
CXTUResourceUsage_AST_SideTables = 6,
|
||||
|
||||
CXTUResourceUsage_MEMORY_IN_BYTES_BEGIN = CXTUResourceUsage_AST,
|
||||
CXTUResourceUsage_MEMORY_IN_BYTES_END =
|
||||
CXTUResourceUsage_SourceManagerContentCache,
|
||||
CXTUResourceUsage_AST_SideTables,
|
||||
|
||||
CXTUResourceUsage_First = CXTUResourceUsage_AST,
|
||||
CXTUResourceUsage_Last = CXTUResourceUsage_SourceManagerContentCache
|
||||
CXTUResourceUsage_Last = CXTUResourceUsage_AST_SideTables
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -344,9 +344,11 @@ public:
|
|||
|
||||
/// Return the total amount of physical memory allocated for representing
|
||||
/// AST nodes and type information.
|
||||
size_t getTotalAllocatedMemory() const {
|
||||
size_t getASTAllocatedMemory() const {
|
||||
return BumpAlloc.getTotalMemory();
|
||||
}
|
||||
/// Return the total memory used for various side tables.
|
||||
size_t getSideTableAllocatedMemory() const;
|
||||
|
||||
PartialDiagnostic::StorageAllocator &getDiagAllocator() {
|
||||
return DiagAllocator;
|
||||
|
|
|
@ -6139,3 +6139,19 @@ MangleContext *ASTContext::createMangleContext() {
|
|||
}
|
||||
|
||||
CXXABI::~CXXABI() {}
|
||||
|
||||
size_t ASTContext::getSideTableAllocatedMemory() const {
|
||||
size_t bytes = 0;
|
||||
bytes += ASTRecordLayouts.getMemorySize();
|
||||
bytes += ObjCLayouts.getMemorySize();
|
||||
bytes += KeyFunctions.getMemorySize();
|
||||
bytes += ObjCImpls.getMemorySize();
|
||||
bytes += BlockVarCopyInits.getMemorySize();
|
||||
bytes += DeclAttrs.getMemorySize();
|
||||
bytes += InstantiatedFromStaticDataMember.getMemorySize();
|
||||
bytes += InstantiatedFromUsingDecl.getMemorySize();
|
||||
bytes += InstantiatedFromUsingShadowDecl.getMemorySize();
|
||||
bytes += InstantiatedFromUnnamedFieldDecl.getMemorySize();
|
||||
return bytes;
|
||||
}
|
||||
|
||||
|
|
|
@ -5198,7 +5198,7 @@ typedef std::vector<CXTUResourceUsageEntry> MemUsageEntries;
|
|||
|
||||
static inline void createCXTUResourceUsageEntry(MemUsageEntries &entries,
|
||||
enum CXTUResourceUsageKind k,
|
||||
double amount) {
|
||||
unsigned long amount) {
|
||||
CXTUResourceUsageEntry entry = { k, amount };
|
||||
entries.push_back(entry);
|
||||
}
|
||||
|
@ -5223,6 +5223,9 @@ const char *clang_getTUResourceUsageName(CXTUResourceUsageKind kind) {
|
|||
case CXTUResourceUsage_SourceManagerContentCache:
|
||||
str = "SourceManager: content cache allocator";
|
||||
break;
|
||||
case CXTUResourceUsage_AST_SideTables:
|
||||
str = "ASTContext: side tables";
|
||||
break;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
@ -5239,7 +5242,7 @@ CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) {
|
|||
|
||||
// How much memory is used by AST nodes and types?
|
||||
createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_AST,
|
||||
(unsigned long) astContext.getTotalAllocatedMemory());
|
||||
(unsigned long) astContext.getASTAllocatedMemory());
|
||||
|
||||
// How much memory is used by identifiers?
|
||||
createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_Identifiers,
|
||||
|
@ -5249,6 +5252,10 @@ CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) {
|
|||
createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_Selectors,
|
||||
(unsigned long) astContext.Selectors.getTotalMemory());
|
||||
|
||||
// How much memory is used by ASTContext's side tables?
|
||||
createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_AST_SideTables,
|
||||
(unsigned long) astContext.getSideTableAllocatedMemory());
|
||||
|
||||
// How much memory is used for caching global code completion results?
|
||||
unsigned long completionBytes = 0;
|
||||
if (GlobalCodeCompletionAllocator *completionAllocator =
|
||||
|
|
Загрузка…
Ссылка в новой задаче