Skip to content
Snippets Groups Projects
Commit d5abe1cd authored by Hugues Cassé's avatar Hugues Cassé
Browse files

proc: Monitor cloning behaviour change to let cloned monitors to update

themselves with parent monitor.
etime: update casued by Monitor change.
parent 6e27f784
Branches
No related tags found
No related merge requests found
...@@ -70,9 +70,9 @@ public: ...@@ -70,9 +70,9 @@ public:
class XGraphBuilder: public Monitor { class XGraphBuilder: public Monitor {
friend class AbstractTimeBuilder; friend class AbstractTimeBuilder;
public: public:
static XGraphBuilder *make(const Monitor& mon); static XGraphBuilder *make(Monitor& mon);
XGraphBuilder(const Monitor& mon); XGraphBuilder(Monitor& mon);
virtual ~XGraphBuilder(void); virtual ~XGraphBuilder();
virtual ParExeGraph *build(ParExeSequence *seq) = 0; virtual ParExeGraph *build(ParExeSequence *seq) = 0;
...@@ -92,8 +92,8 @@ private: ...@@ -92,8 +92,8 @@ private:
class XGraphSolver: public Monitor { class XGraphSolver: public Monitor {
friend class AbstractTimeBuilder; friend class AbstractTimeBuilder;
public: public:
static XGraphSolver *make(const Monitor& mon); static XGraphSolver *make(Monitor& mon);
XGraphSolver(const Monitor& mon); XGraphSolver(Monitor& mon);
virtual ~XGraphSolver(void); virtual ~XGraphSolver(void);
sys::Path dumpDir(void) const; sys::Path dumpDir(void) const;
...@@ -117,8 +117,8 @@ class ILPGenerator: public Monitor { ...@@ -117,8 +117,8 @@ class ILPGenerator: public Monitor {
friend class AbstractTimeBuilder; friend class AbstractTimeBuilder;
friend class XGraphSolver; friend class XGraphSolver;
public: public:
static ILPGenerator *make(const Monitor& mon); static ILPGenerator *make(Monitor& mon);
ILPGenerator(const Monitor& mon); ILPGenerator(Monitor& mon);
virtual ~ILPGenerator(void); virtual ~ILPGenerator(void);
virtual void process(WorkSpace *ws) = 0; virtual void process(WorkSpace *ws) = 0;
......
...@@ -55,7 +55,7 @@ class StandardILPGenerator: public ILPGenerator { ...@@ -55,7 +55,7 @@ class StandardILPGenerator: public ILPGenerator {
}; };
public: public:
StandardILPGenerator(const Monitor& mon); StandardILPGenerator(Monitor& mon);
void process(WorkSpace *ws) override; void process(WorkSpace *ws) override;
protected: protected:
......
...@@ -28,7 +28,7 @@ namespace otawa { namespace etime { ...@@ -28,7 +28,7 @@ namespace otawa { namespace etime {
class StepGraphBuilder: public XGraphBuilder { class StepGraphBuilder: public XGraphBuilder {
public: public:
StepGraphBuilder(const Monitor& mon); StepGraphBuilder(Monitor& mon);
~StepGraphBuilder(); ~StepGraphBuilder();
ParExeGraph *build(ParExeSequence *seq); ParExeGraph *build(ParExeSequence *seq);
......
...@@ -35,8 +35,9 @@ class Monitor { ...@@ -35,8 +35,9 @@ class Monitor {
public: public:
static Monitor& null; static Monitor& null;
Monitor(void); Monitor();
Monitor(const Monitor& mon); Monitor(Monitor& mon);
~Monitor();
typedef enum log_level_t { typedef enum log_level_t {
LOG_NONE = 0, LOG_NONE = 0,
...@@ -62,7 +63,7 @@ public: ...@@ -62,7 +63,7 @@ public:
void configure(const PropList& props); void configure(const PropList& props);
protected: protected:
inline void setWorkspace(WorkSpace *workspace) { ws = workspace; } void setWorkspace(WorkSpace *workspace);
static const t::uint32 static const t::uint32
IS_VERBOSE = 0x01, IS_VERBOSE = 0x01,
CUSTOM_SHIFT = 16; CUSTOM_SHIFT = 16;
...@@ -71,6 +72,8 @@ protected: ...@@ -71,6 +72,8 @@ protected:
private: private:
log_level_t log_level; log_level_t log_level;
WorkSpace *ws; WorkSpace *ws;
Monitor *parent;
List<Monitor *> refs;
}; };
// configuration // configuration
......
...@@ -43,7 +43,7 @@ namespace otawa { namespace etime { ...@@ -43,7 +43,7 @@ namespace otawa { namespace etime {
/** /**
*/ */
ILPGenerator::ILPGenerator(const Monitor& mon): Monitor(mon), _atb(nullptr) { ILPGenerator::ILPGenerator(Monitor& mon): Monitor(mon), _atb(nullptr) {
} }
...@@ -335,7 +335,7 @@ void StandardILPGenerator::EventCollector::make(ilp::System *sys) { ...@@ -335,7 +335,7 @@ void StandardILPGenerator::EventCollector::make(ilp::System *sys) {
/** /**
*/ */
StandardILPGenerator::StandardILPGenerator(const Monitor& mon): StandardILPGenerator::StandardILPGenerator(Monitor& mon):
ILPGenerator(mon), ILPGenerator(mon),
_edge(nullptr), _edge(nullptr),
_t_lts(-1), _t_lts(-1),
...@@ -530,7 +530,7 @@ StandardILPGenerator::EventCollector *StandardILPGenerator::get(Event *event) { ...@@ -530,7 +530,7 @@ StandardILPGenerator::EventCollector *StandardILPGenerator::get(Event *event) {
/** /**
* Build the default ILP generator instance. * Build the default ILP generator instance.
*/ */
ILPGenerator *ILPGenerator::make(const Monitor& mon) { ILPGenerator *ILPGenerator::make(Monitor& mon) {
return new StandardILPGenerator(mon); return new StandardILPGenerator(mon);
} }
......
...@@ -30,7 +30,7 @@ namespace otawa { namespace etime { ...@@ -30,7 +30,7 @@ namespace otawa { namespace etime {
*/ */
XGraphBuilder::XGraphBuilder(const Monitor& mon): Monitor(mon), _atb(nullptr) { XGraphBuilder::XGraphBuilder(Monitor& mon): Monitor(mon), _atb(nullptr) {
} }
...@@ -108,7 +108,7 @@ void XGraphBuilder::configure(const PropList& props) { ...@@ -108,7 +108,7 @@ void XGraphBuilder::configure(const PropList& props) {
class StandardXGraphBuilder: public XGraphBuilder { class StandardXGraphBuilder: public XGraphBuilder {
public: public:
StandardXGraphBuilder(const Monitor& mon): XGraphBuilder(mon) { StandardXGraphBuilder(Monitor& mon): XGraphBuilder(mon) {
} }
ParExeGraph *build(ParExeSequence *seq) override { ParExeGraph *build(ParExeSequence *seq) override {
...@@ -451,7 +451,7 @@ private: ...@@ -451,7 +451,7 @@ private:
/** /**
* TODO * TODO
*/ */
XGraphBuilder *XGraphBuilder::make(const Monitor& mon) { XGraphBuilder *XGraphBuilder::make(Monitor& mon) {
return new StandardXGraphBuilder(mon); return new StandardXGraphBuilder(mon);
} }
......
...@@ -51,7 +51,7 @@ namespace otawa { namespace etime { ...@@ -51,7 +51,7 @@ namespace otawa { namespace etime {
/** /**
*/ */
XGraphSolver::XGraphSolver(const Monitor& mon): Monitor(mon), _atb(nullptr) { XGraphSolver::XGraphSolver(Monitor& mon): Monitor(mon), _atb(nullptr) {
} }
...@@ -118,7 +118,7 @@ class StandardXGraphSolver: public XGraphSolver { ...@@ -118,7 +118,7 @@ class StandardXGraphSolver: public XGraphSolver {
public: public:
typedef t::uint32 mask_t; typedef t::uint32 mask_t;
StandardXGraphSolver(const Monitor& mon): XGraphSolver(mon), bedge(nullptr) { StandardXGraphSolver(Monitor& mon): XGraphSolver(mon), bedge(nullptr) {
} }
/** /**
...@@ -873,7 +873,7 @@ void XGraphSolver::contributeNegative(EventCase event, bool prec) { ...@@ -873,7 +873,7 @@ void XGraphSolver::contributeNegative(EventCase event, bool prec) {
* @param mon Monitor to use. * @param mon Monitor to use.
* @return Default graph solver. * @return Default graph solver.
*/ */
XGraphSolver *XGraphSolver::make(const Monitor& mon) { XGraphSolver *XGraphSolver::make(Monitor& mon) {
return new StandardXGraphSolver(mon); return new StandardXGraphSolver(mon);
} }
......
...@@ -40,7 +40,7 @@ StepGraphBuilder::~StepGraphBuilder() { ...@@ -40,7 +40,7 @@ StepGraphBuilder::~StepGraphBuilder() {
/// ///
StepGraphBuilder::StepGraphBuilder(const Monitor& mon): XGraphBuilder(mon) { StepGraphBuilder::StepGraphBuilder(Monitor& mon): XGraphBuilder(mon) {
} }
......
...@@ -48,7 +48,7 @@ class TimeUnitGenerator: public ILPGenerator { ...@@ -48,7 +48,7 @@ class TimeUnitGenerator: public ILPGenerator {
public: public:
TimeUnitGenerator(const Monitor& mon): TimeUnitGenerator(Monitor& mon):
ILPGenerator(mon), ILPGenerator(mon),
tu(nullptr), tu(nullptr),
_t_lts(0), _t_lts(0),
......
...@@ -50,7 +50,7 @@ extern cstring VERBOSE_ENV; ...@@ -50,7 +50,7 @@ extern cstring VERBOSE_ENV;
/** /**
*/ */
Monitor::Monitor(void): flags(0), log_level(LOG_NONE), ws(0) { Monitor::Monitor(void): flags(0), log_level(LOG_NONE), ws(nullptr), parent(nullptr) {
} }
...@@ -58,13 +58,35 @@ Monitor::Monitor(void): flags(0), log_level(LOG_NONE), ws(0) { ...@@ -58,13 +58,35 @@ Monitor::Monitor(void): flags(0), log_level(LOG_NONE), ws(0) {
* Build a monitor by copy. * Build a monitor by copy.
* @param mon Monitor to copy. * @param mon Monitor to copy.
*/ */
Monitor::Monitor(const Monitor& mon) Monitor::Monitor(Monitor& mon)
: out(mon.out.stream()), : out(mon.out.stream()),
log(mon.log.stream()), log(mon.log.stream()),
flags(mon.flags), flags(mon.flags),
log_level(mon.log_level), log_level(mon.log_level),
ws(mon.ws) ws(mon.ws),
parent(&mon)
{ {
mon.refs.add(&mon);
}
///
Monitor::~Monitor() {
if(parent != nullptr)
parent->refs.remove(this);
for(auto r: refs)
r->parent = nullptr;
}
/**
* Update the workspace in the monitor.
* @param workspace New workspace.
*/
void Monitor::setWorkspace(WorkSpace *workspace) {
ws = workspace;
for(auto r: refs)
r->ws = ws;
} }
...@@ -123,8 +145,18 @@ void Monitor::configure(const PropList& props) { ...@@ -123,8 +145,18 @@ void Monitor::configure(const PropList& props) {
if(level >= LOG_BLOCK) if(level >= LOG_BLOCK)
flags |= IS_VERBOSE; flags |= IS_VERBOSE;
} }
}
// record in the children
for(auto r: refs) {
r->out.setStream(out.stream());
r->log.setStream(log.stream());
r->log_level = log_level;
if(flags & IS_VERBOSE)
r->flags |= IS_VERBOSE;
else
r->flags &= ~IS_VERBOSE;
}
}
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment