5#ifndef V8_LIBPLATFORM_V8_TRACING_H_
6#define V8_LIBPLATFORM_V8_TRACING_H_
10#include <unordered_set>
17#if defined(V8_USE_PERFETTO_JSON_EXPORT)
18namespace trace_processor {
19class TraceProcessorStorage;
34class TraceEventListener;
38#if !defined(V8_USE_PERFETTO)
52 char phase,
const uint8_t* category_enabled_flag,
const char* name,
53 const char* scope, uint64_t
id, uint64_t bind_id,
int num_args,
54 const char** arg_names,
const uint8_t* arg_types,
55 const uint64_t* arg_values,
56 std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
57 unsigned int flags, int64_t timestamp, int64_t cpu_timestamp);
60 char phase,
const uint8_t* category_enabled_flag,
const char* name,
61 const char* scope, uint64_t
id, uint64_t bind_id,
int num_args,
62 const char** arg_names,
const uint8_t* arg_types,
63 const uint64_t* arg_values,
64 std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
65 unsigned int flags,
int pid,
int tid, int64_t ts, int64_t tts,
66 uint64_t duration, uint64_t cpu_duration);
68 int pid()
const {
return pid_; }
69 int tid()
const {
return tid_; }
70 char phase()
const {
return phase_; }
72 return category_enabled_flag_;
74 const char*
name()
const {
return name_; }
75 const char*
scope()
const {
return scope_; }
76 uint64_t
id()
const {
return id_; }
77 uint64_t
bind_id()
const {
return bind_id_; }
83 return arg_convertables_;
85 unsigned int flags()
const {
return flags_; }
86 int64_t
ts() {
return ts_; }
87 int64_t
tts() {
return tts_; }
97 const uint8_t* category_enabled_flag_;
104 std::unique_ptr<v8::ConvertableToTraceFormat>
106 char* parameter_copy_storage_ =
nullptr;
111 uint64_t cpu_duration_;
127 const std::string& tag);
142 bool IsFull()
const {
return next_free_ == kChunkSize; }
146 uint32_t
seq()
const {
return seq_; }
147 size_t size()
const {
return next_free_; }
149 static const size_t kChunkSize = 64;
152 size_t next_free_ = 0;
170 static const size_t kRingBufferChunks = 1024;
204 TraceConfig() : enable_systrace_(false), enable_argument_filter_(false) {}
207 return included_categories_;
222 bool enable_systrace_ : 1;
223 bool enable_argument_filter_ : 1;
232#define V8_PLATFORM_NON_EXPORTED_BASE(code) \
233 __pragma(warning(suppress : 4275)) code
235#define V8_PLATFORM_NON_EXPORTED_BASE(code) code
250#if defined(V8_USE_PERFETTO)
253 void InitializeForPerfetto(std::ostream* output_stream);
256 void SetTraceEventListenerForTesting(TraceEventListener* listener);
264 ENABLED_FOR_RECORDING = 1 << 0,
266 ENABLED_FOR_EVENT_CALLBACK = 1 << 2,
268 ENABLED_FOR_ETW_EXPORT = 1 << 3
277 char phase,
const uint8_t* category_enabled_flag,
const char* name,
278 const char* scope, uint64_t
id, uint64_t bind_id, int32_t num_args,
279 const char** arg_names,
const uint8_t* arg_types,
280 const uint64_t* arg_values,
281 std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
282 unsigned int flags)
override;
284 char phase,
const uint8_t* category_enabled_flag,
const char* name,
285 const char* scope, uint64_t
id, uint64_t bind_id, int32_t num_args,
286 const char** arg_names,
const uint8_t* arg_types,
287 const uint64_t* arg_values,
288 std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
289 unsigned int flags, int64_t timestamp)
override;
291 const char* name, uint64_t handle)
override;
305#if !defined(V8_USE_PERFETTO)
311#if !defined(V8_USE_PERFETTO)
312 void UpdateCategoryGroupEnabledFlag(
size_t category_index);
313 void UpdateCategoryGroupEnabledFlags();
316 std::unique_ptr<base::Mutex> mutex_;
317 std::unique_ptr<TraceConfig> trace_config_;
318 std::atomic_bool recording_{
false};
320#if defined(V8_USE_PERFETTO_JSON_EXPORT)
321 std::unique_ptr<perfetto::trace_processor::TraceProcessorStorage>
325#if defined(V8_USE_PERFETTO)
326 std::ostream* output_stream_ =
nullptr;
327 TraceEventListener* listener_for_testing_ =
nullptr;
328 std::unique_ptr<perfetto::TracingSession> tracing_session_;
330 std::unordered_set<v8::TracingController::TraceStateObserver*> observers_;
331 std::unique_ptr<TraceBuffer> trace_buffer_;
339#undef V8_PLATFORM_NON_EXPORTED_BASE
Definition: v8-platform.h:461
Definition: v8-tracing.h:16
Definition: libplatform.h:15
#define V8_PLATFORM_NON_EXPORTED_BASE(code)
Definition: v8-tracing.h:235