1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_LIBPLATFORM_TRACING_TRACE_WRITER_H_
6 #define V8_LIBPLATFORM_TRACING_TRACE_WRITER_H_
7 
8 #include "include/libplatform/v8-tracing.h"
9 
10 namespace v8 {
11 namespace platform {
12 namespace tracing {
13 
14 class Recorder;
15 
16 class JSONTraceWriter : public TraceWriter {
17  public:
18   explicit JSONTraceWriter(std::ostream& stream);
19   JSONTraceWriter(std::ostream& stream, const std::string& tag);
20   ~JSONTraceWriter() override;
21   void AppendTraceEvent(TraceObject* trace_event) override;
22   void Flush() override;
23 
24  private:
25   void AppendArgValue(uint8_t type, TraceObject::ArgValue value);
26   void AppendArgValue(v8::ConvertableToTraceFormat*);
27 
28   std::ostream& stream_;
29   bool append_comma_ = false;
30 };
31 
32 #if defined(V8_ENABLE_SYSTEM_INSTRUMENTATION)
33 class SystemInstrumentationTraceWriter : public TraceWriter {
34  public:
35   SystemInstrumentationTraceWriter();
36   ~SystemInstrumentationTraceWriter() override;
37   void AppendTraceEvent(TraceObject* trace_event) override;
38   void Flush() override;
39 
40  private:
41   std::unique_ptr<Recorder> recorder_;
42 };
43 #endif
44 
45 }  // namespace tracing
46 }  // namespace platform
47 }  // namespace v8
48 
49 #endif  // V8_LIBPLATFORM_TRACING_TRACE_WRITER_H_
50