summaryrefslogtreecommitdiffstats
path: root/clang/tools/libclang
diff options
context:
space:
mode:
Diffstat (limited to 'clang/tools/libclang')
-rw-r--r--clang/tools/libclang/CIndex.cpp67
-rw-r--r--clang/tools/libclang/libclang.darwin.exports3
-rw-r--r--clang/tools/libclang/libclang.exports3
3 files changed, 73 insertions, 0 deletions
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
index f8ca13aab32..2ac57bf2080 100644
--- a/clang/tools/libclang/CIndex.cpp
+++ b/clang/tools/libclang/CIndex.cpp
@@ -5177,6 +5177,72 @@ CXType clang_getIBOutletCollectionType(CXCursor C) {
} // end: extern "C"
//===----------------------------------------------------------------------===//
+// Inspecting memory usage.
+//===----------------------------------------------------------------------===//
+
+typedef std::vector<CXTUMemoryUsageEntry> MemUsageEntries;
+
+static inline void createCXTUMemoryUsageEntry(MemUsageEntries &entries,
+ enum CXTUMemoryUsageKind k,
+ double amount) {
+ CXTUMemoryUsageEntry entry = { k, amount };
+ entries.push_back(entry);
+}
+
+extern "C" {
+
+const char *clang_getTUMemoryUsageName(CXTUMemoryUsageKind kind) {
+ const char *str = "";
+ switch (kind) {
+ case CXTUMemoryUsage_AST:
+ str = "ASTContext: expressions, declarations, and types";
+ break;
+ case CXTUMemoryUsage_Identifiers:
+ str = "ASTContext: identifiers";
+ break;
+ case CXTUMemoryUsage_Selectors:
+ str = "ASTContext: selectors";
+ }
+ return str;
+}
+
+CXTUMemoryUsage clang_getCXTUMemoryUsage(CXTranslationUnit TU) {
+ if (!TU) {
+ CXTUMemoryUsage usage = { (void*) 0, 0, 0 };
+ return usage;
+ }
+
+ ASTUnit *astUnit = static_cast<ASTUnit*>(TU->TUData);
+ llvm::OwningPtr<MemUsageEntries> entries(new MemUsageEntries());
+ ASTContext &astContext = astUnit->getASTContext();
+
+ // How much memory is used by AST nodes and types?
+ createCXTUMemoryUsageEntry(*entries, CXTUMemoryUsage_AST,
+ (unsigned long) astContext.getTotalAllocatedMemory());
+
+ // How much memory is used by identifiers?
+ createCXTUMemoryUsageEntry(*entries, CXTUMemoryUsage_Identifiers,
+ (unsigned long) astContext.Idents.getAllocator().getTotalMemory());
+
+ // How much memory is used for selectors?
+ createCXTUMemoryUsageEntry(*entries, CXTUMemoryUsage_Selectors,
+ (unsigned long) astContext.Selectors.getTotalMemory());
+
+ CXTUMemoryUsage usage = { (void*) entries.get(),
+ (unsigned) entries->size(),
+ entries->size() ? &(*entries)[0] : 0 };
+ entries.take();
+ return usage;
+}
+
+void clang_disposeCXTUMemoryUsage(CXTUMemoryUsage usage) {
+ if (usage.data)
+ delete (MemUsageEntries*) usage.data;
+}
+
+} // end extern "C"
+
+//===----------------------------------------------------------------------===//
// Misc. utility functions.
//===----------------------------------------------------------------------===//
@@ -5212,3 +5278,4 @@ CXString clang_getClangVersion() {
}
} // end: extern "C"
+
diff --git a/clang/tools/libclang/libclang.darwin.exports b/clang/tools/libclang/libclang.darwin.exports
index 0bb463207f2..6219d557b32 100644
--- a/clang/tools/libclang/libclang.darwin.exports
+++ b/clang/tools/libclang/libclang.darwin.exports
@@ -21,6 +21,7 @@ _clang_defaultEditingTranslationUnitOptions
_clang_defaultReparseOptions
_clang_defaultSaveOptions
_clang_disposeCXCursorSet
+_clang_disposeCXTUMemoryUsage
_clang_disposeCodeCompleteResults
_clang_disposeDiagnostic
_clang_disposeIndex
@@ -35,6 +36,7 @@ _clang_equalTypes
_clang_executeOnThread
_clang_formatDiagnostic
_clang_getCString
+_clang_getCXTUMemoryUsage
_clang_getCXXAccessSpecifier
_clang_getCanonicalCursor
_clang_getCanonicalType
@@ -98,6 +100,7 @@ _clang_getRangeStart
_clang_getResultType
_clang_getSpecializedCursorTemplate
_clang_getSpellingLocation
+_clang_getTUMemoryUsageName
_clang_getTemplateCursorKind
_clang_getTokenExtent
_clang_getTokenKind
diff --git a/clang/tools/libclang/libclang.exports b/clang/tools/libclang/libclang.exports
index ac17b2e74bc..2b960530833 100644
--- a/clang/tools/libclang/libclang.exports
+++ b/clang/tools/libclang/libclang.exports
@@ -21,6 +21,7 @@ clang_defaultEditingTranslationUnitOptions
clang_defaultReparseOptions
clang_defaultSaveOptions
clang_disposeCXCursorSet
+clang_disposeCXTUMemoryUsage
clang_disposeCodeCompleteResults
clang_disposeDiagnostic
clang_disposeIndex
@@ -35,6 +36,7 @@ clang_equalTypes
clang_executeOnThread
clang_formatDiagnostic
clang_getCString
+clang_getCXTUMemoryUsage
clang_getCXXAccessSpecifier
clang_getCanonicalCursor
clang_getCanonicalType
@@ -98,6 +100,7 @@ clang_getRangeStart
clang_getResultType
clang_getSpecializedCursorTemplate
clang_getSpellingLocation
+clang_getTUMemoryUsageName
clang_getTemplateCursorKind
clang_getTokenExtent
clang_getTokenKind
OpenPOWER on IntegriCloud