]> granicus.if.org Git - clang/commitdiff
Enhance clang_getCXTUResourceUsage() to return the amount of memory used by the Prepr...
authorTed Kremenek <kremenek@apple.com>
Wed, 4 May 2011 01:38:46 +0000 (01:38 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 4 May 2011 01:38:46 +0000 (01:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130823 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang-c/Index.h
include/clang/Lex/PreprocessingRecord.h
tools/libclang/CIndex.cpp

index 2f2876e0fae1eb1079b8d033d6eb315e45f8f391..011999bfe92111a631e0fbd6360af6fc93eef69a 100644 (file)
@@ -1035,12 +1035,14 @@ enum CXTUResourceUsageKind {
   CXTUResourceUsage_SourceManager_Membuffer_MMap = 8,
   CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc = 9, 
   CXTUResourceUsage_ExternalASTSource_Membuffer_MMap = 10, 
+  CXTUResourceUsage_Preprocessor = 11,
+  CXTUResourceUsage_PreprocessingRecord = 12,
   CXTUResourceUsage_MEMORY_IN_BYTES_BEGIN = CXTUResourceUsage_AST,
   CXTUResourceUsage_MEMORY_IN_BYTES_END =
-    CXTUResourceUsage_ExternalASTSource_Membuffer_MMap,
+    CXTUResourceUsage_PreprocessingRecord,
 
   CXTUResourceUsage_First = CXTUResourceUsage_AST,
-  CXTUResourceUsage_Last = CXTUResourceUsage_ExternalASTSource_Membuffer_MMap
+  CXTUResourceUsage_Last = CXTUResourceUsage_PreprocessingRecord
 };
 
 /**
index 7be845549d4a3fffed89a1b08d67c2f7ba2c6635..d1534496b3d39ebf802cf1aa69cc948025a49abb 100644 (file)
@@ -291,6 +291,10 @@ namespace clang {
     /// \brief Deallocate memory in the preprocessing record.
     void Deallocate(void *Ptr) { }
     
+    size_t getTotalMemory() const {
+      return BumpAlloc.getTotalMemory();
+    }
+    
     // Iteration over the preprocessed entities.
     typedef std::vector<PreprocessedEntity *>::iterator iterator;
     typedef std::vector<PreprocessedEntity *>::const_iterator const_iterator;
index e6774dc895cfa75f2b190af24d350fb0a31ab1ab..7e697a7c07f6ddacc72398c50d70b87eb66eb7c9 100644 (file)
@@ -5246,6 +5246,12 @@ const char *clang_getTUResourceUsageName(CXTUResourceUsageKind kind) {
     case CXTUResourceUsage_ExternalASTSource_Membuffer_MMap:
       str = "ExternalASTSource: mmap'ed memory buffers";
       break;
+    case CXTUResourceUsage_Preprocessor:
+      str = "Preprocessor: malloc'ed memory";
+      break;
+    case CXTUResourceUsage_PreprocessingRecord:
+      str = "Preprocessor: PreprocessingRecord";
+      break;
   }
   return str;
 }
@@ -5280,7 +5286,7 @@ CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) {
   unsigned long completionBytes = 0;
   if (GlobalCodeCompletionAllocator *completionAllocator =
       astUnit->getCachedCompletionAllocator().getPtr()) {
-    completionBytes = completionAllocator-> getTotalMemory();
+    completionBytes = completionAllocator->getTotalMemory();
   }
   createCXTUResourceUsageEntry(*entries,
                                CXTUResourceUsage_GlobalCompletionResults,
@@ -5314,7 +5320,21 @@ CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) {
       CXTUResourceUsage_ExternalASTSource_Membuffer_MMap,
                                  (unsigned long) sizes.mmap_bytes);
   }
-
+  
+  // How much memory is being used by the Preprocessor?
+  Preprocessor &pp = astUnit->getPreprocessor();
+  const llvm::BumpPtrAllocator &ppAlloc = pp.getPreprocessorAllocator();
+  createCXTUResourceUsageEntry(*entries,
+                               CXTUResourceUsage_Preprocessor,
+                               ppAlloc.getTotalMemory());
+  
+  if (PreprocessingRecord *pRec = pp.getPreprocessingRecord()) {
+    createCXTUResourceUsageEntry(*entries,
+                                 CXTUResourceUsage_PreprocessingRecord,
+                                 pRec->getTotalMemory());    
+  }
+  
+  
   CXTUResourceUsage usage = { (void*) entries.get(),
                             (unsigned) entries->size(),
                             entries->size() ? &(*entries)[0] : 0 };