Skip to content

Commit b0deaa6

Browse files
committed
Add trigger count and clean up handler code
1 parent c52e495 commit b0deaa6

File tree

4 files changed

+55
-105
lines changed

4 files changed

+55
-105
lines changed

src/sst/core/serialization/objectMap.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ ObjectMap::demangle_name(const char* name)
176176
std::string
177177
ObjectMap::listVariable(std::string name, bool& found, int recurse)
178178
{
179-
auto& vars = getVariables();
179+
// auto& vars = getVariables();
180180
ObjectMap* var = findVariable(name);
181181
if ( nullptr == var ) {
182182
found = false;

src/sst/core/serialization/objectMap.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,7 @@ class TraceBuffer
12001200
return;
12011201
}
12021202
if ( state_ != CLEAR ) {
1203-
std::cout << "TriggerRecord:@cycle" << triggerCycle << ": samples lost = " << samplesLost_ << ": ";
1203+
std::cout << "LastTriggerRecord:@cycle" << triggerCycle << ": SamplesLost=" << samplesLost_ << ": ";
12041204
for ( size_t obj = 0; obj < numObjects; obj++ ) {
12051205
ObjectBuffer* varBuffer_ = objBuffers_[obj];
12061206
std::cout << SST::Core::to_string(varBuffer_->getName()) << "=" << varBuffer_->getTriggerVal() << " ";

src/sst/core/watchPoint.cc

Lines changed: 50 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ WatchPoint::InteractiveWPAction::invokeAction(WatchPoint* wp)
3737
msg(" SetInteractive");
3838
wp->setEnterInteractive(); // Trigger action
3939
std::string handlerStr = wp->handlerToString(wp->triggerHandler);
40-
wp->setInteractiveMsg(format_string(" WP%ld: %s : %s ...", wp->wpIndex, handlerStr.c_str(), wp->name_.c_str()));
40+
wp->setInteractiveMsg(
41+
format_string(" Last Trigger: WP%ld: %s : %s ...", wp->wpIndex, handlerStr.c_str(), wp->name_.c_str()));
4142
// Note that the interactive action is delayed and
4243
// we want to be able to print the Trace Buffer there.
4344
// So, resetTraceBuffer for this case is in handlers
@@ -103,37 +104,52 @@ WatchPoint::WatchPoint(size_t index, const std::string& name, Core::Serializatio
103104
WatchPoint::~WatchPoint() {}
104105

105106
void
106-
WatchPoint::beforeHandler(uintptr_t UNUSED(key), const Event* UNUSED(ev))
107+
WatchPoint::genericHandler(HANDLER h)
107108
{
108-
if ( handler & BEFORE_EVENT ) {
109-
msg(" Before Event Handler");
110-
check();
111-
if ( tb_ ) {
109+
if ( tb_ ) {
112110

113-
if ( reset_ && !getInteractive() ) {
114-
tb_->resetTraceBuffer();
115-
reset_ = false;
116-
}
111+
if ( reset_ && !getInteractive() ) {
112+
tb_->resetTraceBuffer();
113+
triggerCount = 0;
114+
reset_ = false;
115+
}
117116

118-
SimTime_t cycle = getCurrentSimCycle();
119-
bool invoke = tb_->sampleT(trigger, cycle, "BE");
120-
trigger = false;
121-
if ( invoke ) {
122-
triggerHandler = HANDLER::BEFORE_EVENT;
123-
setBufferReset();
124-
wpAction->invokeAction(this);
125-
triggerHandler = HANDLER::NONE;
126-
}
117+
SimTime_t cycle = getCurrentSimCycle();
118+
119+
bool invoke = tb_->sampleT(trigger, cycle, handlerToString(h));
120+
if ( trigger == true ) triggerCount++;
121+
trigger = false;
122+
if ( invoke ) {
123+
triggerHandler = h;
124+
setBufferReset();
125+
wpAction->invokeAction(this);
126+
triggerHandler = HANDLER::NONE;
127127
}
128-
else {
129-
msg(" No trace buffer");
130-
if ( trigger ) {
131-
triggerHandler = HANDLER::BEFORE_EVENT;
132-
wpAction->invokeAction(this);
133-
trigger = false;
134-
triggerHandler = HANDLER::NONE;
135-
}
128+
}
129+
else {
130+
msg(" No trace buffer");
131+
if ( reset_ && !getInteractive() ) {
132+
triggerCount = 0;
133+
reset_ = false;
136134
}
135+
if ( trigger ) {
136+
triggerHandler = h;
137+
triggerCount++;
138+
reset_ = true;
139+
wpAction->invokeAction(this);
140+
trigger = false;
141+
triggerHandler = HANDLER::NONE;
142+
}
143+
}
144+
}
145+
146+
void
147+
WatchPoint::beforeHandler(uintptr_t UNUSED(key), const Event* UNUSED(ev))
148+
{
149+
if ( handler & BEFORE_EVENT ) {
150+
msg(" Before Event Handler");
151+
check();
152+
genericHandler(HANDLER::BEFORE_EVENT);
137153
} // if BEFORE_EVENT
138154
}
139155

@@ -143,32 +159,7 @@ WatchPoint::afterHandler(uintptr_t UNUSED(key))
143159
if ( handler & AFTER_EVENT ) {
144160
msg(" After Event Handler");
145161
check();
146-
if ( tb_ ) {
147-
148-
if ( reset_ && !getInteractive() ) {
149-
tb_->resetTraceBuffer();
150-
reset_ = false;
151-
}
152-
153-
SimTime_t cycle = getCurrentSimCycle();
154-
bool invoke = tb_->sampleT(trigger, cycle, "AE");
155-
trigger = false;
156-
if ( invoke ) {
157-
triggerHandler = HANDLER::AFTER_EVENT;
158-
setBufferReset();
159-
wpAction->invokeAction(this);
160-
triggerHandler = HANDLER::NONE;
161-
}
162-
}
163-
else {
164-
msg(" No trace buffer");
165-
if ( trigger ) {
166-
triggerHandler = HANDLER::AFTER_EVENT;
167-
wpAction->invokeAction(this);
168-
trigger = false;
169-
triggerHandler = HANDLER::NONE;
170-
}
171-
}
162+
genericHandler(HANDLER::AFTER_EVENT);
172163
} // if AFTER_EVENT
173164
}
174165

@@ -178,31 +169,7 @@ WatchPoint::beforeHandler(uintptr_t UNUSED(key), const Cycle_t& UNUSED(cycle))
178169
if ( handler & BEFORE_CLOCK ) {
179170
msg(" Before Clock Handler");
180171
check();
181-
if ( tb_ ) {
182-
if ( reset_ && !getInteractive() ) {
183-
tb_->resetTraceBuffer();
184-
reset_ = false;
185-
}
186-
187-
SimTime_t cycle = getCurrentSimCycle();
188-
bool invoke = tb_->sampleT(trigger, cycle, "BC");
189-
trigger = false;
190-
if ( invoke ) {
191-
triggerHandler = HANDLER::BEFORE_CLOCK;
192-
setBufferReset();
193-
wpAction->invokeAction(this);
194-
triggerHandler = HANDLER::NONE;
195-
}
196-
}
197-
else {
198-
msg(" No trace buffer");
199-
if ( trigger ) {
200-
triggerHandler = HANDLER::BEFORE_CLOCK;
201-
wpAction->invokeAction(this);
202-
trigger = false;
203-
triggerHandler = HANDLER::NONE;
204-
}
205-
}
172+
genericHandler(HANDLER::BEFORE_CLOCK);
206173
} // if AFTER_CLOCK
207174
}
208175

@@ -212,31 +179,7 @@ WatchPoint::afterHandler(uintptr_t UNUSED(key), const bool& UNUSED(ret))
212179
if ( handler & AFTER_CLOCK ) {
213180
msg(" After Clock Handler");
214181
check();
215-
if ( tb_ ) {
216-
if ( reset_ && !getInteractive() ) {
217-
tb_->resetTraceBuffer();
218-
reset_ = false;
219-
}
220-
221-
SimTime_t cycle = getCurrentSimCycle();
222-
bool invoke = tb_->sampleT(trigger, cycle, "AC");
223-
trigger = false;
224-
if ( invoke ) {
225-
triggerHandler = HANDLER::AFTER_CLOCK;
226-
setBufferReset();
227-
wpAction->invokeAction(this);
228-
triggerHandler = HANDLER::NONE;
229-
}
230-
}
231-
else {
232-
msg(" No trace buffer");
233-
if ( trigger ) {
234-
triggerHandler = HANDLER::AFTER_CLOCK;
235-
wpAction->invokeAction(this);
236-
trigger = false;
237-
triggerHandler = HANDLER::NONE;
238-
}
239-
}
182+
genericHandler(HANDLER::AFTER_CLOCK);
240183
} // if AFTER_CLOCK
241184
}
242185

@@ -263,6 +206,7 @@ void
263206
WatchPoint::printTrace()
264207
{
265208
if ( tb_ != nullptr ) {
209+
std::cout << "TriggerCount=" << triggerCount << std::endl;
266210
tb_->dumpTriggerRecord();
267211
tb_->dumpTraceBufferT();
268212
}
@@ -329,6 +273,8 @@ WatchPoint::printHandler()
329273
void
330274
WatchPoint::printWatchpoint()
331275
{
276+
277+
std::cout << "TriggerCount " << triggerCount << " : ";
332278
printHandler();
333279
// TODO: print the logic values
334280
for ( size_t i = 0; i < numCmpObj_; i++ ) { // Print trigger tests
@@ -341,6 +287,7 @@ WatchPoint::printWatchpoint()
341287
std::cout << " : ";
342288
}
343289
printAction();
290+
344291
std::cout << std::endl;
345292
}
346293

src/sst/core/watchPoint.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ class WatchPoint : public Clock::HandlerBase::AttachPoint, public Event::Handler
168168
void setHandler(unsigned handlerType);
169169
std::string handlerToString(HANDLER h);
170170
void printHandler();
171+
void genericHandler(HANDLER h);
171172
void printWatchpoint();
172173
void resetTraceBuffer();
173174
inline bool checkReset() { return reset_; }
@@ -204,9 +205,11 @@ class WatchPoint : public Clock::HandlerBase::AttachPoint, public Event::Handler
204205
HANDLER handler = ALL;
205206
bool trigger = false;
206207
HANDLER triggerHandler = HANDLER::NONE;
208+
size_t triggerCount = 0;
207209
bool reset_ = false;
208210
WPAction* wpAction;
209211

212+
210213
void setBufferReset();
211214
void check();
212215
uint32_t verbosity = 0;

0 commit comments

Comments
 (0)