Skip to content

Commit 950ccee

Browse files
joyeecheungtargos
authored andcommitted
src: name EmbededderGraph edges and use class names for nodes
This patch: - Refactors the `MemoryRetainer` API so that the impementer no longer calls `TrackThis()` that sets the size of node on the top of the stack, which may be hard to understand. Instead now they implements `SelfSize()` to provide their self sizes. Also documents the API in the header. - Refactors `MemoryTracker` so it calls `MemoryInfoName()` and `SelfSize()` of `MemoryRetainer` to retrieve info about them, and separate `node_names` and `edge_names` so the edges can be properly named with reference names and the nodes can be named with class names. (Previously the nodes are named with reference names while the edges are all indexed and appear as array elements). - Adds `SET_MEMORY_INFO_NAME()`, `SET_SELF_SIZE()` and `SET_NO_MEMORY_INFO()` convenience macros - Fixes a few `MemoryInfo` calls in some `MemoryRetainers` to track their references properly. - Refactors the heapdump tests to check both node names and edge names, distinguishing between wrapped JS nodes (without prefixes) and embedder wrappers (prefixed with `Node / `). Backport-PR-URL: #23295 PR-URL: #23072 Reviewed-By: Anna Henningsen <[email protected]>
1 parent 390fc85 commit 950ccee

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+734
-507
lines changed

‎lib/internal/test/heap.js‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ function createJSHeapDump(){
3737
constfromNode=nodes[fromNodeIndex];
3838
constedge={
3939
type,
40-
toNode,
41-
fromNode,
40+
to: toNode,
41+
from: fromNode,
4242
name: typeofname_or_index==='string' ? name_or_index : null
4343
};
4444
toNode.incomingEdges.push(edge);

‎src/async_wrap.cc‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ struct AsyncWrapObject : public AsyncWrap{
7272
inlineAsyncWrapObject(Environment* env, Local<Object> object,
7373
ProviderType type) : AsyncWrap(env, object, type){}
7474

75-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
76-
tracker->TrackThis(this);
77-
}
75+
SET_NO_MEMORY_INFO()
76+
SET_MEMORY_INFO_NAME(AsyncWrapObject)
77+
SET_SELF_SIZE(AsyncWrapObject)
7878
};
7979

8080

@@ -180,9 +180,9 @@ class PromiseWrap : public AsyncWrap{
180180
MakeWeak();
181181
}
182182

183-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
184-
tracker->TrackThis(this);
185-
}
183+
SET_NO_MEMORY_INFO()
184+
SET_MEMORY_INFO_NAME(PromiseWrap)
185+
SET_SELF_SIZE(PromiseWrap)
186186

187187
staticconstexprintkPromiseField = 1;
188188
staticconstexprintkIsChainedPromiseField = 2;

‎src/base_object.h‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,6 @@ namespace node{
3333

3434
classEnvironment;
3535

36-
#defineADD_MEMORY_INFO_NAME(name) \
37-
std::string MemoryInfoName() constoverride{\
38-
return #name; \
39-
}
40-
4136
classBaseObject : publicMemoryRetainer{
4237
public:
4338
// Associates this object with `object`. It uses the 0th internal field for

‎src/cares_wrap.cc‎

Lines changed: 52 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,9 @@ struct node_ares_task : public MemoryRetainer{
127127
ares_socket_t sock;
128128
uv_poll_t poll_watcher;
129129

130-
voidMemoryInfo(MemoryTracker* tracker) constoverride;
131-
ADD_MEMORY_INFO_NAME(node_ares_task)
130+
inlinevoidMemoryInfo(MemoryTracker* tracker) constoverride;
131+
SET_MEMORY_INFO_NAME(node_ares_task)
132+
SET_SELF_SIZE(node_ares_task)
132133
};
133134

134135
structTaskHash{
@@ -172,13 +173,13 @@ class ChannelWrap : public AsyncWrap{
172173
inline node_ares_task_list* task_list(){return &task_list_}
173174

174175
voidMemoryInfo(MemoryTracker* tracker) constoverride{
175-
tracker->TrackThis(this);
176176
if (timer_handle_ != nullptr)
177-
tracker->TrackFieldWithSize("timer handle", sizeof(*timer_handle_));
178-
tracker->TrackField("node_ares_task_list", task_list_);
177+
tracker->TrackField("timer_handle", *timer_handle_);
178+
tracker->TrackField("task_list", task_list_, "node_ares_task_list");
179179
}
180180

181-
ADD_MEMORY_INFO_NAME(ChannelWrap)
181+
SET_MEMORY_INFO_NAME(ChannelWrap)
182+
SET_SELF_SIZE(ChannelWrap)
182183

183184
staticvoidAresTimeout(uv_timer_t* handle);
184185

@@ -192,11 +193,6 @@ class ChannelWrap : public AsyncWrap{
192193
node_ares_task_list task_list_;
193194
};
194195

195-
voidnode_ares_task::MemoryInfo(MemoryTracker* tracker) const{
196-
tracker->TrackThis(this);
197-
tracker->TrackField("channel", channel);
198-
}
199-
200196
ChannelWrap::ChannelWrap(Environment* env,
201197
Local<Object> object)
202198
: AsyncWrap(env, object, PROVIDER_DNSCHANNEL),
@@ -225,11 +221,9 @@ class GetAddrInfoReqWrap : public ReqWrap<uv_getaddrinfo_t>{
225221
Local<Object> req_wrap_obj,
226222
bool verbatim);
227223

228-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
229-
tracker->TrackThis(this);
230-
}
231-
232-
ADD_MEMORY_INFO_NAME(GetAddrInfoReqWrap)
224+
SET_NO_MEMORY_INFO()
225+
SET_MEMORY_INFO_NAME(GetAddrInfoReqWrap)
226+
SET_SELF_SIZE(GetAddrInfoReqWrap)
233227

234228
boolverbatim() const{return verbatim_}
235229

@@ -249,11 +243,9 @@ class GetNameInfoReqWrap : public ReqWrap<uv_getnameinfo_t>{
249243
public:
250244
GetNameInfoReqWrap(Environment* env, Local<Object> req_wrap_obj);
251245

252-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
253-
tracker->TrackThis(this);
254-
}
255-
256-
ADD_MEMORY_INFO_NAME(GetNameInfoReqWrap)
246+
SET_NO_MEMORY_INFO()
247+
SET_MEMORY_INFO_NAME(GetNameInfoReqWrap)
248+
SET_SELF_SIZE(GetNameInfoReqWrap)
257249
};
258250

259251
GetNameInfoReqWrap::GetNameInfoReqWrap(Environment* env,
@@ -298,6 +290,9 @@ void ares_poll_close_cb(uv_poll_t* watcher){
298290
delete task;
299291
}
300292

293+
voidnode_ares_task::MemoryInfo(MemoryTracker* tracker) const{
294+
tracker->TrackField("channel", channel);
295+
}
301296

302297
/* Allocates and returns a new node_ares_task */
303298
node_ares_task* ares_task_create(ChannelWrap* channel, ares_socket_t sock){
@@ -1195,11 +1190,9 @@ class QueryAnyWrap: public QueryWrap{
11951190
return0;
11961191
}
11971192

1198-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1199-
tracker->TrackThis(this);
1200-
}
1201-
1202-
ADD_MEMORY_INFO_NAME(QueryAnyWrap)
1193+
SET_NO_MEMORY_INFO()
1194+
SET_MEMORY_INFO_NAME(QueryAnyWrap)
1195+
SET_SELF_SIZE(QueryAnyWrap)
12031196

12041197
protected:
12051198
voidParse(unsignedchar* buf, int len) override{
@@ -1376,11 +1369,9 @@ class QueryAWrap: public QueryWrap{
13761369
return0;
13771370
}
13781371

1379-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1380-
tracker->TrackThis(this);
1381-
}
1382-
1383-
ADD_MEMORY_INFO_NAME(QueryAWrap)
1372+
SET_NO_MEMORY_INFO()
1373+
SET_MEMORY_INFO_NAME(QueryAWrap)
1374+
SET_SELF_SIZE(QueryAWrap)
13841375

13851376
protected:
13861377
voidParse(unsignedchar* buf, int len) override{
@@ -1424,11 +1415,9 @@ class QueryAaaaWrap: public QueryWrap{
14241415
return0;
14251416
}
14261417

1427-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1428-
tracker->TrackThis(this);
1429-
}
1430-
1431-
ADD_MEMORY_INFO_NAME(QueryAaaaWrap)
1418+
SET_NO_MEMORY_INFO()
1419+
SET_MEMORY_INFO_NAME(QueryAaaaWrap)
1420+
SET_SELF_SIZE(QueryAaaaWrap)
14321421

14331422
protected:
14341423
voidParse(unsignedchar* buf, int len) override{
@@ -1472,11 +1461,9 @@ class QueryCnameWrap: public QueryWrap{
14721461
return0;
14731462
}
14741463

1475-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1476-
tracker->TrackThis(this);
1477-
}
1478-
1479-
ADD_MEMORY_INFO_NAME(QueryCnameWrap)
1464+
SET_NO_MEMORY_INFO()
1465+
SET_MEMORY_INFO_NAME(QueryCnameWrap)
1466+
SET_SELF_SIZE(QueryCnameWrap)
14801467

14811468
protected:
14821469
voidParse(unsignedchar* buf, int len) override{
@@ -1507,11 +1494,9 @@ class QueryMxWrap: public QueryWrap{
15071494
return0;
15081495
}
15091496

1510-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1511-
tracker->TrackThis(this);
1512-
}
1513-
1514-
ADD_MEMORY_INFO_NAME(QueryMxWrap)
1497+
SET_NO_MEMORY_INFO()
1498+
SET_MEMORY_INFO_NAME(QueryMxWrap)
1499+
SET_SELF_SIZE(QueryMxWrap)
15151500

15161501
protected:
15171502
voidParse(unsignedchar* buf, int len) override{
@@ -1542,11 +1527,9 @@ class QueryNsWrap: public QueryWrap{
15421527
return0;
15431528
}
15441529

1545-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1546-
tracker->TrackThis(this);
1547-
}
1548-
1549-
ADD_MEMORY_INFO_NAME(QueryNsWrap)
1530+
SET_NO_MEMORY_INFO()
1531+
SET_MEMORY_INFO_NAME(QueryNsWrap)
1532+
SET_SELF_SIZE(QueryNsWrap)
15501533

15511534
protected:
15521535
voidParse(unsignedchar* buf, int len) override{
@@ -1577,11 +1560,9 @@ class QueryTxtWrap: public QueryWrap{
15771560
return0;
15781561
}
15791562

1580-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1581-
tracker->TrackThis(this);
1582-
}
1583-
1584-
ADD_MEMORY_INFO_NAME(QueryTxtWrap)
1563+
SET_NO_MEMORY_INFO()
1564+
SET_MEMORY_INFO_NAME(QueryTxtWrap)
1565+
SET_SELF_SIZE(QueryTxtWrap)
15851566

15861567
protected:
15871568
voidParse(unsignedchar* buf, int len) override{
@@ -1611,11 +1592,9 @@ class QuerySrvWrap: public QueryWrap{
16111592
return0;
16121593
}
16131594

1614-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1615-
tracker->TrackThis(this);
1616-
}
1617-
1618-
ADD_MEMORY_INFO_NAME(QuerySrvWrap)
1595+
SET_NO_MEMORY_INFO()
1596+
SET_MEMORY_INFO_NAME(QuerySrvWrap)
1597+
SET_SELF_SIZE(QuerySrvWrap)
16191598

16201599
protected:
16211600
voidParse(unsignedchar* buf, int len) override{
@@ -1644,11 +1623,9 @@ class QueryPtrWrap: public QueryWrap{
16441623
return0;
16451624
}
16461625

1647-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1648-
tracker->TrackThis(this);
1649-
}
1650-
1651-
ADD_MEMORY_INFO_NAME(QueryPtrWrap)
1626+
SET_NO_MEMORY_INFO()
1627+
SET_MEMORY_INFO_NAME(QueryPtrWrap)
1628+
SET_SELF_SIZE(QueryPtrWrap)
16521629

16531630
protected:
16541631
voidParse(unsignedchar* buf, int len) override{
@@ -1679,11 +1656,9 @@ class QueryNaptrWrap: public QueryWrap{
16791656
return0;
16801657
}
16811658

1682-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1683-
tracker->TrackThis(this);
1684-
}
1685-
1686-
ADD_MEMORY_INFO_NAME(QueryNaptrWrap)
1659+
SET_NO_MEMORY_INFO()
1660+
SET_MEMORY_INFO_NAME(QueryNaptrWrap)
1661+
SET_SELF_SIZE(QueryNaptrWrap)
16871662

16881663
protected:
16891664
voidParse(unsignedchar* buf, int len) override{
@@ -1713,11 +1688,9 @@ class QuerySoaWrap: public QueryWrap{
17131688
return0;
17141689
}
17151690

1716-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1717-
tracker->TrackThis(this);
1718-
}
1719-
1720-
ADD_MEMORY_INFO_NAME(QuerySoaWrap)
1691+
SET_NO_MEMORY_INFO()
1692+
SET_MEMORY_INFO_NAME(QuerySoaWrap)
1693+
SET_SELF_SIZE(QuerySoaWrap)
17211694

17221695
protected:
17231696
voidParse(unsignedchar* buf, int len) override{
@@ -1801,11 +1774,9 @@ class GetHostByAddrWrap: public QueryWrap{
18011774
return0;
18021775
}
18031776

1804-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
1805-
tracker->TrackThis(this);
1806-
}
1807-
1808-
ADD_MEMORY_INFO_NAME(GetHostByAddrWrap)
1777+
SET_NO_MEMORY_INFO()
1778+
SET_MEMORY_INFO_NAME(GetHostByAddrWrap)
1779+
SET_SELF_SIZE(GetHostByAddrWrap)
18091780

18101781
protected:
18111782
voidParse(structhostent* host) override{

‎src/connect_wrap.h‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ class ConnectWrap : public ReqWrap<uv_connect_t>{
1616
v8::Local<v8::Object> req_wrap_obj,
1717
AsyncWrap::ProviderType provider);
1818

19-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
20-
tracker->TrackThis(this);
21-
}
22-
23-
ADD_MEMORY_INFO_NAME(ConnectWrap)
19+
SET_NO_MEMORY_INFO()
20+
SET_MEMORY_INFO_NAME(ConnectWrap)
21+
SET_SELF_SIZE(ConnectWrap)
2422
};
2523

2624
} // namespace node

‎src/fs_event_wrap.cc‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,9 @@ class FSEventWrap: public HandleWrap{
5757
staticvoidStart(const FunctionCallbackInfo<Value>& args);
5858
staticvoidGetInitialized(const FunctionCallbackInfo<Value>& args);
5959

60-
voidMemoryInfo(MemoryTracker* tracker) constoverride{
61-
tracker->TrackThis(this);
62-
}
63-
64-
ADD_MEMORY_INFO_NAME(FSEventWrap)
60+
SET_NO_MEMORY_INFO()
61+
SET_MEMORY_INFO_NAME(FSEventWrap)
62+
SET_SELF_SIZE(FSEventWrap)
6563

6664
private:
6765
staticconst encoding kDefaultEncoding = UTF8;

0 commit comments

Comments
(0)