changeset 20bbfe5b2b86 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=20bbfe5b2b86
description:
        base: remove Trace::enabled flag

        The DTRACE() macro tests both Trace::enabled and the specific flag. This
        change uses the same administrative interface for enabling/disabling
        tracing, but masks the SimpleFlags settings directly. This eliminates a
        load for every DTRACE() test, e.g. DPRINTF.

diffstat:

 src/base/debug.cc               |  26 ++++++++++++++++++++++----
 src/base/debug.hh               |  31 +++++++++++++++++++++----------
 src/base/trace.cc               |  15 +++++++++++++--
 src/base/trace.hh               |   7 ++++---
 src/cpu/exetrace.hh             |   3 ---
 src/cpu/inst_pb_trace.cc        |   4 ++--
 src/cpu/inteltrace.hh           |   3 ---
 src/python/m5/trace.py          |   4 ++--
 src/python/swig/trace.i         |   6 ++++--
 util/cxx_config/main.cc         |   2 +-
 util/systemc/main.cc            |   2 +-
 util/systemc/sc_gem5_control.cc |   2 +-
 util/tlm/main.cc                |   2 +-
 13 files changed, 72 insertions(+), 35 deletions(-)

diffs (truncated from 312 to 300 lines):

diff -r 11da02681277 -r 20bbfe5b2b86 src/base/debug.cc
--- a/src/base/debug.cc Wed Sep 30 11:14:19 2015 -0500
+++ b/src/base/debug.cc Wed Sep 30 15:21:55 2015 -0500
@@ -68,6 +68,8 @@
     return flags;
 }
 
+bool SimpleFlag::_active = false;
+
 Flag *
 findFlag(const std::string &name)
 {
@@ -95,17 +97,33 @@
 }
 
 void
+SimpleFlag::enableAll()
+{
+    _active = true;
+    for (auto& i : allFlags())
+        i.second->sync();
+}
+
+void
+SimpleFlag::disableAll()
+{
+    _active = false;
+    for (auto& i : allFlags())
+        i.second->sync();
+}
+
+void
 CompoundFlag::enable()
 {
-    SimpleFlag::enable();
-    for_each(_kids.begin(), _kids.end(), mem_fun(&Flag::enable));
+    for (auto& k : _kids)
+        k->enable();
 }
 
 void
 CompoundFlag::disable()
 {
-    SimpleFlag::disable();
-    for_each(_kids.begin(), _kids.end(), mem_fun(&Flag::disable));
+    for (auto& k : _kids)
+        k->disable();
 }
 
 struct AllFlags : public Flag
diff -r 11da02681277 -r 20bbfe5b2b86 src/base/debug.hh
--- a/src/base/debug.hh Wed Sep 30 11:14:19 2015 -0500
+++ b/src/base/debug.hh Wed Sep 30 15:21:55 2015 -0500
@@ -45,7 +45,6 @@
   protected:
     const char *_name;
     const char *_desc;
-    std::vector<Flag *> _kids;
 
   public:
     Flag(const char *name, const char *desc);
@@ -53,33 +52,43 @@
 
     std::string name() const { return _name; }
     std::string desc() const { return _desc; }
-    std::vector<Flag *> kids() { return _kids; }
+    virtual std::vector<Flag *> kids() { return std::vector<Flag*>(); }
 
     virtual void enable() = 0;
     virtual void disable() = 0;
+    virtual void sync() {}
 };
 
 class SimpleFlag : public Flag
 {
+    static bool _active; // whether debug tracings are enabled
   protected:
-    bool _status;
+    bool _tracing; // tracing is enabled and flag is on
+    bool _status;  // flag status
 
   public:
     SimpleFlag(const char *name, const char *desc)
         : Flag(name, desc), _status(false)
     { }
 
-    bool status() const { return _status; }
-    operator bool() const { return _status; }
-    bool operator!() const { return !_status; }
+    bool status() const { return _tracing; }
+    operator bool() const { return _tracing; }
+    bool operator!() const { return !_tracing; }
 
-    void enable() { _status = true; }
-    void disable() { _status = false; }
+    void enable()  { _status = true;  sync(); }
+    void disable() { _status = false; sync(); }
+
+    void sync() { _tracing = _active && _status; }
+
+    static void enableAll();
+    static void disableAll();
 };
 
-class CompoundFlag : public SimpleFlag
+class CompoundFlag : public Flag
 {
   protected:
+    std::vector<Flag *> _kids;
+
     void
     addFlag(Flag *f)
     {
@@ -99,7 +108,7 @@
         Flag *f14 = nullptr, Flag *f15 = nullptr,
         Flag *f16 = nullptr, Flag *f17 = nullptr,
         Flag *f18 = nullptr, Flag *f19 = nullptr)
-        : SimpleFlag(name, desc)
+        : Flag(name, desc)
     {
         addFlag(f00); addFlag(f01); addFlag(f02); addFlag(f03); addFlag(f04);
         addFlag(f05); addFlag(f06); addFlag(f07); addFlag(f08); addFlag(f09);
@@ -107,6 +116,8 @@
         addFlag(f15); addFlag(f16); addFlag(f17); addFlag(f18); addFlag(f19);
     }
 
+    std::vector<Flag *> kids() { return _kids; }
+
     void enable();
     void disable();
 };
diff -r 11da02681277 -r 20bbfe5b2b86 src/base/trace.cc
--- a/src/base/trace.cc Wed Sep 30 11:14:19 2015 -0500
+++ b/src/base/trace.cc Wed Sep 30 15:21:55 2015 -0500
@@ -39,6 +39,7 @@
 #include <sstream>
 #include <string>
 
+#include "base/debug.hh"
 #include "base/misc.hh"
 #include "base/output.hh"
 #include "base/str.hh"
@@ -54,8 +55,6 @@
 namespace Trace
 {
 
-bool enabled = false;
-
 // This variable holds the output logger for debug information.  Other
 // than setting up/redirecting this logger, do *NOT* reference this
 // directly
@@ -87,6 +86,18 @@
         debug_logger = logger;
 }
 
+void
+enable()
+{
+    Debug::SimpleFlag::enableAll();
+}
+
+void
+disable()
+{
+    Debug::SimpleFlag::disableAll();
+}
+
 ObjectMatch ignore;
 
 void
diff -r 11da02681277 -r 20bbfe5b2b86 src/base/trace.hh
--- a/src/base/trace.hh Wed Sep 30 11:14:19 2015 -0500
+++ b/src/base/trace.hh Wed Sep 30 15:21:55 2015 -0500
@@ -116,8 +116,9 @@
 /** Delete the current global logger and assign a new one */
 void setDebugLogger(Logger *logger);
 
-/** Enable debug logging */
-extern bool enabled;
+/** Enable/disable debug logging */
+void enable();
+void disable();
 
 } // namespace Trace
 
@@ -160,7 +161,7 @@
 
 #if TRACING_ON
 
-#define DTRACE(x) ((Debug::x) && Trace::enabled)
+#define DTRACE(x) (Debug::x)
 
 #define DDUMP(x, data, count) do {                                        \
     using namespace Debug;                                                \
diff -r 11da02681277 -r 20bbfe5b2b86 src/cpu/exetrace.hh
--- a/src/cpu/exetrace.hh       Wed Sep 30 11:14:19 2015 -0500
+++ b/src/cpu/exetrace.hh       Wed Sep 30 15:21:55 2015 -0500
@@ -75,9 +75,6 @@
         if (!Debug::ExecEnable)
             return NULL;
 
-        if (!Trace::enabled)
-            return NULL;
-
         return new ExeTracerRecord(when, tc,
                 staticInst, pc, macroStaticInst);
     }
diff -r 11da02681277 -r 20bbfe5b2b86 src/cpu/inst_pb_trace.cc
--- a/src/cpu/inst_pb_trace.cc  Wed Sep 30 11:14:19 2015 -0500
+++ b/src/cpu/inst_pb_trace.cc  Wed Sep 30 15:21:55 2015 -0500
@@ -123,8 +123,8 @@
 InstPBTrace::getInstRecord(Tick when, ThreadContext *tc, const StaticInstPtr 
si,
                            TheISA::PCState pc, const StaticInstPtr mi)
 {
-    // Only record the trace if Exec debugging in enabled
-    if (!Trace::enabled || !Debug::ExecEnable)
+    // Only record the trace if Exec debugging is enabled
+    if (!Debug::ExecEnable)
         return NULL;
 
     return new InstPBTraceRecord(*this, when, tc, si, pc, mi);
diff -r 11da02681277 -r 20bbfe5b2b86 src/cpu/inteltrace.hh
--- a/src/cpu/inteltrace.hh     Wed Sep 30 11:14:19 2015 -0500
+++ b/src/cpu/inteltrace.hh     Wed Sep 30 15:21:55 2015 -0500
@@ -71,9 +71,6 @@
         if (!Debug::ExecEnable)
             return NULL;
 
-        if (!Trace::enabled)
-            return NULL;
-
         return new IntelTraceRecord(when, tc, staticInst, pc, macroStaticInst);
     }
 };
diff -r 11da02681277 -r 20bbfe5b2b86 src/python/m5/trace.py
--- a/src/python/m5/trace.py    Wed Sep 30 11:14:19 2015 -0500
+++ b/src/python/m5/trace.py    Wed Sep 30 15:21:55 2015 -0500
@@ -32,7 +32,7 @@
 from internal.trace import output, ignore
 
 def disable():
-    internal.trace.cvar.enabled = False
+    internal.trace.disable()
 
 def enable():
-    internal.trace.cvar.enabled = True
+    internal.trace.enable()
diff -r 11da02681277 -r 20bbfe5b2b86 src/python/swig/trace.i
--- a/src/python/swig/trace.i   Wed Sep 30 11:14:19 2015 -0500
+++ b/src/python/swig/trace.i   Wed Sep 30 15:21:55 2015 -0500
@@ -54,9 +54,11 @@
     Trace::getDebugLogger()->setIgnore(ignore);
 }
 
-using Trace::enabled;
+inline void enable()  { Trace::enable(); }
+inline void disable() { Trace::disable(); }
 %}
 
 extern void output(const char *string);
 extern void ignore(const char *expr);
-extern bool enabled;
+extern void enable();
+extern void disable();
diff -r 11da02681277 -r 20bbfe5b2b86 util/cxx_config/main.cc
--- a/util/cxx_config/main.cc   Wed Sep 30 11:14:19 2015 -0500
+++ b/util/cxx_config/main.cc   Wed Sep 30 15:21:55 2015 -0500
@@ -117,7 +117,7 @@
     Stats::initSimStats();
     Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
 
-    Trace::enabled = true;
+    Trace::enable();
     setDebugFlag("Terminal");
     // setDebugFlag("CxxConfig");
 
diff -r 11da02681277 -r 20bbfe5b2b86 util/systemc/main.cc
--- a/util/systemc/main.cc      Wed Sep 30 11:14:19 2015 -0500
+++ b/util/systemc/main.cc      Wed Sep 30 15:21:55 2015 -0500
@@ -162,7 +162,7 @@
     Stats::initSimStats();
     Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
 
-    Trace::enabled = true;
+    Trace::enable();
     setDebugFlag("Terminal");
 
     checkpoint_restore = false;
diff -r 11da02681277 -r 20bbfe5b2b86 util/systemc/sc_gem5_control.cc
--- a/util/systemc/sc_gem5_control.cc   Wed Sep 30 11:14:19 2015 -0500
+++ b/util/systemc/sc_gem5_control.cc   Wed Sep 30 15:21:55 2015 -0500
@@ -241,7 +241,7 @@
     Stats::initSimStats();
     Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
 
-    Trace::enabled = true;
+    Trace::enable();
 
     config_file = new CxxIniFile();
 
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to