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

69 std::vector stack;

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,

576 kInternal = 3,

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) { }

1316 uint32_t index;

1317 uint32_t count;

1318 uint32_t 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