| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent a534b65 commit e8352ff
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -179,4 +179,6 @@ void BaseObjectList::MemoryInfo(node::MemoryTracker* tracker) const { | |||
| 179 | 179 | } | |
| 180 | 180 | } | |
| 181 | 181 | ||
| 182 | + const char* const MemoryTracker::kWeakEdge = "<MemoryTracker::kWeakEdge>"; | ||
| 183 | + | ||
| 182 | 184 | } // namespace node | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -131,7 +131,7 @@ void MemoryTracker::TrackField(const char* edge_name, | |||
| 131 | 131 | if (value == nullptr) return; | |
| 132 | 132 | auto it = seen_.find(value); | |
| 133 | 133 | if (it != seen_.end()) { | |
| 134 | - graph_->AddEdge(CurrentNode(), it->second, edge_name); | ||
| 134 | + AddEdge(CurrentNode(), it->second, edge_name); | ||
| 135 | 135 | } else { | |
| 136 | 136 | Track(value, edge_name); | |
| 137 | 137 | } | |
@@ -253,9 +253,9 @@ void MemoryTracker::TrackField(const char* edge_name, | |||
| 253 | 253 | const v8::Local<T>& value, | |
| 254 | 254 | const char* node_name) { | |
| 255 | 255 | if (!value.IsEmpty()) | |
| 256 | - graph_->AddEdge(CurrentNode(), | ||
| 257 | - graph_->V8Node(value.template As<v8::Value>()), | ||
| 258 | - edge_name); | ||
| 256 | + AddEdge(CurrentNode(), | ||
| 257 | + graph_->V8Node(value.template As<v8::Value>()), | ||
| 258 | + edge_name); | ||
| 259 | 259 | } | |
| 260 | 260 | ||
| 261 | 261 | template <typename T> | |
@@ -300,7 +300,7 @@ void MemoryTracker::Track(const CppgcMixin* retainer, const char* edge_name) { | |||
| 300 | 300 | auto it = seen_.find(retainer); | |
| 301 | 301 | if (it != seen_.end()) { | |
| 302 | 302 | if (CurrentNode() != nullptr) { | |
| 303 | - graph_->AddEdge(CurrentNode(), it->second, edge_name); | ||
| 303 | + AddEdge(CurrentNode(), it->second, edge_name); | ||
| 304 | 304 | } | |
| 305 | 305 | return; // It has already been tracked, no need to call MemoryInfo again | |
| 306 | 306 | } | |
@@ -317,7 +317,7 @@ void MemoryTracker::Track(const MemoryRetainer* retainer, | |||
| 317 | 317 | auto it = seen_.find(retainer); | |
| 318 | 318 | if (it != seen_.end()) { | |
| 319 | 319 | if (CurrentNode() != nullptr) { | |
| 320 | - graph_->AddEdge(CurrentNode(), it->second, edge_name); | ||
| 320 | + AddEdge(CurrentNode(), it->second, edge_name); | ||
| 321 | 321 | } | |
| 322 | 322 | return; // It has already been tracked, no need to call MemoryInfo again | |
| 323 | 323 | } | |
@@ -376,7 +376,7 @@ MemoryRetainerNode* MemoryTracker::AddNode(const CppgcMixin* retainer, | |||
| 376 | 376 | MemoryRetainerNode* n = new MemoryRetainerNode(this, retainer); | |
| 377 | 377 | seen_[retainer] = n; | |
| 378 | 378 | if (CurrentNode() != nullptr) { | |
| 379 | - graph_->AddEdge(CurrentNode(), n->JSWrapperNode(), edge_name); | ||
| 379 | + AddEdge(CurrentNode(), n->JSWrapperNode(), edge_name); | ||
| 380 | 380 | } | |
| 381 | 381 | ||
| 382 | 382 | return n; | |
@@ -392,11 +392,11 @@ MemoryRetainerNode* MemoryTracker::AddNode(const MemoryRetainer* retainer, | |||
| 392 | 392 | MemoryRetainerNode* n = new MemoryRetainerNode(this, retainer); | |
| 393 | 393 | graph_->AddNode(std::unique_ptr<v8::EmbedderGraph::Node>(n)); | |
| 394 | 394 | seen_[retainer] = n; | |
| 395 | - if (CurrentNode() != nullptr) graph_->AddEdge(CurrentNode(), n, edge_name); | ||
| 395 | + if (CurrentNode() != nullptr) AddEdge(CurrentNode(), n, edge_name); | ||
| 396 | 396 | ||
| 397 | 397 | if (n->JSWrapperNode() != nullptr) { | |
| 398 | - graph_->AddEdge(n, n->JSWrapperNode(), "native_to_javascript"); | ||
| 399 | - graph_->AddEdge(n->JSWrapperNode(), n, "javascript_to_native"); | ||
| 398 | + AddEdge(n, n->JSWrapperNode(), "native_to_javascript"); | ||
| 399 | + AddEdge(n->JSWrapperNode(), n, "javascript_to_native"); | ||
| 400 | 400 | } | |
| 401 | 401 | ||
| 402 | 402 | return n; | |
@@ -408,7 +408,7 @@ MemoryRetainerNode* MemoryTracker::AddNode(const char* node_name, | |||
| 408 | 408 | MemoryRetainerNode* n = new MemoryRetainerNode(this, node_name, size); | |
| 409 | 409 | graph_->AddNode(std::unique_ptr<v8::EmbedderGraph::Node>(n)); | |
| 410 | 410 | ||
| 411 | - if (CurrentNode() != nullptr) graph_->AddEdge(CurrentNode(), n, edge_name); | ||
| 411 | + if (CurrentNode() != nullptr) AddEdge(CurrentNode(), n, edge_name); | ||
| 412 | 412 | ||
| 413 | 413 | return n; | |
| 414 | 414 | } | |
@@ -435,6 +435,13 @@ MemoryRetainerNode* MemoryTracker::PushNode(const char* node_name, | |||
| 435 | 435 | return n; | |
| 436 | 436 | } | |
| 437 | 437 | ||
| 438 | + void MemoryTracker::AddEdge(v8::EmbedderGraph::Node* from, | ||
| 439 | + v8::EmbedderGraph::Node* to, | ||
| 440 | + const char* edge_name) { | ||
| 441 | + if (edge_name == kWeakEdge) return; | ||
| 442 | + graph_->AddEdge(from, to, edge_name); | ||
| 443 | + } | ||
| 444 | + | ||
| 438 | 445 | void MemoryTracker::PopNode() { | |
| 439 | 446 | node_stack_.pop(); | |
| 440 | 447 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -300,6 +300,13 @@ class MemoryTracker { | |||
| 300 | 300 | v8::EmbedderGraph* graph) | |
| 301 | 301 | : isolate_(isolate), graph_(graph) {} | |
| 302 | 302 | ||
| 303 | + // Can be passed to Track() if it is not desirable | ||
| 304 | + // to create a strong edge between nodes, i.e. when | ||
| 305 | + // the node should be added to the graph and the | ||
| 306 | + // parent node is "tracking" the target node but | ||
| 307 | + // not directly keeping it alive. | ||
| 308 | + static const char* const kWeakEdge; | ||
| 309 | + | ||
| 303 | 310 | private: | |
| 304 | 311 | typedef std::unordered_map<const MemoryRetainer*, MemoryRetainerNode*> | |
| 305 | 312 | NodeMap; | |
@@ -321,6 +328,9 @@ class MemoryTracker { | |||
| 321 | 328 | size_t size, | |
| 322 | 329 | const char* edge_name = nullptr); | |
| 323 | 330 | inline void PopNode(); | |
| 331 | + inline void AddEdge(v8::EmbedderGraph::Node* from, | ||
| 332 | + v8::EmbedderGraph::Node* to, | ||
| 333 | + const char* edge_name = nullptr); | ||
| 324 | 334 | ||
| 325 | 335 | v8::Isolate* isolate_; | |
| 326 | 336 | v8::EmbedderGraph* graph_; | |
| Back | FazBrowse Home | New Git URL |
0 commit comments