[rt/misc] Change implementation of EventRecorder (#9424)
author이한종/On-Device Lab(SR)/Engineer/삼성전자 <hanjoung.lee@samsung.com>
Fri, 6 Dec 2019 04:26:59 +0000 (13:26 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Fri, 6 Dec 2019 04:26:59 +0000 (13:26 +0900)
As `EventRecorder` does not have to write to file on-the-fly,
this commit has the following changes.

- Remove ostream object from the member list
- Introduce `writeToFile` method and remove `init and `fini`

Signed-off-by: Hanjoung Lee <hanjoung.lee@samsung.com>
runtime/contrib/xtrace/src/xtrace.cc
runtime/libs/misc/include/misc/EventRecorder.h
runtime/libs/misc/src/EventRecorder.cpp
runtime/neurun/core/src/exec/ExecutionObservers.cc

index 879264b..087202b 100644 (file)
@@ -33,9 +33,7 @@ static int entry(int argc, char **argv)
   std::ofstream ofs{argv[2], std::ofstream::out};
 
   // Create an event recorder
-  EventRecorder recorder{ofs};
-
-  recorder.init();
+  EventRecorder recorder;
 
   EventCollectingListener event_collecting_listener{&recorder};
 
@@ -45,7 +43,7 @@ static int entry(int argc, char **argv)
 
   xray::mux::get().detach(&event_collecting_listener);
 
-  recorder.fini();
+  recorder.writeToFile(ofs);
 
   return 0;
 }
index 510ce0c..1e621fd 100644 (file)
@@ -22,6 +22,7 @@
 #include <mutex>
 
 #include <ostream>
+#include <sstream>
 
 struct Event
 {
@@ -49,24 +50,18 @@ struct CounterEvent : public Event
 class EventRecorder
 {
 public:
-  EventRecorder(std::ostream &os) : _os(os)
-  {
-    // DO NOTHING
-  }
-
-public:
-  void init();
+  EventRecorder() = default;
 
 public:
   void emit(const DurationEvent &evt);
   void emit(const CounterEvent &evt);
 
 public:
-  void fini();
+  void writeToFile(std::ostream &os);
 
 private:
   std::mutex _mu;
-  std::ostream &_os;
+  std::stringstream _ss;
 };
 
 #endif // __EVENT_RECORDER_H__
index c17d80e..5fdeef5 100644 (file)
@@ -107,33 +107,30 @@ std::string object(const CounterEvent &evt)
 
 } // namespace
 
-void EventRecorder::init()
-{
-  std::lock_guard<std::mutex> lock{_mu};
-
-  _os << "{" << std::endl;
-  _os << "  " << quote("traceEvents") << ": [\n";
-}
-
 void EventRecorder::emit(const DurationEvent &evt)
 {
   std::lock_guard<std::mutex> lock{_mu};
 
-  _os << "    " << object(evt) << ",\n";
+  _ss << "    " << object(evt) << ",\n";
 }
 
 void EventRecorder::emit(const CounterEvent &evt)
 {
   std::lock_guard<std::mutex> lock{_mu};
 
-  _os << "    " << object(evt) << ",\n";
+  _ss << "    " << object(evt) << ",\n";
 }
 
-void EventRecorder::fini()
+void EventRecorder::writeToFile(std::ostream &os)
 {
   std::lock_guard<std::mutex> lock{_mu};
 
-  _os << "    { }\n";
-  _os << "  ]\n";
-  _os << "}\n";
+  os << "{\n";
+  os << "  " << quote("traceEvents") << ": [\n";
+
+  os << _ss.str();
+
+  os << "    { }\n";
+  os << "  ]\n";
+  os << "}\n";
 }
index 03c48b2..9d3b195 100644 (file)
@@ -78,12 +78,11 @@ void ProfileObserver::handleEnd(IExecutor *exec, const model::Subgraph *subgraph
 };
 
 ChromeTracingObserver::ChromeTracingObserver(const std::string &filepath)
-    : _ofs{filepath, std::ofstream::out}, _recorder{_ofs}, _collector{&_recorder}
+    : _ofs{filepath, std::ofstream::out}, _recorder{}, _collector{&_recorder}
 {
-  _recorder.init();
 }
 
-ChromeTracingObserver::~ChromeTracingObserver() { _recorder.fini(); }
+ChromeTracingObserver::~ChromeTracingObserver() { _recorder.writeToFile(_ofs); }
 
 void ChromeTracingObserver::handleBegin(IExecutor *)
 {