| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 7ca77dd commit daf3152
6 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -92,6 +92,11 @@ bool BaseObject::IsWeakOrDetached() const { | |||
| 92 | 92 | return pd->wants_weak_jsobj || pd->is_detached; | |
| 93 | 93 | } | |
| 94 | 94 | ||
| 95 | + v8::EmbedderGraph::Node::Detachedness BaseObject::GetDetachedness() const { | ||
| 96 | + return IsWeakOrDetached() ? v8::EmbedderGraph::Node::Detachedness::kDetached | ||
| 97 | + : v8::EmbedderGraph::Node::Detachedness::kUnknown; | ||
| 98 | + } | ||
| 99 | + | ||
| 95 | 100 | template <int Field> | |
| 96 | 101 | void BaseObject::InternalFieldGet( | |
| 97 | 102 | v8::Local<v8::String> property, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -85,6 +85,8 @@ class BaseObject : public MemoryRetainer { | |||
| 85 | 85 | // to it anymore. | |
| 86 | 86 | inline bool IsWeakOrDetached() const; | |
| 87 | 87 | ||
| 88 | + inline v8::EmbedderGraph::Node::Detachedness GetDetachedness() const override; | ||
| 89 | + | ||
| 88 | 90 | // Utility to create a FunctionTemplate with one internal field (used for | |
| 89 | 91 | // the `BaseObject*` pointer) and a constructor that initializes that field | |
| 90 | 92 | // to `nullptr`. | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -31,6 +31,7 @@ class MemoryRetainerNode : public v8::EmbedderGraph::Node { | |||
| 31 | 31 | ||
| 32 | 32 | name_ = retainer_->MemoryInfoName(); | |
| 33 | 33 | size_ = retainer_->SelfSize(); | |
| 34 | + detachedness_ = retainer_->GetDetachedness(); | ||
| 34 | 35 | } | |
| 35 | 36 | ||
| 36 | 37 | inline MemoryRetainerNode(MemoryTracker* tracker, | |
@@ -57,6 +58,9 @@ class MemoryRetainerNode : public v8::EmbedderGraph::Node { | |||
| 57 | 58 | } | |
| 58 | 59 | return is_root_node_; | |
| 59 | 60 | } | |
| 61 | + v8::EmbedderGraph::Node::Detachedness GetDetachedness() override { | ||
| 62 | + return detachedness_; | ||
| 63 | + } | ||
| 60 | 64 | ||
| 61 | 65 | private: | |
| 62 | 66 | friend class MemoryTracker; | |
@@ -73,6 +77,8 @@ class MemoryRetainerNode : public v8::EmbedderGraph::Node { | |||
| 73 | 77 | bool is_root_node_ = false; | |
| 74 | 78 | std::string name_; | |
| 75 | 79 | size_t size_ = 0; | |
| 80 | + v8::EmbedderGraph::Node::Detachedness detachedness_ = | ||
| 81 | + v8::EmbedderGraph::Node::Detachedness::kUnknown; | ||
| 76 | 82 | }; | |
| 77 | 83 | ||
| 78 | 84 | void MemoryTracker::TrackFieldWithSize(const char* edge_name, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -127,6 +127,9 @@ class MemoryRetainer { | |||
| 127 | 127 | } | |
| 128 | 128 | ||
| 129 | 129 | virtual bool IsRootNode() const { return false; } | |
| 130 | + virtual v8::EmbedderGraph::Node::Detachedness GetDetachedness() const { | ||
| 131 | + return v8::EmbedderGraph::Node::Detachedness::kUnknown; | ||
| 132 | + } | ||
| 130 | 133 | }; | |
| 131 | 134 | ||
| 132 | 135 | class MemoryTracker { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -142,6 +142,22 @@ class State { | |||
| 142 | 142 | } | |
| 143 | 143 | } | |
| 144 | 144 | } | |
| 145 | + | ||
| 146 | + if (expectation.detachedness !== undefined) { | ||
| 147 | + const matchedNodes = rootNodes.filter( | ||
| 148 | + (node) => node.detachedness === expectation.detachedness); | ||
| 149 | + if (loose) { | ||
| 150 | + assert(matchedNodes.length >= rootNodes.length, | ||
| 151 | + `Expect to find at least ${rootNodes.length} with ` + | ||
| 152 | + `detachedness ${expectation.detachedness}, ` + | ||
| 153 | + `found ${matchedNodes.length}`); | ||
| 154 | + } else { | ||
| 155 | + assert.strictEqual( | ||
| 156 | + matchedNodes.length, rootNodes.length, | ||
| 157 | + `Expect to find ${rootNodes.length} with detachedness ` + | ||
| 158 | + `${expectation.detachedness}, found ${matchedNodes.length}`); | ||
| 159 | + } | ||
| 160 | + } | ||
| 145 | 161 | } | |
| 146 | 162 | } | |
| 147 | 163 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -13,6 +13,7 @@ validateSnapshotNodes('Node / ChannelWrap', [ | |||
| 13 | 13 | { node_name: 'Node / NodeAresTask::List', edge_name: 'task_list' }, | |
| 14 | 14 | // `Node / ChannelWrap` (C++) -> `ChannelWrap` (JS) | |
| 15 | 15 | { node_name: 'ChannelWrap', edge_name: 'wrapped' }, | |
| 16 | - ] | ||
| 16 | + ], | ||
| 17 | + detachedness: 2 | ||
| 17 | 18 | }, | |
| 18 | 19 | ]); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments