5 #ifndef V8_V8_PROFILER_H_ 6 #define V8_V8_PROFILER_H_ 8 #include <unordered_set> 18 struct HeapStatsUpdate;
20 typedef uint32_t SnapshotObjectId;
31 template class V8_EXPORT std::vector<v8::CpuProfileDeoptFrame>;
39 std::vector<CpuProfileDeoptFrame> stack;
45 template class V8_EXPORT std::vector<v8::CpuProfileDeoptInfo>;
55 enum RecordCEntryFrame { kIncludeCEntryFrame, kSkipCEntryFrame };
60 external_callback_entry(
nullptr),
62 has_external_callback(
false),
78 RecordCEntryFrame record_c_entry_frame,
bool update_stats,
79 bool use_simulator_reg_state =
true);
101 RecordCEntryFrame record_c_entry_frame,
102 void** frames,
size_t frames_limit,
104 bool use_simulator_reg_state =
true);
109 void* external_callback_entry;
111 static const unsigned kMaxFramesCountLog2 = 8;
112 static const unsigned kMaxFramesCount = (1 << kMaxFramesCountLog2) - 1;
113 void* stack[kMaxFramesCount];
114 unsigned frames_count : kMaxFramesCountLog2;
115 bool has_external_callback : 1;
116 bool update_stats : 1;
140 const char* GetFunctionNameStr()
const;
143 int GetScriptId()
const;
153 const char* GetScriptResourceNameStr()
const;
159 int GetLineNumber()
const;
165 int GetColumnNumber()
const;
170 unsigned int GetHitLineCount()
const;
177 bool GetLineTicks(
LineTick* entries,
unsigned int length)
const;
182 const char* GetBailoutReason()
const;
187 unsigned GetHitCount()
const;
191 "Use GetScriptId, GetLineNumber, and GetColumnNumber instead.",
192 unsigned GetCallUid()
const);
195 unsigned GetNodeId()
const;
198 int GetChildrenCount()
const;
204 const std::vector<CpuProfileDeoptInfo>& GetDeoptInfos()
const;
206 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
207 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
227 int GetSamplesCount()
const;
240 int64_t GetSampleTimestamp(
int index)
const;
246 int64_t GetStartTime()
const;
253 int64_t GetEndTime()
const;
262 enum CpuProfilingMode {
266 kLeafNodeLineNumbers,
290 static void CollectSample(Isolate* isolate);
302 void SetSamplingInterval(
int us);
315 void StartProfiling(
Local<String> title, CpuProfilingMode mode,
316 bool record_samples =
false);
322 void StartProfiling(
Local<String> title,
bool record_samples =
false);
335 V8_DEPRECATED(
"Use static CollectSample(Isolate*) instead.",
336 void CollectSample());
341 V8_DEPRECATED(
"Use Isolate::SetIdle(bool) instead.",
342 void SetIdle(
bool is_idle));
359 kContextVariable = 0,
373 Type GetType()
const;
413 Type GetType()
const;
426 SnapshotObjectId GetId()
const;
429 size_t GetShallowSize()
const;
432 int GetChildrenCount()
const;
450 virtual void EndOfStream() = 0;
458 virtual WriteResult WriteAsciiChunk(
char* data,
int size) = 0;
475 enum SerializationFormat {
486 int GetNodesCount()
const;
492 SnapshotObjectId GetMaxSnapshotJSObjectId()
const;
528 SerializationFormat format = kJSON)
const;
547 virtual ControlOption ReportProgressValue(
int done,
int total) = 0;
626 virtual Node* GetRootNode() = 0;
630 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
631 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
653 virtual ~
Node() =
default;
654 virtual const char*
Name() = 0;
655 virtual size_t SizeInBytes() = 0;
662 virtual bool IsRootNode() {
return false; }
672 Node& operator=(
const Node&) =
delete;
685 virtual Node* AddNode(std::unique_ptr<Node> node) = 0;
695 virtual void AddEdge(Node* from, Node* to,
const char* name =
nullptr) = 0;
707 kSamplingNoFlags = 0,
708 kSamplingForceGC = 1 << 0,
711 typedef std::unordered_set<const v8::PersistentBase<v8::Value>*>
713 typedef std::vector<std::pair<v8::RetainedObjectInfo*, RetainerChildren>>
715 typedef std::vector<std::pair<const v8::PersistentBase<v8::Value>*,
720 RetainerGroups groups;
744 typedef void (*BuildEmbedderGraphCallback)(v8::Isolate* isolate,
749 typedef void (*LegacyBuildEmbedderGraphCallback)(v8::Isolate* isolate,
753 int GetSnapshotCount();
775 void ClearObjectIds();
782 static const SnapshotObjectId kUnknownObjectId = 0;
815 void StartTrackingHeapObjects(
bool track_allocations =
false);
831 int64_t* timestamp_us = NULL);
838 void StopTrackingHeapObjects();
867 bool StartSamplingHeapProfiler(uint64_t sample_interval = 512 * 1024,
868 int stack_depth = 16,
869 SamplingFlags flags = kSamplingNoFlags);
874 void StopSamplingHeapProfiler();
888 void DeleteAllHeapSnapshots();
892 "Use AddBuildEmbedderGraphCallback to provide info about embedder nodes",
893 void SetWrapperClassInfoProvider(uint16_t class_id,
894 WrapperInfoCallback callback));
897 "Use AddBuildEmbedderGraphCallback to provide info about embedder nodes",
898 void SetGetRetainerInfosCallback(GetRetainerInfosCallback callback));
901 "Use AddBuildEmbedderGraphCallback to provide info about embedder nodes",
902 void SetBuildEmbedderGraphCallback(
903 LegacyBuildEmbedderGraphCallback callback));
904 void AddBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback,
906 void RemoveBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback,
914 static const uint16_t kPersistentHandleNoClassId = 0;
950 virtual void Dispose() = 0;
959 virtual intptr_t GetHash() = 0;
965 virtual const char* GetLabel() = 0;
989 virtual ~RetainedObjectInfo() {}
992 RetainedObjectInfo(
const RetainedObjectInfo&);
993 RetainedObjectInfo& operator=(
const RetainedObjectInfo&);
1003 : index(index), count(count), size(size) { }
1009 #define CODE_EVENTS_LIST(V) \ 1014 V(InterpretedFunction) \ 1016 V(BytecodeHandler) \ 1028 #define V(Name) , k##Name##Type 1038 uintptr_t GetCodeStartAddress();
1039 size_t GetCodeSize();
1042 int GetScriptLine();
1043 int GetScriptColumn();
1050 const char* GetComment();
1052 static const char* GetCodeEventTypeName(
CodeEventType code_event_type);
1077 void* internal_listener_;
1083 #endif // V8_V8_PROFILER_H_ unsigned int hit_count
Definition: v8-profiler.h:129
Definition: v8-profiler.h:947
Definition: v8-profiler.h:557
Definition: v8-profiler.h:215
virtual WriteResult WriteHeapStatsChunk(HeapStatsUpdate *data, int count)
Definition: v8-profiler.h:464
const char * deopt_reason
Definition: v8-profiler.h:38
virtual Node * WrapperNode()
Definition: v8-profiler.h:661
size_t size
Definition: v8-profiler.h:561
int script_id
Definition: v8-profiler.h:589
Definition: v8-profiler.h:1058
virtual intptr_t GetElementCount()
Definition: v8-profiler.h:982
int start_position
Definition: v8-profiler.h:594
unsigned int count
Definition: v8-profiler.h:566
Definition: v8-profiler.h:392
Definition: v8-profiler.h:36
Definition: v8-profiler.h:51
Local< String > name
Definition: v8-profiler.h:577
virtual bool IsEmbedderNode()
Definition: v8-profiler.h:664
Local< String > script_name
Definition: v8-profiler.h:583
virtual int GetChunkSize()
Definition: v8-profiler.h:452
Definition: v8-profiler.h:1001
std::vector< Node * > children
Definition: v8-profiler.h:613
Definition: v8-profiler.h:356
virtual intptr_t GetSizeInBytes()
Definition: v8-profiler.h:985
Definition: v8-platform.h:16
Definition: v8-profiler.h:572
Definition: v8-profiler.h:23
Definition: v8-profiler.h:124
Definition: v8-profiler.h:555
int column_number
Definition: v8-profiler.h:606
Definition: v8-profiler.h:442
Definition: v8-profiler.h:719
Definition: v8-profiler.h:536
Definition: v8-profiler.h:276
CodeEventType
Definition: v8-profiler.h:1026
Definition: v8-profiler.h:787
virtual const char * GetGroupLabel()
Definition: v8-profiler.h:976
Definition: v8-profiler.h:648
Definition: v8-profiler.h:704
virtual const char * NamePrefix()
Definition: v8-profiler.h:668
Definition: v8-profiler.h:650
Definition: v8-profiler.h:122
std::vector< Allocation > allocations
Definition: v8-profiler.h:618
int line_number
Definition: v8-profiler.h:600
Definition: v8-profiler.h:1036
Definition: v8-profiler.h:473
int line
Definition: v8-profiler.h:126