From fe71dcfdc40bc13a885571e1d6e13e16f46fb00f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Milk?= <rene.milk@wwu.de>
Date: Mon, 7 May 2018 15:57:04 +0200
Subject: [PATCH] [timings] export singleton, improved string passing

---
 dune/xt/common/timings.cc | 16 ++++++++--------
 dune/xt/common/timings.hh | 30 +++++++++++++-----------------
 2 files changed, 21 insertions(+), 25 deletions(-)

diff --git a/dune/xt/common/timings.cc b/dune/xt/common/timings.cc
index caa3cf79d..b42f5b563 100644
--- a/dune/xt/common/timings.cc
+++ b/dune/xt/common/timings.cc
@@ -59,7 +59,7 @@ namespace Dune {
 namespace XT {
 namespace Common {
 
-TimingData::TimingData(const std::string _name)
+TimingData::TimingData(std::string _name)
   : timer_(new boost::timer::cpu_timer)
   , name(_name)
 {
@@ -79,7 +79,7 @@ TimingData::DeltaType TimingData::delta() const
   return {{cast(elapsed.wall * scale), cast(elapsed.user * scale), cast(elapsed.system * scale)}};
 }
 
-void Timings::reset(const std::string section_name)
+void Timings::reset(std::string section_name)
 {
   try {
     stop(section_name);
@@ -89,7 +89,7 @@ void Timings::reset(const std::string section_name)
   commited_deltas_[section_name] = {{0, 0, 0}};
 }
 
-void Timings::start(const std::string section_name)
+void Timings::start(std::string section_name)
 {
   std::lock_guard<std::mutex> lock(mutex_);
 
@@ -107,7 +107,7 @@ void Timings::start(const std::string section_name)
   DXTC_LIKWID_BEGIN_SECTION(section_name)
 } // StartTiming
 
-long Timings::stop(const std::string section_name)
+long Timings::stop(std::string section_name)
 {
   DXTC_LIKWID_END_SECTION(section_name)
   if (known_timers_map_.find(section_name) == known_timers_map_.end())
@@ -126,12 +126,12 @@ long Timings::stop(const std::string section_name)
   return dlt[0];
 } // StopTiming
 
-TimingData::TimeType Timings::walltime(const std::string section_name) const
+TimingData::TimeType Timings::walltime(std::string section_name) const
 {
   return delta(section_name)[0];
 }
 
-TimingData::DeltaType Timings::delta(const std::string section_name) const
+TimingData::DeltaType Timings::delta(std::string section_name) const
 {
   DeltaMap::const_iterator section = commited_deltas_.find(section_name);
   if (section == commited_deltas_.end()) {
@@ -160,13 +160,13 @@ void Timings::reset()
   commited_deltas_.clear();
 } // Reset
 
-void Timings::set_outputdir(const std::string dir)
+void Timings::set_outputdir(std::string dir)
 {
   output_dir_ = dir;
   test_create_directory(output_dir_);
 }
 
-void Timings::output_per_rank(const std::string csv_base) const
+void Timings::output_per_rank(std::string csv_base) const
 {
   const auto rank = MPIHelper::getCollectiveCommunication().rank();
   boost::filesystem::path dir(output_dir_);
diff --git a/dune/xt/common/timings.hh b/dune/xt/common/timings.hh
index 616399841..2af4ad4ce 100644
--- a/dune/xt/common/timings.hh
+++ b/dune/xt/common/timings.hh
@@ -52,7 +52,7 @@ private:
 public:
   std::string name;
 
-  explicit TimingData(const std::string _name = "blank");
+  explicit TimingData(std::string _name = "blank");
 
   void stop();
 
@@ -81,7 +81,6 @@ class Timings
 
 private:
   Timings();
-  ~Timings();
 
   typedef std::map<std::string, std::pair<std::atomic<bool>, PerThreadValue<TimingData>>> KnownTimersMap;
   //! section name -> seconds
@@ -90,26 +89,28 @@ private:
   const TimingData& get_timing_data(std::string section_name) const;
 
 public:
+  ~Timings();
+
   void stop();
 
   //! set this to begin a named section
-  void start(const std::string section_name);
+  void start(std::string section_name);
 
   //! stop named section's counter
-  long stop(const std::string section_name);
+  long stop(std::string section_name);
 
   //! set elapsed time back to 0 for section_name
-  void reset(const std::string section_name);
+  void reset(std::string section_name);
 
   //! get runtime of section in milliseconds
-  TimingData::TimeType walltime(const std::string section_name) const;
+  TimingData::TimeType walltime(std::string section_name) const;
   //! get the full delta array
-  TimingData::DeltaType delta(const std::string section_name) const;
+  TimingData::DeltaType delta(std::string section_name) const;
 
   /** creates one file local to each MPI-rank (no global averaging)
    *  one single rank-0 file with all combined/averaged measures
    ***/
-  void output_per_rank(const std::string csv_base) const;
+  void output_per_rank(std::string csv_base) const;
   //! outputs walltime only w/o MPI-rank averaging
   void output_simple(std::ostream& out = std::cout) const;
   /** output all recorded measures
@@ -120,7 +121,7 @@ public:
   /// stops and resets all timers and data
   void reset();
 
-  void set_outputdir(const std::string dir);
+  void set_outputdir(std::string dir);
 
 private:
   DeltaMap commited_deltas_;
@@ -130,18 +131,13 @@ private:
   KnownTimersMap known_timers_map_;
   const std::string csv_sep_;
   std::mutex mutex_;
-
-  static Timings& instance()
-  {
-    static Timings pf;
-    return pf;
-  }
 };
 
 //! global profiler object
-inline Timings& timings()
+DUNE_EXPORT inline Timings& timings()
 {
-  return Timings::instance();
+  static Timings pf;
+  return pf;
 }
 
 class ScopedTiming : public boost::noncopyable
-- 
GitLab