std::ofstream ofs{argv[2], std::ofstream::out};
// Create an event recorder
- EventRecorder recorder{ofs};
-
- recorder.init();
+ EventRecorder recorder;
EventCollectingListener event_collecting_listener{&recorder};
xray::mux::get().detach(&event_collecting_listener);
- recorder.fini();
+ recorder.writeToFile(ofs);
return 0;
}
#include <mutex>
#include <ostream>
+#include <sstream>
struct 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__
} // 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";
}
};
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 *)
{