misc: Make the stats callbacks use CallbackQueue2.
authorGabe Black <gabeblack@google.com>
Fri, 14 Aug 2020 07:22:09 +0000 (00:22 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 18 Aug 2020 19:53:31 +0000 (19:53 +0000)
Issue-on: https://gem5.atlassian.net/browse/GEM5-698
Change-Id: Idcbe04bdf4299925f321aa0ece263d86ed3fc8df
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32645
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
12 files changed:
src/base/statistics.cc
src/base/statistics.hh
src/cpu/profile.cc
src/cpu/profile.hh
src/mem/probes/mem_footprint.cc
src/mem/ruby/network/Network.cc
src/mem/ruby/network/Network.hh
src/mem/ruby/slicc_interface/AbstractController.cc
src/mem/ruby/slicc_interface/AbstractController.hh
src/mem/ruby/system/RubySystem.cc
src/mem/ruby/system/RubySystem.hh
src/sim/stat_control.cc

index e4315baf9f8ba58d55cd4e29d22aa39e288a0009..156fcbbe4fda65046c748e8a93ebed7d9a211cd6 100644 (file)
@@ -518,8 +518,8 @@ registerHandlers(Handler reset_handler, Handler dump_handler)
     dumpHandler = dump_handler;
 }
 
-CallbackQueue dumpQueue;
-CallbackQueue resetQueue;
+CallbackQueue2 dumpQueue;
+CallbackQueue2 resetQueue;
 
 void
 processResetQueue()
@@ -534,9 +534,9 @@ processDumpQueue()
 }
 
 void
-registerResetCallback(Callback *cb)
+registerResetCallback(const std::function<void()> &callback)
 {
-    resetQueue.add(cb);
+    resetQueue.push_back(callback);
 }
 
 bool _enabled = false;
@@ -586,9 +586,9 @@ resolve(const std::string &name)
 }
 
 void
-registerDumpCallback(Callback *cb)
+registerDumpCallback(const std::function<void()> &callback)
 {
-    dumpQueue.add(cb);
+    dumpQueue.push_back(callback);
 }
 
 } // namespace Stats
index ee541fbc8818f2c6f58e9ced60caf010e8b401f7..96cd43fec776036bc4cc781ec40717487cf61bf8 100644 (file)
@@ -82,8 +82,6 @@
 #include "base/str.hh"
 #include "base/types.hh"
 
-class Callback;
-
 /** The current simulated tick. */
 extern Tick curTick();
 
@@ -3364,13 +3362,13 @@ void registerHandlers(Handler reset_handler, Handler dump_handler);
  * Register a callback that should be called whenever statistics are
  * reset
  */
-void registerResetCallback(Callback *cb);
+void registerResetCallback(const std::function<void()> &callback);
 
 /**
  * Register a callback that should be called whenever statistics are
  * about to be dumped
  */
-void registerDumpCallback(Callback *cb);
+void registerDumpCallback(const std::function<void()> &callback);
 
 /**
  * Process all the callbacks in the reset callbacks queue
index 393740be9106c559edba6d87ecccaef81b3ae367..d132fc1388d5bddc2f801ac0e0d4d338aebda6f2 100644 (file)
@@ -97,13 +97,7 @@ FunctionProfile::FunctionProfile(std::unique_ptr<BaseStackTrace> _trace,
                                  const Loader::SymbolTable &_symtab) :
     symtab(_symtab), trace(std::move(_trace))
 {
-    reset = new MakeCallback<FunctionProfile, &FunctionProfile::clear>(this);
-    Stats::registerResetCallback(reset);
-}
-
-FunctionProfile::~FunctionProfile()
-{
-    delete reset;
+    Stats::registerResetCallback([this]() { clear(); });
 }
 
 ProfileNode *
index 0f2d8a8383942f0e837e90ea39d2963d9c3f0576..b58447afa6f6b49367176eb15dec4c0e388c1a8f 100644 (file)
@@ -124,13 +124,11 @@ class ProfileNode
     void clear();
 };
 
-class Callback;
 class FunctionProfile
 {
   private:
     friend class ProfileNode;
 
-    Callback *reset = nullptr;
     const Loader::SymbolTable &symtab;
     ProfileNode top;
     std::map<Addr, Counter> pc_count;
@@ -139,7 +137,6 @@ class FunctionProfile
   public:
     FunctionProfile(std::unique_ptr<BaseStackTrace> _trace,
                     const Loader::SymbolTable &symtab);
-    ~FunctionProfile();
 
     ProfileNode *consume(ThreadContext *tc, const StaticInstPtr &inst);
     ProfileNode *consume(const std::vector<Addr> &stack);
index c90719088ff4e3cd1eb1ee1f46a86d0f6f683563..970756803342b610508467c8c2fb4c6b6927bab6 100644 (file)
@@ -82,9 +82,7 @@ MemFootprintProbe::regStats()
         .flags(nozero | nonan);
     // clang-format on
 
-    registerResetCallback(
-        new MakeCallback<MemFootprintProbe, &MemFootprintProbe::statReset>(
-            this));
+    registerResetCallback([this]() { statReset(); });
 }
 
 void
index ba847e5e85c086cc739f2dba42e0358af36d12f7..bf3b637c355a886cf37dec824b1bae1e2cf87bc1 100644 (file)
@@ -125,7 +125,7 @@ Network::Network(const Params *p)
     }
 
     // Register a callback function for combining the statistics
-    Stats::registerDumpCallback(new StatsCallback(this));
+    Stats::registerDumpCallback([this]() { collateStats(); });
 
     for (auto &it : dynamic_cast<Network *>(this)->params()->ext_links) {
         it->params()->ext_node->initNetQueues();
index bba0c5e7f1f9307a4eb26e2bf349e1e3fb925653..6348f6c47f22170cdf0bfb1eab5f8fb380639eec 100644 (file)
@@ -160,24 +160,6 @@ class Network : public ClockedObject
     std::vector<bool> m_ordered;
 
   private:
-    //! Callback class used for collating statistics from all the
-    //! controller of this type.
-    class StatsCallback : public Callback
-    {
-      private:
-        Network *ctr;
-
-      public:
-        virtual ~StatsCallback() {}
-
-        StatsCallback(Network *_ctr)
-            : ctr(_ctr)
-        {
-        }
-
-        void process() {ctr->collateStats();}
-    };
-
     // Global address map
     struct AddrMapNode {
         NodeID id;
index d2b3370388692c618f6d061660f1515bf233d221..599a54b88af2baed245234f734e47ee9c183f243 100644 (file)
@@ -61,7 +61,7 @@ AbstractController::AbstractController(const Params *p)
     if (m_version == 0) {
         // Combine the statistics from all controllers
         // of this particular type.
-        Stats::registerDumpCallback(new StatsCallback(this));
+        Stats::registerDumpCallback([this]() { collateStats(); });
     }
 }
 
index 750a620bdd7f757fd192f49f6dd09c9bbb421956..4820e5c075100651409b6df69f898a51d81609af 100644 (file)
@@ -214,19 +214,6 @@ class AbstractController : public ClockedObject, public Consumer
     Stats::Histogram m_delayHistogram;
     std::vector<Stats::Histogram *> m_delayVCHistogram;
 
-    //! Callback class used for collating statistics from all the
-    //! controller of this type.
-    class StatsCallback : public Callback
-    {
-      private:
-        AbstractController *ctr;
-
-      public:
-        virtual ~StatsCallback() {}
-        StatsCallback(AbstractController *_ctr) : ctr(_ctr) {}
-        void process() {ctr->collateStats();}
-    };
-
     /**
      * Port that forwards requests and receives responses from the
      * memory controller.
index 5babf2ddaef8cf9997aaaa52ccbd913f7d64703d..c35ab023f07df0de37e1acd9d0ad243b414fdd53 100644 (file)
@@ -86,7 +86,7 @@ RubySystem::RubySystem(const Params *p)
     m_abstract_controls.resize(MachineType_NUM);
 
     // Collate the statistics before they are printed.
-    Stats::registerDumpCallback(new RubyStatsCallback(this));
+    Stats::registerDumpCallback([this]() { collateStats(); });
     // Create the profiler
     m_profiler = new Profiler(p, this);
     m_phys_mem = p->phys_mem;
index 7ce5ce078d396cd50a8f79e86a4d596e4fad32fd..d14b3833ca4fdf80957631dae95ac6e1f96f9bdf 100644 (file)
@@ -151,15 +151,4 @@ class RubySystem : public ClockedObject
     std::vector<std::map<uint32_t, AbstractController *> > m_abstract_controls;
 };
 
-class RubyStatsCallback : public Callback
-{
-  private:
-    RubySystem *m_ruby_system;
-
-  public:
-    virtual ~RubyStatsCallback() {}
-    RubyStatsCallback(RubySystem *system) : m_ruby_system(system) {}
-    void process() { m_ruby_system->collateStats(); }
-};
-
 #endif //__MEM_RUBY_SYSTEM_RUBYSYSTEM_HH__
index 291698c8203a75e4202362b770bc614c0abe39dc..9464c0d0d817dc0a60f4dd95c62c4efdc451a325 100644 (file)
@@ -70,15 +70,6 @@ Tick startTick;
 
 GlobalEvent *dumpEvent;
 
-struct SimTicksReset : public Callback
-{
-    void process()
-    {
-        statTime.setTimer();
-        startTick = curTick();
-    }
-};
-
 double
 statElapsedTime()
 {
@@ -101,8 +92,6 @@ statFinalTick()
     return curTick();
 }
 
-SimTicksReset simTicksReset;
-
 struct Global
 {
     Stats::Formula hostInstRate;
@@ -198,7 +187,10 @@ Global::Global()
     hostOpRate = simOps / hostSeconds;
     hostTickRate = simTicks / hostSeconds;
 
-    registerResetCallback(&simTicksReset);
+    registerResetCallback([]() {
+        statTime.setTimer();
+        startTick = curTick();
+    });
 }
 
 void