5#ifndef V8_V8_PROFILER_H_
6#define V8_V8_PROFILER_H_
11#include <unordered_set>
26struct HeapStatsUpdate;
46template class V8_EXPORT std::vector<v8::CpuProfileDeoptFrame>;
54 std::vector<CpuProfileDeoptFrame>
stack;
60template class V8_EXPORT std::vector<v8::CpuProfileDeoptInfo>;
100 const char* GetFunctionNameStr()
const;
103 int GetScriptId()
const;
113 const char* GetScriptResourceNameStr()
const;
119 bool IsScriptSharedCrossOrigin()
const;
125 int GetLineNumber()
const;
131 int GetColumnNumber()
const;
136 unsigned int GetHitLineCount()
const;
143 bool GetLineTicks(LineTick*
entries,
unsigned int length)
const;
148 const char* GetBailoutReason()
const;
153 unsigned GetHitCount()
const;
156 unsigned GetNodeId()
const;
161 SourceType GetSourceType()
const;
164 int GetChildrenCount()
const;
173 const std::vector<CpuProfileDeoptInfo>& GetDeoptInfos()
const;
175 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
176 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
225 int GetSamplesCount()
const;
238 int64_t GetSampleTimestamp(
int index)
const;
244 int64_t GetStartTime()
const;
249 StateTag GetSampleState(
int index)
const;
261 int64_t GetEndTime()
const;
286 SerializationFormat format = kJSON)
const;
361 static const unsigned kNoSampleLimit = UINT_MAX;
380 unsigned max_samples = kNoSampleLimit,
int sampling_interval_us = 0,
394 void* raw_filter_context()
const;
424 static void CollectSample(
425 Isolate* isolate,
const std::optional<uint64_t> trace_id = std::nullopt);
437 void SetSamplingInterval(
int us);
446 void SetUsePreciseSampling(
bool);
454 std::unique_ptr<DiscardedSamplesDelegate> delegate =
nullptr);
463 std::unique_ptr<DiscardedSamplesDelegate> delegate =
nullptr);
478 unsigned max_samples = CpuProfilingOptions::kNoSampleLimit);
494 std::unique_ptr<DiscardedSamplesDelegate> delegate =
nullptr);
509 unsigned max_samples = CpuProfilingOptions::kNoSampleLimit);
517 bool record_samples =
false);
534 static void UseDetailedSourcePositionsForProfiling(
Isolate* isolate);
550 kContextVariable = 0,
564 Type GetType()
const;
606 Type GetType()
const;
622 size_t GetShallowSize()
const;
625 int GetChildrenCount()
const;
647 int GetNodesCount()
const;
689 SerializationFormat format = kJSON)
const;
822 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
823 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
859 virtual const char*
Name() = 0;
972 kSamplingNoFlags = 0,
973 kSamplingForceGC = 1 << 0,
974 kSamplingIncludeObjectsCollectedByMajorGC = 1 << 1,
975 kSamplingIncludeObjectsCollectedByMinorGC = 1 << 2,
998 uint16_t class_id,
void*
data);
1001 int GetSnapshotCount();
1029 void ClearObjectIds();
1073 kExposeNumericValues
1122 bool hide_internals =
true,
bool capture_numeric_value =
false);
1128 std::vector<v8::Local<v8::Value>> GetDetachedJSWrapperObjects();
1139 void StartTrackingHeapObjects(
bool track_allocations =
false);
1155 int64_t* timestamp_us =
nullptr);
1162 void StopTrackingHeapObjects();
1189 bool StartSamplingHeapProfiler(uint64_t sample_interval = 512 * 1024,
1190 int stack_depth = 16,
1196 void StopSamplingHeapProfiler();
1210 void DeleteAllHeapSnapshots();
1212 void AddBuildEmbedderGraphCallback(BuildEmbedderGraphCallback
callback,
1214 void RemoveBuildEmbedderGraphCallback(BuildEmbedderGraphCallback
callback,
1222 bool IsTakingSnapshot();
1229 const char* CopyNameForHeapSnapshot(
const char* name);
1236 static const uint16_t kPersistentHandleNoClassId = 0;
1251 : index(index), count(count), size(size) { }
1257#define CODE_EVENTS_LIST(V) \
1262 V(InterpretedFunction) \
1264 V(BytecodeHandler) \
1277#define V(Name) , k##Name##Type
1287 uintptr_t GetCodeStartAddress();
1288 size_t GetCodeSize();
1291 int GetScriptLine();
1292 int GetScriptColumn();
1299 const char* GetComment();
1301 static const char* GetCodeEventTypeName(
CodeEventType code_event_type);
1303 uintptr_t GetPreviousCodeStartAddress();
union v8::internal::@341::BuiltinMetadata::KindSpecificData data
virtual ControlOption ReportProgressValue(uint32_t done, uint32_t total)=0
virtual ~ActivityControl()=default
virtual const std::vector< Sample > & GetSamples()=0
virtual Node * GetRootNode()=0
virtual ~AllocationProfile()=default
CodeEventHandler(const CodeEventHandler &)
virtual void Handle(CodeEvent *code_event)=0
CodeEventHandler & operator=(const CodeEventHandler &)
void * internal_listener_
CpuProfiler & operator=(const CpuProfiler &)
CpuProfiler(const CpuProfiler &)
CpuProfilingOptions & operator=(CpuProfilingOptions &&)=default
int sampling_interval_us() const
Global< Context > filter_context_
bool has_filter_context() const
CpuProfilingMode mode() const
unsigned max_samples() const
CpuProfilingOptions(CpuProfilingOptions &&)=default
int sampling_interval_us_
DiscardedSamplesDelegate()=default
virtual ~DiscardedSamplesDelegate()=default
void SetId(ProfilerId id)
virtual Detachedness GetDetachedness()
Node & operator=(const Node &)=delete
virtual size_t SizeInBytes()=0
virtual bool IsEmbedderNode()
virtual const char * Name()=0
virtual NativeObject GetNativeObject()
virtual Node * WrapperNode()
Node(const Node &)=delete
virtual const char * NamePrefix()
virtual const void * GetAddress()
virtual bool IsRootNode()
virtual void AddNativeSize(size_t size)
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::Value > &value)=0
virtual ~ObjectNameResolver()=default
virtual const char * GetName(Local< Object > object)=0
HeapProfiler & operator=(const HeapProfiler &)
EmbedderGraph::Node::Detachedness(*)( v8::Isolate *isolate, const v8::Local< v8::Value > &v8_value, uint16_t class_id, void *data) GetDetachednessCallback
HeapProfiler(const HeapProfiler &)
virtual ~OutputStream()=default
virtual WriteResult WriteHeapStatsChunk(HeapStatsUpdate *data, int count)
virtual WriteResult WriteAsciiChunk(char *data, int size)=0
virtual void EndOfStream()=0
virtual int GetChunkSize()
virtual bool Filter(v8::Local< v8::Object > object)=0
virtual ~QueryObjectPredicate()=default
RecordWriteMode const mode_
ZoneVector< Entry > entries
@ kMayContainHeapPointers
uint32_t SnapshotObjectId
std::vector< Node * > children
std::vector< Allocation > allocations
Local< String > script_name
const char * deopt_reason
std::vector< CpuProfileDeoptFrame > stack
const CpuProfilingStatus status
HeapStatsUpdate(uint32_t index, uint32_t count, uint32_t size)
#define CODE_EVENTS_LIST(V)