From 02881a7bf3e5a5920d258d13ed0aed282f252f07 Mon Sep 17 00:00:00 2001 From: Curtis Dunham Date: Wed, 30 Sep 2015 15:21:55 -0500 Subject: 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. --- src/base/debug.hh | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'src/base/debug.hh') 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 _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 kids() { return _kids; } + virtual std::vector kids() { return std::vector(); } 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 _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 kids() { return _kids; } + void enable(); void disable(); }; -- cgit v1.2.3