[llvm-commits] [llvm] r99893 - in /llvm/trunk: include/llvm/ADT/Statistic.h lib/Support/Statistic.cpp

Douglas Gregor dgregor at apple.com
Tue Mar 30 10:32:08 PDT 2010


Author: dgregor
Date: Tue Mar 30 12:32:08 2010
New Revision: 99893

URL: http://llvm.org/viewvc/llvm-project?rev=99893&view=rev
Log:
Introduce namespace-scope functions to enable LLVM statistics without
passing the command-line parameter "-stats" and to print the resulting
statistics without calling llvm_shutdown().


Modified:
    llvm/trunk/include/llvm/ADT/Statistic.h
    llvm/trunk/lib/Support/Statistic.cpp

Modified: llvm/trunk/include/llvm/ADT/Statistic.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Statistic.h?rev=99893&r1=99892&r2=99893&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/Statistic.h (original)
+++ llvm/trunk/include/llvm/ADT/Statistic.h Tue Mar 30 12:32:08 2010
@@ -29,6 +29,7 @@
 #include "llvm/System/Atomic.h"
 
 namespace llvm {
+class raw_ostream;
 
 class Statistic {
 public:
@@ -113,6 +114,15 @@
 #define STATISTIC(VARNAME, DESC) \
   static llvm::Statistic VARNAME = { DEBUG_TYPE, DESC, 0, 0 }
 
+/// \brief Enable the collection and printing of statistics.
+void EnableStatistics();
+
+/// \brief Print statistics to the file returned by CreateInfoOutputFile().
+void PrintStatistics();
+
+/// \brief Print statistics to the given output stream.
+void PrintStatistics(raw_ostream &OS);
+
 } // End llvm namespace
 
 #endif

Modified: llvm/trunk/lib/Support/Statistic.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Statistic.cpp?rev=99893&r1=99892&r2=99893&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Statistic.cpp (original)
+++ llvm/trunk/lib/Support/Statistic.cpp Tue Mar 30 12:32:08 2010
@@ -48,6 +48,8 @@
 /// llvm_shutdown is called.  We print statistics from the destructor.
 class StatisticInfo {
   std::vector<const Statistic*> Stats;
+  friend void llvm::PrintStatistics();
+  friend void llvm::PrintStatistics(raw_ostream &OS);
 public:
   ~StatisticInfo();
   
@@ -92,41 +94,55 @@
 
 // Print information when destroyed, iff command line option is specified.
 StatisticInfo::~StatisticInfo() {
-  // Statistics not enabled?
-  if (Stats.empty()) return;
+  llvm::PrintStatistics();
+}
 
-  // Get the stream to write to.
-  raw_ostream &OutStream = *CreateInfoOutputFile();
+void llvm::EnableStatistics() {
+  Enabled.setValue(true);
+}
+
+void llvm::PrintStatistics(raw_ostream &OS) {
+  StatisticInfo &Stats = *StatInfo;
 
   // Figure out how long the biggest Value and Name fields are.
   unsigned MaxNameLen = 0, MaxValLen = 0;
-  for (size_t i = 0, e = Stats.size(); i != e; ++i) {
+  for (size_t i = 0, e = Stats.Stats.size(); i != e; ++i) {
     MaxValLen = std::max(MaxValLen,
-                         (unsigned)utostr(Stats[i]->getValue()).size());
+                         (unsigned)utostr(Stats.Stats[i]->getValue()).size());
     MaxNameLen = std::max(MaxNameLen,
-                          (unsigned)std::strlen(Stats[i]->getName()));
+                          (unsigned)std::strlen(Stats.Stats[i]->getName()));
   }
   
   // Sort the fields by name.
-  std::stable_sort(Stats.begin(), Stats.end(), NameCompare());
+  std::stable_sort(Stats.Stats.begin(), Stats.Stats.end(), NameCompare());
 
   // Print out the statistics header...
-  OutStream << "===" << std::string(73, '-') << "===\n"
-            << "                          ... Statistics Collected ...\n"
-            << "===" << std::string(73, '-') << "===\n\n";
+  OS << "===" << std::string(73, '-') << "===\n"
+     << "                          ... Statistics Collected ...\n"
+     << "===" << std::string(73, '-') << "===\n\n";
   
   // Print all of the statistics.
-  for (size_t i = 0, e = Stats.size(); i != e; ++i) {
-    std::string CountStr = utostr(Stats[i]->getValue());
-    OutStream << std::string(MaxValLen-CountStr.size(), ' ')
-              << CountStr << " " << Stats[i]->getName()
-              << std::string(MaxNameLen-std::strlen(Stats[i]->getName()), ' ')
-              << " - " << Stats[i]->getDesc() << "\n";
-    
+  for (size_t i = 0, e = Stats.Stats.size(); i != e; ++i) {
+    std::string CountStr = utostr(Stats.Stats[i]->getValue());
+    OS << std::string(MaxValLen-CountStr.size(), ' ')
+       << CountStr << " " << Stats.Stats[i]->getName()
+       << std::string(MaxNameLen-std::strlen(Stats.Stats[i]->getName()), ' ')
+       << " - " << Stats.Stats[i]->getDesc() << "\n";
   }
   
-  OutStream << '\n';  // Flush the output stream.
-  OutStream.flush();
-  
+  OS << '\n';  // Flush the output stream.
+  OS.flush();
+
+}
+
+void llvm::PrintStatistics() {
+  StatisticInfo &Stats = *StatInfo;
+
+  // Statistics not enabled?
+  if (Stats.Stats.empty()) return;
+
+  // Get the stream to write to.
+  raw_ostream &OutStream = *CreateInfoOutputFile();
+  PrintStatistics(OutStream);
   delete &OutStream;   // Close the file.
 }





More information about the llvm-commits mailing list