13#if defined(V8_ENABLE_SYSTEM_INSTRUMENTATION)
24 std::ostream& stream) {
25 size_t len = strlen(str);
27 for (
size_t i = 0;
i < len; ++
i) {
66 stream_ << (value.as_uint ?
"true" :
"false");
76 double val = value.as_double;
77 if (std::isfinite(val)) {
78 std::ostringstream convert_stream;
79 convert_stream << val;
80 real = convert_stream.str();
84 if (real.find(
'.') == std::string::npos &&
85 real.find(
'e') == std::string::npos &&
86 real.find(
'E') == std::string::npos) {
89 }
else if (std::isnan(val)) {
94 real =
"\"-Infinity\"";
96 real =
"\"Infinity\"";
104 stream_ <<
"\"" << value.as_pointer <<
"\"";
108 if (value.as_string ==
nullptr) {
120 std::string arg_stringified;
121 value->AppendAsTraceFormat(&arg_stringified);
130 stream_ <<
"{\"" << tag <<
"\":[";
139 <<
",\"tid\":" << trace_event->
tid()
140 <<
",\"ts\":" << trace_event->
ts()
141 <<
",\"tts\":" << trace_event->
tts() <<
",\"ph\":\""
142 << trace_event->
phase() <<
"\",\"cat\":\""
145 <<
"\",\"name\":\"" << trace_event->
name()
146 <<
"\",\"dur\":" << trace_event->
duration()
148 if (trace_event->
flags() &
150 stream_ <<
",\"bind_id\":\"0x" << std::hex << trace_event->
bind_id() <<
"\""
153 stream_ <<
",\"flow_in\":true";
156 stream_ <<
",\"flow_out\":true";
160 if (trace_event->
scope() !=
nullptr) {
161 stream_ <<
",\"scope\":\"" << trace_event->
scope() <<
"\"";
164 stream_ <<
",\"id\":\"0x" << std::hex << trace_event->
id() <<
"\""
168 const char** arg_names = trace_event->
arg_names();
169 const uint8_t* arg_types = trace_event->
arg_types();
171 std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables =
173 for (
int i = 0;
i < trace_event->
num_args(); ++
i) {
175 stream_ <<
"\"" << arg_names[
i] <<
"\":";
193 const std::string& tag) {
197#if defined(V8_ENABLE_SYSTEM_INSTRUMENTATION)
198SystemInstrumentationTraceWriter::SystemInstrumentationTraceWriter() {
199 recorder_ = std::make_unique<Recorder>();
202SystemInstrumentationTraceWriter::~SystemInstrumentationTraceWriter() {
203 recorder_.reset(
nullptr);
206void SystemInstrumentationTraceWriter::AppendTraceEvent(
207 TraceObject* trace_event) {
208 if (recorder_->IsEnabled()) {
209 recorder_->AddEvent(trace_event);
213void SystemInstrumentationTraceWriter::Flush() {}
216 return new SystemInstrumentationTraceWriter();
#define TRACE_VALUE_TYPE_STRING
#define TRACE_VALUE_TYPE_BOOL
#define TRACE_VALUE_TYPE_POINTER
#define TRACE_VALUE_TYPE_COPY_STRING
#define TRACE_VALUE_TYPE_INT
#define TRACE_VALUE_TYPE_UINT
#define TRACE_EVENT_FLAG_HAS_ID
#define TRACE_VALUE_TYPE_DOUBLE
#define TRACE_VALUE_TYPE_CONVERTABLE
#define TRACE_EVENT_FLAG_FLOW_OUT
#define TRACE_EVENT_FLAG_FLOW_IN