summaryrefslogtreecommitdiff
path: root/src/base/debug.hh
diff options
context:
space:
mode:
authorCurtis Dunham <Curtis.Dunham@arm.com>2015-09-30 15:21:55 -0500
committerCurtis Dunham <Curtis.Dunham@arm.com>2015-09-30 15:21:55 -0500
commit02881a7bf3e5a5920d258d13ed0aed282f252f07 (patch)
tree73b16a32bbfc03c789d75c35d951b108cae98a94 /src/base/debug.hh
parentccf4f6c3d7616c546d78eb21d22ebda812b5e2bb (diff)
downloadgem5-02881a7bf3e5a5920d258d13ed0aed282f252f07.tar.xz
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 (limited to 'src/base/debug.hh')
-rw-r--r--src/base/debug.hh31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/base/debug.hh b/src/base/debug.hh
index 5a03574f1..59a0b6efc 100644
--- a/src/base/debug.hh
+++ b/src/base/debug.hh
@@ -45,7 +45,6 @@ class Flag
protected:
const char *_name;
const char *_desc;
- std::vector<Flag *> _kids;
public:
Flag(const char *name, const char *desc);
@@ -53,33 +52,43 @@ class Flag
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; sync(); }
+ void disable() { _status = false; sync(); }
+
+ void sync() { _tracing = _active && _status; }
- void enable() { _status = true; }
- void disable() { _status = false; }
+ 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 @@ class CompoundFlag : public SimpleFlag
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 @@ class CompoundFlag : public SimpleFlag
addFlag(f15); addFlag(f16); addFlag(f17); addFlag(f18); addFlag(f19);
}
+ std::vector<Flag *> kids() { return _kids; }
+
void enable();
void disable();
};