[xtrace] Decouple EventCollector from xray (#9024)
author이한종/On-Device Lab(SR)/Engineer/삼성전자 <hanjoung.lee@samsung.com>
Tue, 19 Nov 2019 07:55:24 +0000 (16:55 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 19 Nov 2019 07:55:24 +0000 (16:55 +0900)
- Introduce new EventCollector class that is not dependent on xray
  framework
- Rename as-is `EventCollector` to `EventCollectingListener`

Signed-off-by: Hanjoung Lee <hanjoung.lee@samsung.com>
runtime/contrib/xtrace/src/event_collector.cc
runtime/contrib/xtrace/src/event_collector.h
runtime/contrib/xtrace/src/xtrace.cc

index 2b37bf4..59484ee 100644 (file)
@@ -106,7 +106,26 @@ std::ostream &operator<<(std::ostream &os, const std::chrono::milliseconds &dur)
 
 } // 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();
 
@@ -118,11 +137,11 @@ void EventCollector::notify(const xray::event *e)
     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;
     }
   }
@@ -135,7 +154,7 @@ void EventCollector::notify(const xray::event *e)
     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;
@@ -144,14 +163,11 @@ void EventCollector::notify(const xray::event *e)
     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);
 }
index f088ecd..eeef0d7 100644 (file)
 
 #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__
index 117a2e6..78a1c7e 100644 (file)
@@ -37,13 +37,13 @@ static int entry(int argc, char **argv)
 
   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();