lin
2025-07-30 fcd736bf35fd93b563e9bbf594f2aa7b62028cc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright 2013 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
 
#ifndef V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_INL_H_
#define V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_INL_H_
 
#include "src/profiler/heap-snapshot-generator.h"
 
#include "src/profiler/heap-profiler.h"
#include "src/string-hasher-inl.h"
 
namespace v8 {
namespace internal {
 
 
HeapEntry* HeapGraphEdge::from() const {
  return &snapshot()->entries()[from_index()];
}
 
 
Isolate* HeapGraphEdge::isolate() const {
  return snapshot()->profiler()->isolate();
}
 
 
HeapSnapshot* HeapGraphEdge::snapshot() const {
  return to_entry_->snapshot();
}
 
 
int HeapEntry::index() const {
  return static_cast<int>(this - &snapshot_->entries().front());
}
 
 
int HeapEntry::set_children_index(int index) {
  children_index_ = index;
  int next_index = index + children_count_;
  children_count_ = 0;
  return next_index;
}
 
void HeapEntry::add_child(HeapGraphEdge* edge) {
  *(children_begin() + children_count_++) = edge;
}
 
HeapGraphEdge* HeapEntry::child(int i) { return *(children_begin() + i); }
 
std::deque<HeapGraphEdge*>::iterator HeapEntry::children_begin() {
  DCHECK_GE(children_index_, 0);
  SLOW_DCHECK(
      children_index_ < static_cast<int>(snapshot_->children().size()) ||
      (children_index_ == static_cast<int>(snapshot_->children().size()) &&
       children_count_ == 0));
  return snapshot_->children().begin() + children_index_;
}
 
std::deque<HeapGraphEdge*>::iterator HeapEntry::children_end() {
  return children_begin() + children_count_;
}
 
Isolate* HeapEntry::isolate() const { return snapshot_->profiler()->isolate(); }
 
uint32_t HeapSnapshotJSONSerializer::StringHash(const void* string) {
  const char* s = reinterpret_cast<const char*>(string);
  int len = static_cast<int>(strlen(s));
  return StringHasher::HashSequentialString(s, len,
                                            v8::internal::kZeroHashSeed);
}
 
int HeapSnapshotJSONSerializer::to_node_index(const HeapEntry* e) {
  return to_node_index(e->index());
}
 
int HeapSnapshotJSONSerializer::to_node_index(int entry_index) {
  return entry_index * kNodeFieldsCount;
}
 
}  // namespace internal
}  // namespace v8
 
#endif  // V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_INL_H_