93 if (!IsString(*category)) {
95 isolate, NewTypeError(MessageTemplate::kTraceEventCategoryError));
98#if defined(V8_USE_PERFETTO)
100 perfetto::DynamicCategory dynamic_category{*category_str};
101 enabled = TRACE_EVENT_CATEGORY_ENABLED(dynamic_category);
103 enabled = *GetCategoryGroupEnabled(isolate,
Cast<String>(category));
105 return isolate->heap()->ToBoolean(enabled);
123 if (!IsString(*category)) {
125 isolate, NewTypeError(MessageTemplate::kTraceEventCategoryError));
128#if defined(V8_USE_PERFETTO)
129 MaybeUtf8 category_str(isolate,
Cast<String>(category));
130 perfetto::DynamicCategory dynamic_category{*category_str};
131 if (!TRACE_EVENT_CATEGORY_ENABLED(dynamic_category))
134 const uint8_t* category_group_enabled =
135 GetCategoryGroupEnabled(isolate,
Cast<String>(category));
136 if (!*category_group_enabled)
return ReadOnlyRoots(isolate).false_value();
141 isolate, NewTypeError(MessageTemplate::kTraceEventPhaseError));
143 char phase =
static_cast<char>(
145 if (!IsString(*name_arg)) {
147 isolate, NewTypeError(MessageTemplate::kTraceEventNameError));
155 isolate, NewTypeError(MessageTemplate::kTraceEventIDError));
162 if (name_str->length() == 0) {
164 isolate, NewTypeError(MessageTemplate::kTraceEventNameLengthError));
166 MaybeUtf8
name(isolate, name_str);
170 static const char* arg_name =
"data";
172 int32_t num_args = 0;
173 if (!IsUndefined(*data_arg, isolate)) {
181 JsonStringify(isolate, data_arg, isolate->factory()->undefined_value(),
182 isolate->factory()->undefined_value()));
186#if defined(V8_USE_PERFETTO)
188 auto trace_args = [&](perfetto::EventContext ctx) {
190 MaybeUtf8 arg_contents(isolate,
Cast<String>(arg_json));
191 auto annotation = ctx.event()->add_debug_annotations();
193 annotation->set_legacy_json_value(*arg_contents);
196 auto legacy_event = ctx.event()->set_legacy_event();
197 legacy_event->set_global_id(
id);
203 TRACE_EVENT_BEGIN(dynamic_category, perfetto::DynamicString(*name),
207 TRACE_EVENT_END(dynamic_category, trace_args);
210 TRACE_EVENT_INSTANT(dynamic_category, perfetto::DynamicString(*name),
215 isolate, NewTypeError(MessageTemplate::kTraceEventPhaseError));
222 std::unique_ptr<JsonTraceValue> traced_value(
229 tracing::kNoId, num_args, &arg_name, &arg_type, &arg_value, flags);
static size_t WriteUtf8(Isolate *isolate, DirectHandle< String > string, char *buffer, size_t capacity, Utf8EncodingFlags flags, size_t *processed_characters_return=nullptr)