} // namespace
-void EventCollector::notify(const xray::event *e)
+void EventCollector::onEvent(const Event &event)
+{
+ auto ts = timestamp();
+
+ switch (event.edge)
+ {
+ case Edge::BEGIN:
+ _rec->emit(DurationEventBuilder(ts).build(event.label, "B"));
+ break;
+
+ case Edge::END:
+ _rec->emit(DurationEventBuilder(ts).build(event.label, "E"));
+ break;
+ }
+
+ // Trace resource usage per each event notification
+ emit_rusage(_rec, ts);
+}
+
+void EventCollectingListener::notify(const xray::event *e)
{
auto ts = timestamp();
switch (info->action())
{
case xdata::trace::enter:
- _rec->emit(DurationEventBuilder(ts).build(info->region()->name(), "B"));
+ _ec.onEvent({EventCollector::Edge::BEGIN, info->region()->name()});
break;
case xdata::trace::leave:
- _rec->emit(DurationEventBuilder(ts).build(info->region()->name(), "E"));
+ _ec.onEvent({EventCollector::Edge::END, info->region()->name()});
break;
}
}
if (auto info = dynamic_cast<const BMBegin *>(BMCategory::get()->event()))
{
auto name = str(info->phase, info->cur_iter);
- _rec->emit(DurationEventBuilder(ts).build(name, "B"));
+ _ec.onEvent({EventCollector::Edge::BEGIN, name});
auto head = make_head(info->phase, info->cur_iter);
std::cout << head << std::endl;
if (auto info = dynamic_cast<const BMEnd *>(BMCategory::get()->event()))
{
auto name = str(info->phase, info->cur_iter);
- _rec->emit(DurationEventBuilder(ts).build(name, "E"));
+ _ec.onEvent({EventCollector::Edge::END, name});
auto head = make_head(info->phase, info->cur_iter);
std::cout << head << " - done " << std::endl;
std::cout << head << " takes " << info->elapsed << "ms" << std::endl;
}
}
-
- // Trace resource usage per each event notification
- emit_rusage(_rec, ts);
}
#include <xray/mux.h>
-class EventCollector final : public xray::listener
+class EventCollector
{
public:
+ enum class Edge
+ {
+ BEGIN,
+ END
+ };
+
+ struct Event
+ {
+ Edge edge;
+ std::string label;
+ };
+
+public:
EventCollector(EventRecorder *rec) : _rec{rec}
{
// DO NOTHING
}
public:
+ void onEvent(const Event &event);
+
+protected:
+ EventRecorder *_rec;
+};
+
+class EventCollectingListener final : public xray::listener
+{
+public:
+ EventCollectingListener(EventRecorder *rec) : _ec{rec}
+ {
+ // DO NOTHING
+ }
+
+public:
void notify(const xray::event *e) final;
private:
- EventRecorder *_rec = nullptr;
+ EventCollector _ec;
};
#endif // __EVENT_COLLECTOR_H__
recorder.init();
- EventCollector event_collector{&recorder};
+ EventCollectingListener event_collecting_listener{&recorder};
- xray::mux::get().attach(&event_collector);
+ xray::mux::get().attach(&event_collecting_listener);
BMRunner<TFL_NNAPI_DELEGATE>().run(argv[3]);
- xray::mux::get().detach(&event_collector);
+ xray::mux::get().detach(&event_collecting_listener);
recorder.fini();