5#ifndef V8_V8_PROFILER_H_
6#define V8_V8_PROFILER_H_
11#include <unordered_set>
26struct HeapStatsUpdate;
79template class V8_EXPORT std::vector<v8::CpuProfileDeoptFrame>;
102 std::vector<CpuProfileDeoptFrame>
stack;
108template class V8_EXPORT std::vector<v8::CpuProfileDeoptInfo>;
227 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
228 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
409 friend internal::CpuProfile;
411 void SetId(
ProfilerId id) { profiler_id_ = id; }
413 ProfilerId profiler_id_;
422 static const unsigned kNoSampleLimit = UINT_MAX;
448 unsigned max_samples = kNoSampleLimit,
int sampling_interval_us = 0,
461 return sample_context_extractor_;
465 friend class internal::CpuProfile;
467 bool has_filter_context()
const {
return !filter_context_.IsEmpty(); }
468 void* raw_filter_context()
const;
471 unsigned max_samples_;
472 int sampling_interval_us_;
501 Isolate* isolate,
const std::optional<uint64_t> trace_id = std::nullopt);
530 std::unique_ptr<DiscardedSamplesDelegate> delegate =
nullptr);
539 std::unique_ptr<DiscardedSamplesDelegate> delegate =
nullptr);
554 unsigned max_samples = CpuProfilingOptions::kNoSampleLimit);
570 std::unique_ptr<DiscardedSamplesDelegate> delegate =
nullptr);
585 unsigned max_samples = CpuProfilingOptions::kNoSampleLimit);
593 bool record_samples =
false);
626 kContextVariable = 0,
904 void* context =
nullptr;
917 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
918 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
954 virtual const char*
Name() = 0;
1047 AddEdge(from, to, name);
1079 kSamplingNoFlags = 0,
1080 kSamplingForceGC = 1 << 0,
1081 kSamplingIncludeObjectsCollectedByMajorGC = 1 << 1,
1082 kSamplingIncludeObjectsCollectedByMinorGC = 1 << 2,
1105 uint16_t class_id,
void* data);
1200 kExposeNumericValues
1249 bool hide_internals =
true,
1250 bool capture_numeric_value =
false);
1283 int64_t* timestamp_us =
nullptr);
1325 uint64_t sample_interval = 512 * 1024,
int stack_depth = 16,
1388 static const uint16_t kPersistentHandleNoClassId = 0;
1403 : index(index), count(count), size(size) { }
1409#define CODE_EVENTS_LIST(V) \
1414 V(InterpretedFunction) \
1416 V(BytecodeHandler) \
1429#define V(Name) , k##Name##Type
1439 uintptr_t GetCodeStartAddress();
1440 size_t GetCodeSize();
1443 int GetScriptLine();
1444 int GetScriptColumn();
1451 const char* GetComment();
1453 static const char* GetCodeEventTypeName(
CodeEventType code_event_type);
1455 uintptr_t GetPreviousCodeStartAddress();
1497 void* internal_listener_;
Definition: v8-profiler.h:773
ControlOption
Definition: v8-profiler.h:775
virtual ControlOption ReportProgressValue(uint32_t done, uint32_t total)=0
virtual ~ActivityControl()=default
Definition: v8-profiler.h:791
virtual const std::vector< Sample > & GetSamples()=0
virtual Node * GetRootNode()=0
virtual ~AllocationProfile()=default
Definition: v8-profiler.h:1460
Definition: v8-profiler.h:1436
Definition: v8-profiler.h:116
const CpuProfileNode * GetChild(int index) const
bool GetLineTicks(LineTick *entries, unsigned int length) const
const CpuProfileNode * GetParent() const
unsigned GetHitCount() const
unsigned int GetHitLineCount() const
int GetLineNumber() const
unsigned GetNodeId() const
const char * GetScriptResourceNameStr() const
const char * GetFunctionNameStr() const
const std::vector< CpuProfileDeoptInfo > & GetDeoptInfos() const
SourceType
Definition: v8-profiler.h:131
int GetColumnNumber() const
Local< String > GetFunctionName() const
Local< String > GetScriptResourceName() const
SourceType GetSourceType() const
const char * GetBailoutReason() const
bool IsScriptSharedCrossOrigin() const
int GetChildrenCount() const
Definition: v8-profiler.h:262
const CpuProfileNode * GetTopDownRoot() const
int GetSamplesCount() const
StateTag GetSampleState(int index) const
Local< String > GetTitle() const
int64_t GetEndTime() const
const CpuProfileNode * GetSample(int index) const
SerializationFormat
Definition: v8-profiler.h:264
int64_t GetSampleTimestamp(int index) const
int64_t GetStartTime() const
EmbedderStateTag GetSampleEmbedderState(int index) const
void * GetSampleContext(int index) const
void Serialize(OutputStream *stream, SerializationFormat format=kJSON) const
Definition: v8-profiler.h:482
CpuProfilingResult Start(CpuProfilingOptions options, std::unique_ptr< DiscardedSamplesDelegate > delegate=nullptr)
static void CollectSample(Isolate *isolate, const std::optional< uint64_t > trace_id=std::nullopt)
CpuProfilingStatus StartProfiling(Local< String > title, CpuProfilingOptions options, std::unique_ptr< DiscardedSamplesDelegate > delegate=nullptr)
void SetUsePreciseSampling(bool)
static CpuProfiler * New(Isolate *isolate, CpuProfilingNamingMode=kDebugNaming, CpuProfilingLoggingMode=kLazyLogging)
CpuProfilingResult Start(Local< String > title, CpuProfilingMode mode, bool record_samples=false, unsigned max_samples=CpuProfilingOptions::kNoSampleLimit)
CpuProfilingStatus StartProfiling(Local< String > title, CpuProfilingMode mode, bool record_samples=false, unsigned max_samples=CpuProfilingOptions::kNoSampleLimit)
CpuProfile * StopProfiling(Local< String > title)
CpuProfilingResult Start(Local< String > title, CpuProfilingOptions options, std::unique_ptr< DiscardedSamplesDelegate > delegate=nullptr)
void SetSamplingInterval(int us)
CpuProfile * Stop(ProfilerId id)
static void UseDetailedSourcePositionsForProfiling(Isolate *isolate)
CpuProfilingStatus StartProfiling(Local< String > title, bool record_samples=false)
CpuProfilingResult Start(Local< String > title, bool record_samples=false)
Definition: v8-profiler.h:419
CpuProfilingOptions & operator=(CpuProfilingOptions &&)=default
int sampling_interval_us() const
Definition: v8-profiler.h:458
CpuProfileSource profile_source() const
Definition: v8-profiler.h:459
CpuProfilingOptions(CpuProfilingMode mode=kLeafNodeLineNumbers, unsigned max_samples=kNoSampleLimit, int sampling_interval_us=0, MaybeLocal< Context > filter_context=MaybeLocal< Context >(), CpuProfileSource profile_source=CpuProfileSource::kUnspecified, SampleContextExtractor sample_context_extractor=nullptr)
CpuProfilingMode mode() const
Definition: v8-profiler.h:456
unsigned max_samples() const
Definition: v8-profiler.h:457
CpuProfilingOptions(CpuProfilingOptions &&)=default
SampleContextExtractor sample_context_extractor() const
Definition: v8-profiler.h:460
Definition: v8-profiler.h:399
ProfilerId GetId() const
Definition: v8-profiler.h:406
DiscardedSamplesDelegate()=default
virtual ~DiscardedSamplesDelegate()=default
Definition: v8-profiler.h:937
virtual Detachedness GetDetachedness()
Definition: v8-profiler.h:982
Detachedness
Definition: v8-profiler.h:946
Node & operator=(const Node &)=delete
virtual size_t SizeInBytes()=0
virtual bool IsEmbedderNode()
Definition: v8-profiler.h:964
virtual const char * Name()=0
virtual NativeObject GetNativeObject()
Definition: v8-profiler.h:974
virtual Node * WrapperNode()
Definition: v8-profiler.h:961
Node(const Node &)=delete
virtual const char * NamePrefix()
Definition: v8-profiler.h:968
virtual const void * GetAddress()
Definition: v8-profiler.h:991
virtual bool IsRootNode()
Definition: v8-profiler.h:962
Definition: v8-profiler.h:935
virtual void AddNativeSize(size_t size)
Definition: v8-profiler.h:1057
virtual ~EmbedderGraph()=default
virtual void AddEdge(Node *from, Node *to, const char *name=nullptr)=0
virtual Node * AddNode(std::unique_ptr< Node > node)=0
virtual Node * V8Node(const v8::Local< v8::Data > &value)
virtual void AddWeakEdge(Node *from, Node *to, const char *name=nullptr)
Definition: v8-profiler.h:1046
virtual Node * V8Node(const v8::Local< v8::Value > &value)=0
Definition: v8-persistent-handle.h:353
Definition: v8-profiler.h:623
Type
Definition: v8-profiler.h:625
const HeapGraphNode * GetToNode() const
const HeapGraphNode * GetFromNode() const
Local< Value > GetName() const
Definition: v8-profiler.h:659
Local< String > GetName() const
SnapshotObjectId GetId() const
Type
Definition: v8-profiler.h:661
const HeapGraphEdge * GetChild(int index) const
size_t GetShallowSize() const
int GetChildrenCount() const
Definition: v8-profiler.h:1167
virtual const char * GetName(Local< Context > context)=0
virtual ~ContextNameResolver()=default
Definition: v8-profiler.h:1151
virtual ~ObjectNameResolver()=default
virtual const char * GetName(Local< Object > object)=0
Definition: v8-profiler.h:1072
void StartTrackingHeapObjects(bool track_allocations=false)
void SetGetDetachednessCallback(GetDetachednessCallback callback, void *data)
bool StartSamplingHeapProfiler(uint64_t sample_interval=512 *1024, int stack_depth=16, SamplingFlags flags=kSamplingNoFlags, SampleContextExtractor sample_context_extractor=nullptr)
const HeapSnapshot * TakeHeapSnapshot(ActivityControl *control, ContextNameResolver *resolver=nullptr, bool hide_internals=true, bool capture_numeric_value=false)
Local< Value > FindObjectById(SnapshotObjectId id)
AllocationProfile * GetAllocationProfile()
void RemoveBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback, void *data)
void AddBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback, void *data)
std::vector< AllocationProfile::Sample > GetSamplingHeapProfilerSamples()
std::vector< v8::Local< v8::Value > > GetDetachedJSWrapperObjects()
void DeleteAllHeapSnapshots()
void SetSamplingHeapProfilerInterval(uint64_t sample_interval)
const char * CopyNameForHeapSnapshot(const char *name)
HeapSnapshotMode
Definition: v8-profiler.h:1180
SamplingFlags
Definition: v8-profiler.h:1078
void QueryObjects(v8::Local< v8::Context > context, QueryObjectPredicate *predicate, std::vector< v8::Global< v8::Object > > *objects)
SnapshotObjectId GetObjectId(NativeObject value)
SnapshotObjectId GetObjectId(Local< Value > value)
void StopSamplingHeapProfiler()
const HeapSnapshot * TakeHeapSnapshot(const HeapSnapshotOptions &options=HeapSnapshotOptions())
const HeapSnapshot * GetHeapSnapshot(int index)
SnapshotObjectId GetHeapStats(OutputStream *stream, int64_t *timestamp_us=nullptr)
void StopTrackingHeapObjects()
EmbedderGraph::Node::Detachedness(*)(v8::Isolate *isolate, const v8::Local< v8::Value > &v8_value, uint16_t class_id, void *data) GetDetachednessCallback
Definition: v8-profiler.h:1105
NumericsMode
Definition: v8-profiler.h:1191
Definition: v8-profiler.h:710
const HeapGraphNode * GetNodeById(SnapshotObjectId id) const
int GetNodesCount() const
SerializationFormat
Definition: v8-profiler.h:712
const HeapGraphNode * GetRoot() const
SnapshotObjectId GetMaxSnapshotJSObjectId() const
const HeapGraphNode * GetNode(int index) const
void Serialize(OutputStream *stream, SerializationFormat format=kJSON) const
Definition: v8-isolate.h:305
Definition: v8-local-handle.h:359
Definition: v8-local-handle.h:730
Definition: v8-profiler.h:234
virtual ~OutputStream()=default
virtual WriteResult WriteHeapStatsChunk(HeapStatsUpdate *data, int count)
Definition: v8-profiler.h:253
WriteResult
Definition: v8-profiler.h:236
virtual WriteResult WriteAsciiChunk(char *data, int size)=0
virtual void EndOfStream()=0
virtual int GetChunkSize()
Definition: v8-profiler.h:241
Definition: v8-profiler.h:1062
virtual bool Filter(v8::Local< v8::Object > object)=0
virtual ~QueryObjectPredicate()=default
EmbedderStackState
Definition: common.h:20
@ kMayContainHeapPointers
Definition: libplatform.h:15
uint32_t SnapshotObjectId
Definition: v8-profiler.h:31
CpuProfilingStatus
Definition: v8-profiler.h:381
uint32_t ProfilerId
Definition: v8-profiler.h:32
CpuProfilingLoggingMode
Definition: v8-profiler.h:369
@ kEagerLogging
Definition: v8-profiler.h:375
@ kLazyLogging
Definition: v8-profiler.h:372
EmbedderStateTag
Definition: v8-embedder-state-scope.h:22
CpuProfilingMode
Definition: v8-profiler.h:350
@ kLeafNodeLineNumbers
Definition: v8-profiler.h:354
@ kCallerLineNumbers
Definition: v8-profiler.h:357
void * NativeObject
Definition: v8-profiler.h:30
CpuProfileSource
Definition: v8-profiler.h:87
void *(*)(Isolate *) SampleContextExtractor
Definition: v8-profiler.h:65
CpuProfilingNamingMode
Definition: v8-profiler.h:361
@ kStandardNaming
Definition: v8-profiler.h:363
@ kDebugNaming
Definition: v8-profiler.h:366
CodeEventType
Definition: v8-profiler.h:1427
@ kUnknownType
Definition: v8-profiler.h:1428
StateTag
Definition: v8-unwinder.h:39
Definition: v8-profiler.h:793
unsigned int count
Definition: v8-profiler.h:802
size_t size
Definition: v8-profiler.h:797
Definition: v8-profiler.h:808
std::vector< Node * > children
Definition: v8-profiler.h:854
int script_id
Definition: v8-profiler.h:825
int start_position
Definition: v8-profiler.h:830
std::vector< Allocation > allocations
Definition: v8-profiler.h:859
int column_number
Definition: v8-profiler.h:842
uint32_t node_id
Definition: v8-profiler.h:847
int line_number
Definition: v8-profiler.h:836
Local< String > script_name
Definition: v8-profiler.h:819
Local< String > name
Definition: v8-profiler.h:813
Definition: v8-profiler.h:865
unsigned int count
Definition: v8-profiler.h:879
size_t size
Definition: v8-profiler.h:874
uint64_t sample_interval
Definition: v8-profiler.h:896
uint32_t node_id
Definition: v8-profiler.h:869
bool is_live
Definition: v8-profiler.h:891
uint64_t sample_id
Definition: v8-profiler.h:885
Definition: v8-profiler.h:67
size_t position
Definition: v8-profiler.h:69
int script_id
Definition: v8-profiler.h:68
Definition: v8-profiler.h:99
const char * deopt_reason
Definition: v8-profiler.h:101
std::vector< CpuProfileDeoptFrame > stack
Definition: v8-profiler.h:102
Definition: v8-profiler.h:118
unsigned int hit_count
Definition: v8-profiler.h:127
int column
Definition: v8-profiler.h:124
int line
Definition: v8-profiler.h:120
Definition: v8-profiler.h:391
const ProfilerId id
Definition: v8-profiler.h:392
const CpuProfilingStatus status
Definition: v8-profiler.h:393
Definition: v8-profiler.h:1203
HeapSnapshotOptions()
Definition: v8-profiler.h:1207
Definition: v8-profiler.h:1401
uint32_t size
Definition: v8-profiler.h:1406
uint32_t index
Definition: v8-profiler.h:1404
uint32_t count
Definition: v8-profiler.h:1405
HeapStatsUpdate(uint32_t index, uint32_t count, uint32_t size)
Definition: v8-profiler.h:1402
#define CODE_EVENTS_LIST(V)
Definition: v8-profiler.h:1409
#define V8_EXPORT
Definition: v8config.h:874
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:631