[gem5-dev] Change in gem5/gem5[develop]: base: Cleanup debug flags API
Andreas Sandberg has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/34118 ) Change subject: base: Cleanup debug flags API .. base: Cleanup debug flags API The debug flags API has a couple of quirks that should be cleaned up. Specifically: * Only CompoundFlag should expose a list of children. * The global enable flag is just called "active", this isn't very descriptive. * Only SimpleFlag exposed a status member. This should be in the base class to make the API symmetric. * Flag::Sync() is an implementation detail and needs to be protected. Change-Id: I4d7fd32c80891191aa04f0bd0c334c8cf8d372f5 Signed-off-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34118 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power Tested-by: kokoro --- M src/base/debug.cc M src/base/debug.hh M src/base/trace.cc M src/python/m5/debug.py M src/python/pybind11/debug.cc 5 files changed, 79 insertions(+), 44 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/base/debug.cc b/src/base/debug.cc index 47febd0..45d9f9d 100644 --- a/src/base/debug.cc +++ b/src/base/debug.cc @@ -1,4 +1,16 @@ /* + * Copyright (c) 2020 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * * Copyright (c) 2003-2005 The Regents of The University of Michigan * All rights reserved. * @@ -67,7 +79,7 @@ return flags; } -bool SimpleFlag::_active = false; +bool Flag::_globalEnable = false; Flag * findFlag(const std::string ) @@ -96,17 +108,17 @@ } void -SimpleFlag::enableAll() +Flag::globalEnable() { -_active = true; +_globalEnable = true; for (auto& i : allFlags()) i.second->sync(); } void -SimpleFlag::disableAll() +Flag::globalDisable() { -_active = false; +_globalEnable = false; for (auto& i : allFlags()) i.second->sync(); } @@ -125,6 +137,19 @@ k->disable(); } +bool +CompoundFlag::status() const +{ +if (_kids.empty()) +return false; + +for (auto& k : _kids) { +if (!k->status()) +return false; +} + +return true; +} bool changeFlag(const char *s, bool value) diff --git a/src/base/debug.hh b/src/base/debug.hh index 1d35be0..a5dc43c 100644 --- a/src/base/debug.hh +++ b/src/base/debug.hh @@ -1,4 +1,16 @@ /* + * Copyright (c) 2020 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * * Copyright (c) 2003-2005 The Regents of The University of Michigan * Copyright (c) 2010 The Hewlett-Packard Development Company * All rights reserved. @@ -42,45 +54,48 @@ class Flag { protected: +static bool _globalEnable; // whether debug tracings are enabled + const char *_name; const char *_desc; +virtual void sync() { } + public: Flag(const char *name, const char *desc); virtual ~Flag(); std::string name() const { return _name; } std::string desc() const { return _desc; } -virtual std::vector kids() { return std::vector(); } virtual void enable() = 0; virtual void disable() = 0; -virtual void sync() {} +virtual bool status() const = 0; + +operator bool() const { return status(); } +bool operator!() const { return !status(); } + +static void globalEnable(); +static void globalDisable(); }; class SimpleFlag : public Flag { -static bool _active; // whether debug tracings are enabled protected: bool _tracing; // tracing is enabled and flag is on bool _status; // flag status +void sync() override { _tracing = _globalEnable && _status; } + public: SimpleFlag(const char *name, const char *desc) : Flag(name, desc), _status(false) { } -bool status() const { return _tracing; }
[gem5-dev] Change in gem5/gem5[develop]: base: Cleanup debug flags API
Andreas Sandberg has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/34118 ) Change subject: base: Cleanup debug flags API .. base: Cleanup debug flags API The debug flags API has a couple of quirks that should be cleaned up. Specifically: * Only CompoundFlag should expose a list of children. * The global enable flag is just called "active", this isn't very descriptive. * Only SimpleFlag exposed a status member. This should be in the base class to make the API symmetric. * Flag::Sync() is an implementation detail and needs to be protected. Change-Id: I4d7fd32c80891191aa04f0bd0c334c8cf8d372f5 Signed-off-by: Andreas Sandberg --- M src/base/debug.cc M src/base/debug.hh M src/base/trace.cc M src/python/m5/debug.py M src/python/pybind11/debug.cc 5 files changed, 79 insertions(+), 44 deletions(-) diff --git a/src/base/debug.cc b/src/base/debug.cc index 47febd0..45d9f9d 100644 --- a/src/base/debug.cc +++ b/src/base/debug.cc @@ -1,4 +1,16 @@ /* + * Copyright (c) 2020 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * * Copyright (c) 2003-2005 The Regents of The University of Michigan * All rights reserved. * @@ -67,7 +79,7 @@ return flags; } -bool SimpleFlag::_active = false; +bool Flag::_globalEnable = false; Flag * findFlag(const std::string ) @@ -96,17 +108,17 @@ } void -SimpleFlag::enableAll() +Flag::globalEnable() { -_active = true; +_globalEnable = true; for (auto& i : allFlags()) i.second->sync(); } void -SimpleFlag::disableAll() +Flag::globalDisable() { -_active = false; +_globalEnable = false; for (auto& i : allFlags()) i.second->sync(); } @@ -125,6 +137,19 @@ k->disable(); } +bool +CompoundFlag::status() const +{ +if (_kids.empty()) +return false; + +for (auto& k : _kids) { +if (!k->status()) +return false; +} + +return true; +} bool changeFlag(const char *s, bool value) diff --git a/src/base/debug.hh b/src/base/debug.hh index 1d35be0..a5dc43c 100644 --- a/src/base/debug.hh +++ b/src/base/debug.hh @@ -1,4 +1,16 @@ /* + * Copyright (c) 2020 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * * Copyright (c) 2003-2005 The Regents of The University of Michigan * Copyright (c) 2010 The Hewlett-Packard Development Company * All rights reserved. @@ -42,45 +54,48 @@ class Flag { protected: +static bool _globalEnable; // whether debug tracings are enabled + const char *_name; const char *_desc; +virtual void sync() { } + public: Flag(const char *name, const char *desc); virtual ~Flag(); std::string name() const { return _name; } std::string desc() const { return _desc; } -virtual std::vector kids() { return std::vector(); } virtual void enable() = 0; virtual void disable() = 0; -virtual void sync() {} +virtual bool status() const = 0; + +operator bool() const { return status(); } +bool operator!() const { return !status(); } + +static void globalEnable(); +static void globalDisable(); }; class SimpleFlag : public Flag { -static bool _active; // whether debug tracings are enabled protected: bool _tracing; // tracing is enabled and flag is on bool _status; // flag status +void sync() override { _tracing = _globalEnable && _status; } + public: SimpleFlag(const char *name, const char *desc) : Flag(name, desc), _status(false) { } -bool status() const { return _tracing; } -operator bool() const { return _tracing; } -bool operator!() const { return !_tracing; } +bool status() const override { return _tracing; } -void enable() { _status = true; sync(); } -void disable() { _status = false; sync(); } - -