Implement the NamedRegionTimer class
authorChris Lattner <sabre@nondot.org>
Mon, 6 Oct 2003 15:02:31 +0000 (15:02 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 6 Oct 2003 15:02:31 +0000 (15:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8889 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Timer.cpp

index 98001287d9a03a0cf1a5eeedf32182197900a6de..2542a6a2b4cd0b40e18c827af93d261dd4f060f1 100644 (file)
@@ -16,6 +16,7 @@
 #include <algorithm>
 #include <functional>
 #include <fstream>
+#include <map>
 
 // getLibSupportInfoOutputFilename - This ugly hack is brought to you courtesy
 // of constructor/destructor ordering being unspecified by C++.  Basically the
@@ -178,6 +179,23 @@ void Timer::addPeakMemoryMeasurement() {
     (*I)->PeakMem = std::max((*I)->PeakMem, MemUsed-(*I)->PeakMemBase);
 }
 
+//===----------------------------------------------------------------------===//
+//   NamedRegionTimer Implementation
+//===----------------------------------------------------------------------===//
+
+static Timer &getNamedRegionTimer(const std::string &Name) {
+  static std::map<std::string, Timer> NamedTimers;
+
+  std::map<std::string, Timer>::iterator I = NamedTimers.lower_bound(Name);
+  if (I != NamedTimers.end() && I->first == Name)
+    return I->second;
+
+  return NamedTimers.insert(I, std::make_pair(Name, Timer(Name)))->second;
+}
+
+NamedRegionTimer::NamedRegionTimer(const std::string &Name)
+  : TimeRegion(getNamedRegionTimer(Name)) {}
+
 
 //===----------------------------------------------------------------------===//
 //   TimerGroup Implementation