V8: include/v8-profiler.h Source File (original) (raw)
1
2
3
4
5#ifndef V8_V8_PROFILER_H_
6#define V8_V8_PROFILER_H_
7
8#include <limits.h>
9
10#include
11#include <unordered_set>
12#include
13
14#include "cppgc/common.h"
16#include "v8-message.h"
18
22namespace v8 {
23
25class HeapGraphNode;
26struct HeapStatsUpdate;
27class Object;
29
33
37};
38
39namespace internal {
41}
42
43}
44
45#ifdef V8_OS_WIN
46template class V8_EXPORT std::vectorv8::CpuProfileDeoptFrame;
47#endif
48
49namespace v8 {
50
64};
65
70};
71
72}
73
74#ifdef V8_OS_WIN
75template class V8_EXPORT std::vectorv8::CpuProfileDeoptInfo;
76#endif
77
78namespace v8 {
79
84 public:
88
92
95 };
96
97
99
100 kScript = 0,
101
102 kBuiltin = 1,
103
104 kCallback = 2,
105
107
108 kUnresolved = 4,
109 };
110
113
120
123
126
133
139
145
151
156
163
168
173
176
181
184
187
190
192 const std::vector& GetDeoptInfos() const;
193
194 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
195 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
196};
197
202 public:
221 return kAbort;
222 }
223};
224
230 public:
232 kJSON = 0
236
239
245
251
258
264
269
274
281
287
306};
307
309
310
311
313
314
316};
317
318
320
322
323
325};
326
328
329
331
332
334};
335
336
337
338
343};
344
352};
353
358 public:
360
363
365
366 private:
367 friend internal::CpuProfile;
368
369 void SetId(ProfilerId id) { profiler_id_ = id; }
370
371 ProfilerId profiler_id_;
372};
373
378 public:
379
380 static const unsigned kNoSampleLimit = UINT_MAX;
381
400 unsigned max_samples = kNoSampleLimit, int sampling_interval_us = 0,
402 CpuProfileSource profile_source = CpuProfileSource::kUnspecified);
403
406
408 unsigned max_samples() const { return max_samples_; }
411
412 private:
413 friend class internal::CpuProfile;
414
415 bool has_filter_context() const { return !filter_context_.IsEmpty(); }
416 void* raw_filter_context() const;
417
419 unsigned max_samples_;
420 int sampling_interval_us_;
423};
424
430 public:
439
448 Isolate* isolate, const std::optional<uint64_t> trace_id = std::nullopt);
449
454
461
470
477 std::unique_ptr delegate = nullptr);
478
486 std::unique_ptr delegate = nullptr);
487
501 unsigned max_samples = CpuProfilingOptions::kNoSampleLimit);
502
509
517 std::unique_ptr delegate = nullptr);
518
532 unsigned max_samples = CpuProfilingOptions::kNoSampleLimit);
533
540 bool record_samples = false);
541
546
552
558
559 private:
564};
565
571 public:
573 kContextVariable = 0,
574 kElement = 1,
575 kProperty = 2,
577
578
579 kHidden = 4,
580
581 kShortcut = 5,
582
583 kWeak = 6
585
588
594
597
600};
601
602
607 public:
609 kHidden = 0,
610 kArray = 1,
611 kString = 2,
612 kObject = 3,
613 kCode = 4,
614 kClosure = 5,
615 kRegExp = 6,
616 kHeapNumber = 7,
617 kNative = 8,
618 kSynthetic = 9,
619
620 kConsString = 10,
621 kSlicedString = 11,
622 kSymbol = 12,
623 kBigInt = 13,
624 kObjectShape = 14,
625
626 };
627
630
637
643
646
649
652};
653
658 public:
660 kJSON = 0
662
665
668
671
674
677
684
713};
714
715
721 public:
723 kContinue = 0,
724 kAbort = 1
732};
733
739 public:
745
750 };
751
761
767
773
778
784
790
795
802
807 };
808
817
822
827
833 };
834
841 virtual const std::vector& GetSamples() = 0;
842
844
845 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo;
846 static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
847};
848
864 public:
866 public:
876 kAttached = 1,
877 kDetached = 2,
878 };
879
882 virtual const char* Name() = 0;
896 virtual const char* NamePrefix() { return nullptr; }
897
903
911
919 virtual const void* GetAddress() { return nullptr; }
920
923 };
924
936
949
954 virtual Node* AddNode(std::unique_ptr node) = 0;
955
964 virtual void AddEdge(Node* from, Node* to, const char* name = nullptr) = 0;
965
974
976};
977
979 public:
982};
983
989 public:
993
995 kSamplingNoFlags = 0,
996 kSamplingForceGC = 1 << 0,
997 kSamplingIncludeObjectsCollectedByMajorGC = 1 << 1,
998 kSamplingIncludeObjectsCollectedByMinorGC = 1 << 2,
999 };
1000
1007 typedef void (*BuildEmbedderGraphCallback)(v8::Isolate* isolate,
1009 void* data);
1010
1021 uint16_t class_id, void* data);
1022
1025
1028
1034
1040
1046
1053
1060
1067 public:
1073
1074 protected:
1076 };
1077
1083 public:
1090
1091 protected:
1093 };
1094
1099 kRegular,
1103 kExposeInternals,
1104 };
1105
1111 kHideNumericValues,
1115 kExposeNumericValues
1116 };
1117
1119
1120
1121
1123
1124
1125
1127
1128
1135 V8_DEPRECATE_SOON("Use context_name_resolver callback instead.")
1155 cppgc::EmbedderStackState stack_state =
1156 cppgc::EmbedderStackState::kMayContainHeapPointers;
1157 };
1158
1166
1176 bool hide_internals = true, bool capture_numeric_value = false);
1179 bool hide_internals = true,
1180 bool capture_numeric_value = false);
1181
1182
1184 std::nullptr_t resolver = nullptr,
1185 bool hide_internals = true,
1186 bool capture_numeric_value = false);
1187
1193
1203 void StartTrackingHeapObjects(bool track_allocations = false);
1204
1219 int64_t* timestamp_us = nullptr);
1220
1226 void StopTrackingHeapObjects();
1227
1253 bool StartSamplingHeapProfiler(uint64_t sample_interval = 512 * 1024,
1254 int stack_depth = 16,
1256
1260 void StopSamplingHeapProfiler();
1261
1269
1274 void DeleteAllHeapSnapshots();
1275
1276 void AddBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback,
1277 void* data);
1278 void RemoveBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback,
1279 void* data);
1280
1282
1286 bool IsTakingSnapshot();
1287
1293 const char* CopyNameForHeapSnapshot(const char* name);
1294
1300 static const uint16_t kPersistentHandleNoClassId = 0;
1301
1302 private:
1307};
1308
1315 : index(index), count(count), size(size) { }
1319};
1320
1321#define CODE_EVENTS_LIST(V) \
1322 V(Builtin) \
1323 V(Callback) \
1324 V(Eval) \
1325 V(Function) \
1326 V(InterpretedFunction) \
1327 V(Handler) \
1328 V(BytecodeHandler) \
1329 V(LazyCompile) \
1330 V(RegExp) \
1331 V(Script) \
1332 V(Stub) \
1333 V(Relocation)
1334
1341#define V(Name) , k##Name##Type
1344};
1345
1351 uintptr_t GetCodeStartAddress();
1352 size_t GetCodeSize();
1355 int GetScriptLine();
1356 int GetScriptColumn();
1363 const char* GetComment();
1365 static const char* GetCodeEventTypeName(CodeEventType code_event_type);
1367 uintptr_t GetPreviousCodeStartAddress();
1368};
1369
1374 public:
1382
1392
1397 void Enable();
1398
1403 void Disable();
1404
1405 private:
1409 void* internal_listener_;
1410};
1411
1412}
1413
1414
1415#endif
Definition: v8-profiler.h:720
ControlOption
Definition: v8-profiler.h:722
virtual ControlOption ReportProgressValue(uint32_t done, uint32_t total)=0
virtual ~ActivityControl()=default
Definition: v8-profiler.h:738
virtual const std::vector< Sample > & GetSamples()=0
virtual Node * GetRootNode()=0
virtual ~AllocationProfile()=default
Definition: v8-profiler.h:1372
Definition: v8-profiler.h:1348
Definition: v8-profiler.h:83
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:98
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:229
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:231
int64_t GetSampleTimestamp(int index) const
int64_t GetStartTime() const
EmbedderStateTag GetSampleEmbedderState(int index) const
void Serialize(OutputStream *stream, SerializationFormat format=kJSON) const
Definition: v8-profiler.h:429
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:377
CpuProfilingOptions(CpuProfilingMode mode=kLeafNodeLineNumbers, unsigned max_samples=kNoSampleLimit, int sampling_interval_us=0, MaybeLocal< Context > filter_context=MaybeLocal< Context >(), CpuProfileSource profile_source=CpuProfileSource::kUnspecified)
CpuProfilingOptions & operator=(CpuProfilingOptions &&)=default
int sampling_interval_us() const
Definition: v8-profiler.h:409
CpuProfileSource profile_source() const
Definition: v8-profiler.h:410
CpuProfilingMode mode() const
Definition: v8-profiler.h:407
unsigned max_samples() const
Definition: v8-profiler.h:408
CpuProfilingOptions(CpuProfilingOptions &&)=default
Definition: v8-profiler.h:357
ProfilerId GetId() const
Definition: v8-profiler.h:364
DiscardedSamplesDelegate()=default
virtual ~DiscardedSamplesDelegate()=default
Definition: v8-profiler.h:865
virtual Detachedness GetDetachedness()
Definition: v8-profiler.h:910
Detachedness
Definition: v8-profiler.h:874
Node & operator=(const Node &)=delete
virtual size_t SizeInBytes()=0
virtual bool IsEmbedderNode()
Definition: v8-profiler.h:892
virtual const char * Name()=0
virtual NativeObject GetNativeObject()
Definition: v8-profiler.h:902
virtual Node * WrapperNode()
Definition: v8-profiler.h:889
Node(const Node &)=delete
virtual const char * NamePrefix()
Definition: v8-profiler.h:896
virtual const void * GetAddress()
Definition: v8-profiler.h:919
virtual bool IsRootNode()
Definition: v8-profiler.h:890
Definition: v8-profiler.h:863
virtual void AddNativeSize(size_t size)
Definition: v8-profiler.h:973
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 Node * V8Node(const v8::Local< v8::Value > &value)=0
Definition: v8-persistent-handle.h:349
Definition: v8-profiler.h:570
Type
Definition: v8-profiler.h:572
const HeapGraphNode * GetToNode() const
const HeapGraphNode * GetFromNode() const
Local< Value > GetName() const
Definition: v8-profiler.h:606
Local< String > GetName() const
SnapshotObjectId GetId() const
Type
Definition: v8-profiler.h:608
const HeapGraphEdge * GetChild(int index) const
size_t GetShallowSize() const
int GetChildrenCount() const
Definition: v8-profiler.h:1082
virtual const char * GetName(Local< Context > context)=0
virtual ~ContextNameResolver()=default
Definition: v8-profiler.h:1066
virtual ~ObjectNameResolver()=default
virtual const char * GetName(Local< Object > object)=0
Definition: v8-profiler.h:988
Local< Value > FindObjectById(SnapshotObjectId id)
HeapSnapshotMode
Definition: v8-profiler.h:1095
SamplingFlags
Definition: v8-profiler.h:994
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)
const HeapSnapshot * GetHeapSnapshot(int index)
EmbedderGraph::Node::Detachedness(*)(v8::Isolate *isolate, const v8::Local< v8::Value > &v8_value, uint16_t class_id, void *data) GetDetachednessCallback
Definition: v8-profiler.h:1021
NumericsMode
Definition: v8-profiler.h:1106
Definition: v8-profiler.h:657
const HeapGraphNode * GetNodeById(SnapshotObjectId id) const
int GetNodesCount() const
SerializationFormat
Definition: v8-profiler.h:659
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:291
Definition: v8-local-handle.h:366
Definition: v8-local-handle.h:734
Definition: v8-profiler.h:201
virtual ~OutputStream()=default
virtual WriteResult WriteHeapStatsChunk(HeapStatsUpdate *data, int count)
Definition: v8-profiler.h:220
WriteResult
Definition: v8-profiler.h:203
virtual WriteResult WriteAsciiChunk(char *data, int size)=0
virtual void EndOfStream()=0
virtual int GetChunkSize()
Definition: v8-profiler.h:208
Definition: v8-profiler.h:978
virtual bool Filter(v8::Local< v8::Object > object)=0
virtual ~QueryObjectPredicate()=default
Definition: v8-value.h:32
Definition: allocation.h:38
Definition: libplatform.h:15
uint32_t SnapshotObjectId
Definition: v8-profiler.h:31
CpuProfilingStatus
Definition: v8-profiler.h:339
uint32_t ProfilerId
Definition: v8-profiler.h:32
CpuProfilingLoggingMode
Definition: v8-profiler.h:327
@ kEagerLogging
Definition: v8-profiler.h:333
@ kLazyLogging
Definition: v8-profiler.h:330
EmbedderStateTag
Definition: v8-embedder-state-scope.h:22
CpuProfilingMode
Definition: v8-profiler.h:308
@ kLeafNodeLineNumbers
Definition: v8-profiler.h:312
@ kCallerLineNumbers
Definition: v8-profiler.h:315
void * NativeObject
Definition: v8-profiler.h:30
CpuProfileSource
Definition: v8-profiler.h:54
CpuProfilingNamingMode
Definition: v8-profiler.h:319
@ kStandardNaming
Definition: v8-profiler.h:321
@ kDebugNaming
Definition: v8-profiler.h:324
CodeEventType
Definition: v8-profiler.h:1339
@ kUnknownType
Definition: v8-profiler.h:1340
StateTag
Definition: v8-unwinder.h:39
Definition: v8-profiler.h:740
unsigned int count
Definition: v8-profiler.h:749
size_t size
Definition: v8-profiler.h:744
Definition: v8-profiler.h:755
std::vector< Node * > children
Definition: v8-profiler.h:801
int script_id
Definition: v8-profiler.h:772
int start_position
Definition: v8-profiler.h:777
std::vector< Allocation > allocations
Definition: v8-profiler.h:806
int column_number
Definition: v8-profiler.h:789
uint32_t node_id
Definition: v8-profiler.h:794
int line_number
Definition: v8-profiler.h:783
Local< String > script_name
Definition: v8-profiler.h:766
Local< String > name
Definition: v8-profiler.h:760
Definition: v8-profiler.h:812
unsigned int count
Definition: v8-profiler.h:826
size_t size
Definition: v8-profiler.h:821
uint32_t node_id
Definition: v8-profiler.h:816
uint64_t sample_id
Definition: v8-profiler.h:832
Definition: v8-profiler.h:34
size_t position
Definition: v8-profiler.h:36
int script_id
Definition: v8-profiler.h:35
Definition: v8-profiler.h:66
const char * deopt_reason
Definition: v8-profiler.h:68
std::vector< CpuProfileDeoptFrame > stack
Definition: v8-profiler.h:69
Definition: v8-profiler.h:85
unsigned int hit_count
Definition: v8-profiler.h:94
int column
Definition: v8-profiler.h:91
int line
Definition: v8-profiler.h:87
Definition: v8-profiler.h:349
const ProfilerId id
Definition: v8-profiler.h:350
const CpuProfilingStatus status
Definition: v8-profiler.h:351
Definition: v8-profiler.h:1118
HeapSnapshotOptions()
Definition: v8-profiler.h:1122
Definition: v8-profiler.h:1313
uint32_t size
Definition: v8-profiler.h:1318
uint32_t index
Definition: v8-profiler.h:1316
uint32_t count
Definition: v8-profiler.h:1317
HeapStatsUpdate(uint32_t index, uint32_t count, uint32_t size)
Definition: v8-profiler.h:1314
#define CODE_EVENTS_LIST(V)
Definition: v8-profiler.h:1321
#define V8_EXPORT
Definition: v8config.h:855
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:622
#define ALLOW_COPY_AND_MOVE_WITH_DEPRECATED_FIELDS(ClassName)
Definition: v8config.h:645