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));
348 static void UseDetailedSourcePositionsForProfiling(
Isolate* isolate);
365 kContextVariable = 0,
379 Type GetType()
const;
419 Type GetType()
const;
432 SnapshotObjectId GetId()
const;
435 size_t GetShallowSize()
const;
438 int GetChildrenCount()
const;
456 virtual void EndOfStream() = 0;
464 virtual WriteResult WriteAsciiChunk(
char* data,
int size) = 0;
481 enum SerializationFormat {
492 int GetNodesCount()
const;
498 SnapshotObjectId GetMaxSnapshotJSObjectId()
const;
534 SerializationFormat format = kJSON)
const;
553 virtual ControlOption ReportProgressValue(
int done,
int total) = 0;
663 virtual Node* GetRootNode() = 0;
664 virtual const std::vector<Sample>& GetSamples() = 0;
668 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
669 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
691 virtual ~
Node() =
default;
692 virtual const char*
Name() = 0;
693 virtual size_t SizeInBytes() = 0;
700 virtual bool IsRootNode() {
return false; }
710 Node& operator=(
const Node&) =
delete;
723 virtual Node* AddNode(std::unique_ptr<Node> node) = 0;
733 virtual void AddEdge(Node* from, Node* to,
const char* name =
nullptr) = 0;
745 kSamplingNoFlags = 0,
746 kSamplingForceGC = 1 << 0,
760 typedef void (*LegacyBuildEmbedderGraphCallback)(
v8::Isolate* isolate,
764 int GetSnapshotCount();
786 void ClearObjectIds();
793 static const SnapshotObjectId kUnknownObjectId = 0;
826 void StartTrackingHeapObjects(
bool track_allocations =
false);
842 int64_t* timestamp_us =
nullptr);
849 void StopTrackingHeapObjects();
878 bool StartSamplingHeapProfiler(uint64_t sample_interval = 512 * 1024,
879 int stack_depth = 16,
880 SamplingFlags flags = kSamplingNoFlags);
885 void StopSamplingHeapProfiler();
899 void DeleteAllHeapSnapshots();
902 "Use AddBuildEmbedderGraphCallback to provide info about embedder nodes",
903 void SetBuildEmbedderGraphCallback(
904 LegacyBuildEmbedderGraphCallback callback));
905 void AddBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback,
907 void RemoveBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback,
915 static const uint16_t kPersistentHandleNoClassId = 0;
930 : index(index), count(count), size(size) { }
936 #define CODE_EVENTS_LIST(V) \ 941 V(InterpretedFunction) \ 955 #define V(Name) , k##Name##Type 965 uintptr_t GetCodeStartAddress();
966 size_t GetCodeSize();
970 int GetScriptColumn();
977 const char* GetComment();
979 static const char* GetCodeEventTypeName(
CodeEventType code_event_type);
1004 void* internal_listener_;
1010 #endif // V8_V8_PROFILER_H_ unsigned int hit_count
Definition: v8-profiler.h:129
Definition: v8-profiler.h:563
Definition: v8-profiler.h:215
virtual WriteResult WriteHeapStatsChunk(HeapStatsUpdate *data, int count)
Definition: v8-profiler.h:470
const char * deopt_reason
Definition: v8-profiler.h:38
virtual Node * WrapperNode()
Definition: v8-profiler.h:699
size_t size
Definition: v8-profiler.h:567
int script_id
Definition: v8-profiler.h:595
Definition: v8-profiler.h:985
int start_position
Definition: v8-profiler.h:600
unsigned int count
Definition: v8-profiler.h:572
Definition: v8-profiler.h:398
Definition: v8-profiler.h:36
Definition: v8-profiler.h:51
Local< String > name
Definition: v8-profiler.h:583
virtual bool IsEmbedderNode()
Definition: v8-profiler.h:702
size_t size
Definition: v8-profiler.h:644
Local< String > script_name
Definition: v8-profiler.h:589
virtual int GetChunkSize()
Definition: v8-profiler.h:458
Definition: v8-profiler.h:928
std::vector< Node * > children
Definition: v8-profiler.h:624
Definition: v8-profiler.h:362
Definition: v8-internal.h:15
Definition: v8-profiler.h:578
Definition: v8-profiler.h:23
Definition: v8-profiler.h:124
uint32_t node_id
Definition: v8-profiler.h:617
Definition: v8-profiler.h:561
int column_number
Definition: v8-profiler.h:612
Definition: v8-profiler.h:448
Definition: v8-profiler.h:542
uint32_t node_id
Definition: v8-profiler.h:639
Definition: v8-profiler.h:276
CodeEventType
Definition: v8-profiler.h:953
Definition: v8-profiler.h:635
uint64_t sample_id
Definition: v8-profiler.h:655
Definition: v8-profiler.h:798
Definition: v8-profiler.h:686
Definition: v8-profiler.h:742
virtual const char * NamePrefix()
Definition: v8-profiler.h:706
Definition: v8-profiler.h:688
Definition: v8-profiler.h:122
unsigned int count
Definition: v8-profiler.h:649
std::vector< Allocation > allocations
Definition: v8-profiler.h:629
int line_number
Definition: v8-profiler.h:606
Definition: v8-profiler.h:963
Definition: v8-profiler.h:479
int line
Definition: v8-profiler.h:126