5#ifndef V8_TRACING_CODE_DATA_SOURCE_H_
6#define V8_TRACING_CODE_DATA_SOURCE_H_
10#include <unordered_map>
12#include "perfetto/protozero/scattered_heap_buffer.h"
13#include "perfetto/tracing/data_source.h"
14#include "protos/perfetto/config/chrome/v8_config.gen.h"
15#include "protos/perfetto/trace/interned_data/interned_data.pbzero.h"
25class CodeDataSourceIncrementalState;
28class SharedFunctionInfo;
30#if V8_ENABLE_WEBASSEMBLY
42 :
public perfetto::DataSource<CodeDataSource, CodeDataSourceTraits> {
46 void OnSetup(
const SetupArgs&)
override;
47 void OnStart(
const StartArgs&)
override;
48 void OnStop(
const StopArgs&)
override;
50 const perfetto::protos::gen::V8Config&
config()
const {
return config_; }
53 using Base = DataSource<CodeDataSource, CodeDataSourceTraits>;
61 void Init(
const CodeDataSource::TraceContext& context);
68 CodeDataSource::TraceContext::TracePacketHandle& packet);
74 uint64_t v8_js_script_iid,
int line_num,
76#if V8_ENABLE_WEBASSEMBLY
77 uint64_t InternWasmScript(
Isolate& isolate,
int script_id,
78 const std::string& url,
118 return !(*
this == other);
145 protozero::HeapBuffered<perfetto::protos::pbzero::InternedData>
149 std::unordered_map<ScriptUniqueId, uint64_t, ScriptUniqueId::Hash>
scripts_;
150 std::unordered_map<Function, uint64_t, Function::Hash>
functions_;
151 std::unordered_map<PerfettoV8String, uint64_t, PerfettoV8String::Hasher>
static constexpr size_t Combine(const T &... ts)
uint64_t JsFunctionNameIid
void Init(const CodeDataSource::TraceContext &context)
uint64_t next_function_iid() const
uint64_t InternJsFunctionName(Tagged< String > function_name)
bool has_buffered_interned_data() const
CodeDataSourceIncrementalState()=default
uint64_t InternJsScript(Isolate &isolate, Tagged< Script > script)
void FlushInternedData(CodeDataSource::TraceContext::TracePacketHandle &packet)
bool log_script_sources() const
uint64_t InternIsolate(Isolate &isolate)
std::unordered_map< std::string, uint64_t > two_byte_function_names_
std::unordered_map< ScriptUniqueId, uint64_t, ScriptUniqueId::Hash > scripts_
bool is_initialized() const
std::unordered_map< Function, uint64_t, Function::Hash > functions_
bool log_instructions() const
uint64_t InternJsFunction(Isolate &isolate, DirectHandle< SharedFunctionInfo > info, uint64_t v8_js_script_iid, int line_num, int column_num)
uint64_t next_script_iid() const
std::unordered_map< int, uint64_t > isolates_
uint64_t next_isolate_iid() const
protozero::HeapBuffered< perfetto::protos::pbzero::InternedData > serialized_interned_data_
std::unordered_map< PerfettoV8String, uint64_t, PerfettoV8String::Hasher > js_function_names_
uint64_t next_js_function_name_iid() const
perfetto::protos::gen::V8Config config_
DataSource< CodeDataSource, CodeDataSourceTraits > Base
void OnSetup(const SetupArgs &) override
void OnStart(const StartArgs &) override
void OnStop(const StopArgs &) override
const perfetto::protos::gen::V8Config & config() const
PERFETTO_DECLARE_DATA_SOURCE_STATIC_MEMBERS(v8::internal::CodeDataSource, v8::internal::CodeDataSourceTraits)
size_t operator()(const Function &f) const
bool operator!=(const Function &other) const
uint64_t v8_js_script_iid
bool operator==(const Function &other) const
size_t operator()(const ScriptUniqueId &id) const
bool operator!=(const ScriptUniqueId &other) const
bool operator==(const ScriptUniqueId &other) const